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;