Mercurial > hg > Members > kono > Cerium
diff Renderer/Engine/SceneGraph.h @ 507:735f76483bb2
Reorganization..
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 12 Oct 2009 09:39:35 +0900 |
parents | Renderer/test_render/SceneGraph.h@55ea4465b1a2 |
children | 6f741ab60749 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Renderer/Engine/SceneGraph.h Mon Oct 12 09:39:35 2009 +0900 @@ -0,0 +1,109 @@ +#ifndef INCLUDED_SCENE_GRAPH +#define INCLUDED_SCENE_GRAPH + +#include "polygon.h" +#include "Pad.h" +#include "TaskManager.h" +class SceneGraph; + +typedef void (*move_func)(SceneGraph* node, int screen_w, int screen_h); +typedef void (*collision_func)(SceneGraph* node, int screen_w, int screen_h, + SceneGraph* tree); +typedef SceneGraph* SceneGraphPtr; + +class SceneGraph : public Polygon { +public: + SceneGraph(void); + SceneGraph(TaskManager *manager, xmlNodePtr surface); + SceneGraph(SceneGraphPtr orig); + ~SceneGraph(void); + + // Node がもつ状態変数(というべきか否か + // xyz,angle ぐらいあればおk? + float stack_xyz[3]; + float stack_angle[3]; + int id; + + int property_size; + void* propertyptr; + + // xml ファイルから生成した時のオブジェクトリスト + SceneGraphPtr next; + SceneGraphPtr prev; + SceneGraphPtr last; + + // Tree Structure + SceneGraphPtr parent; + SceneGraphPtr brother; + SceneGraphPtr children; + SceneGraphPtr lastChild; + + // Tree から削除されていたら 1 をセット。default = 0 + int flag_remove; + + // SceneGraph ID (SGList.h) + int sgid; + + // この SceneGraph は描画するものかどうか (0:しない 1:する + int flag_drawable; + + // anime frame num + int frame; + + // Group ID + int gid; + + // 関数ポインタ + move_func move; + collision_func collision; + + // desutroctor で呼ばれる + void (SceneGraph::*finalize)(void); + + void init(void); + void finalize_original(void); + void finalize_copy(void); + void move_execute(int screen_w, int screen_h); + void collision_check(int screen_w, int screen_h, SceneGraphPtr tree); + void all_execute(int screen_w, int screen_h); + + void add_next(SceneGraphPtr next); + SceneGraphPtr addChild(SceneGraphPtr child); + SceneGraphPtr addBrother(SceneGraphPtr bro); + SceneGraphPtr clone(void); + SceneGraphPtr clone(void *buf); + SceneGraphPtr searchSceneGraph(const char *name); + void set_move_collision(SceneGraphPtr node, + move_func new_move, collision_func new_collision); + void set_move_collision(move_func new_move, collision_func new_collision); + void remove(void); + SceneGraphPtr realRemoveFromTree(SceneGraphPtr tree); + SceneGraphPtr realRemoveFromList(SceneGraphPtr list); + int isRemoved(void); + + static SceneGraphPtr createSceneGraph(int id); + + void translate(float x, float y, float z); + void translateX(float x); + void translateY(float y); + void translateZ(float z); + + + void tree_check(void); + void print_member(void); + void get_data(TaskManager *manager, xmlNodePtr cur); + void delete_data(void); + + SDL_Surface* load_decode_image(char *image_name, xmlNodePtr cur); + int makeTapestries(TaskManager *manager, SDL_Surface *texture_image, int id); + void get_image(TaskManager *manager, xmlNodePtr cur); +}; + +#endif + +// 帯域変数を使うのは禁止なので削除すること +// オリジナル (Linked List) +extern SceneGraphPtr scene_graph; + +// 描画用 (同じオブジェクトが複数ある) Tree +extern SceneGraphPtr scene_graph_view;