rayzor

view src/snode.h @ 13:964f8ea5f095

missed quite a lot of things in my last commit apparently
author John Tsiombikas <nuclear@member.fsf.org>
date Sat, 12 Apr 2014 23:37:55 +0300
parents
children a9a948809c6f
line source
1 #ifndef SCENE_NODE_H_
2 #define SCENE_NODE_H_
4 #include "vector.h"
5 #include "vmath.h"
6 #include "quat.h"
7 #include "vmathmat.h"
8 #include "vmathray.h"
10 enum NodeType {
11 NODE_NULL,
12 NODE_OBJECT,
13 NODE_LIGHT,
14 NODE_CAMERA
15 };
17 class SceneNode {
18 protected:
19 char *name;
20 NodeType type;
22 Vector3 pos;
23 Quat rot;
24 Vector3 scale;
25 Vector3 pivot;
27 mutable Matrix4x4 xform, inv_xform;
28 mutable bool xform_valid, inv_xform_valid;
30 vector<SceneNode*> children;
31 SceneNode *parent;
33 SceneNode(const SceneNode &node) {}
34 SceneNode &operator =(const SceneNode &node) { return *this; }
36 void invalidate() const;
37 virtual void calc_matrix() const;
38 virtual void calc_inv_matrix() const;
40 public:
41 SceneNode();
42 virtual ~SceneNode();
44 virtual void set_name(const char *name);
45 virtual const char *get_name() const;
47 virtual NodeType get_type() const;
49 virtual SceneNode *get_parent();
50 virtual const SceneNode *get_parent() const;
52 // children management
53 virtual void add_child(SceneNode *child);
54 virtual void remove_child(SceneNode *child);
56 virtual int get_children_count() const;
57 virtual SceneNode *get_child(int idx);
58 virtual const SceneNode *get_child(int idx) const;
60 virtual void set_position(const Vector3 &pos);
61 virtual Vector3 get_node_position() const;
63 virtual void set_rotation(const Quat &quat);
64 virtual Quat get_node_rotation() const;
66 virtual void set_scaling(const Vector3 &scale);
67 virtual Vector3 get_node_scaling() const;
69 // these take hierarchy into account
70 virtual Vector3 get_position() const;
71 virtual Quat get_rotation() const;
72 virtual Vector3 get_scaling() const;
74 virtual void set_pivot(const Vector3 &pivot);
75 virtual Vector3 get_pivot() const;
77 virtual const Matrix4x4 &get_matrix() const;
78 virtual const Matrix4x4 &get_inv_matrix() const;
80 virtual void draw() const;
82 virtual bool intersect(const Ray &ray, float *dist = 0) const;
83 };
85 #endif /* SCENE_NODE_H_ */