view Renderer/test_render/SceneGraph.h @ 283:55ea4465b1a2

fix test_render
author e065746@localhost.localdomain
date Fri, 05 Jun 2009 16:49:12 +0900
parents
children
line wrap: on
line source

#ifndef INCLUDED_SCENE_GRAPH
#define INCLUDED_SCENE_GRAPH

#ifndef INCLUDED_POLYGON
#  include "polygon.h"
#endif

#ifndef INCLUDED_PAD
#  include "Pad.h"
#endif

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(xmlNodePtr surface);
    SceneGraph(SceneGraphPtr orig);
    ~SceneGraph(void);

    // Node がもつ状態変数(というべきか否か
    // xyz,angle ぐらいあればおk?
    float stack_xyz[3];
    float stack_angle[3];

    // 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;

    // 関数ポインタ
    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 void createFromXMLfile(const char *);
    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(xmlNodePtr cur);
    void delete_data(void);
};

#endif

// オリジナル (Linked List)
extern SceneGraphPtr scene_graph;

// 描画用 (同じオブジェクトが複数ある) Tree
extern SceneGraphPtr scene_graph_view;