283
|
1 #ifndef INCLUDED_SCENE_GRAPH
|
|
2 #define INCLUDED_SCENE_GRAPH
|
|
3
|
507
|
4 #include "polygon.h"
|
|
5 #include "Pad.h"
|
|
6 #include "TaskManager.h"
|
283
|
7 class SceneGraph;
|
|
8
|
|
9 typedef void (*move_func)(SceneGraph* node, int screen_w, int screen_h);
|
|
10 typedef void (*collision_func)(SceneGraph* node, int screen_w, int screen_h,
|
507
|
11 SceneGraph* tree);
|
283
|
12 typedef SceneGraph* SceneGraphPtr;
|
|
13
|
|
14 class SceneGraph : public Polygon {
|
|
15 public:
|
|
16 SceneGraph(void);
|
507
|
17 SceneGraph(TaskManager *manager, xmlNodePtr surface);
|
283
|
18 SceneGraph(SceneGraphPtr orig);
|
|
19 ~SceneGraph(void);
|
|
20
|
|
21 // Node がもつ状態変数(というべきか否か
|
|
22 // xyz,angle ぐらいあればおk?
|
|
23 float stack_xyz[3];
|
|
24 float stack_angle[3];
|
507
|
25 int id;
|
|
26
|
|
27 int property_size;
|
|
28 void* propertyptr;
|
283
|
29
|
|
30 // xml ファイルから生成した時のオブジェクトリスト
|
|
31 SceneGraphPtr next;
|
|
32 SceneGraphPtr prev;
|
|
33 SceneGraphPtr last;
|
|
34
|
|
35 // Tree Structure
|
|
36 SceneGraphPtr parent;
|
|
37 SceneGraphPtr brother;
|
|
38 SceneGraphPtr children;
|
|
39 SceneGraphPtr lastChild;
|
|
40
|
|
41 // Tree から削除されていたら 1 をセット。default = 0
|
|
42 int flag_remove;
|
|
43
|
|
44 // SceneGraph ID (SGList.h)
|
|
45 int sgid;
|
|
46
|
|
47 // この SceneGraph は描画するものかどうか (0:しない 1:する
|
|
48 int flag_drawable;
|
|
49
|
|
50 // anime frame num
|
|
51 int frame;
|
|
52
|
507
|
53 // Group ID
|
|
54 int gid;
|
|
55
|
283
|
56 // 関数ポインタ
|
|
57 move_func move;
|
|
58 collision_func collision;
|
|
59
|
|
60 // desutroctor で呼ばれる
|
|
61 void (SceneGraph::*finalize)(void);
|
|
62
|
|
63 void init(void);
|
|
64 void finalize_original(void);
|
|
65 void finalize_copy(void);
|
|
66 void move_execute(int screen_w, int screen_h);
|
|
67 void collision_check(int screen_w, int screen_h, SceneGraphPtr tree);
|
|
68 void all_execute(int screen_w, int screen_h);
|
|
69
|
|
70 void add_next(SceneGraphPtr next);
|
|
71 SceneGraphPtr addChild(SceneGraphPtr child);
|
|
72 SceneGraphPtr addBrother(SceneGraphPtr bro);
|
|
73 SceneGraphPtr clone(void);
|
|
74 SceneGraphPtr clone(void *buf);
|
|
75 SceneGraphPtr searchSceneGraph(const char *name);
|
|
76 void set_move_collision(SceneGraphPtr node,
|
507
|
77 move_func new_move, collision_func new_collision);
|
283
|
78 void set_move_collision(move_func new_move, collision_func new_collision);
|
|
79 void remove(void);
|
|
80 SceneGraphPtr realRemoveFromTree(SceneGraphPtr tree);
|
|
81 SceneGraphPtr realRemoveFromList(SceneGraphPtr list);
|
|
82 int isRemoved(void);
|
|
83
|
|
84 static SceneGraphPtr createSceneGraph(int id);
|
|
85
|
|
86 void translate(float x, float y, float z);
|
|
87 void translateX(float x);
|
|
88 void translateY(float y);
|
|
89 void translateZ(float z);
|
|
90
|
|
91
|
|
92 void tree_check(void);
|
|
93 void print_member(void);
|
507
|
94 void get_data(TaskManager *manager, xmlNodePtr cur);
|
283
|
95 void delete_data(void);
|
507
|
96
|
|
97 SDL_Surface* load_decode_image(char *image_name, xmlNodePtr cur);
|
|
98 int makeTapestries(TaskManager *manager, SDL_Surface *texture_image, int id);
|
|
99 void get_image(TaskManager *manager, xmlNodePtr cur);
|
283
|
100 };
|
|
101
|
|
102 #endif
|
|
103
|
507
|
104 // 帯域変数を使うのは禁止なので削除すること
|
283
|
105 // オリジナル (Linked List)
|
|
106 extern SceneGraphPtr scene_graph;
|
|
107
|
|
108 // 描画用 (同じオブジェクトが複数ある) Tree
|
|
109 extern SceneGraphPtr scene_graph_view;
|