Pioneer
Loading...
Searching...
No Matches
Node.h
Go to the documentation of this file.
1// Copyright © 2008-2024 Pioneer Developers. See AUTHORS.txt for details
2// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
3
4#ifndef _NODE_H
5#define _NODE_H
6/*
7 * Generic node for the model scenegraph
8 */
9#include "RefCounted.h"
10#include "graphics/Material.h"
11
12#include <string>
13#include <vector>
14
15namespace Graphics {
16 class Renderer;
17}
18
19namespace Serializer {
20 class Reader;
21 class Writer;
22} // namespace Serializer
23
24namespace SceneGraph {
25
26 class BaseLoader;
27 class NodeVisitor;
28 class NodeCopyCache;
29 class Model;
30 class Group;
31
32 //Node traversal mask - for other
33 //purposes, use NodeFlags
34 enum NodeMask {
37 MASK_IGNORE = 0x4
38 };
39
40 //misc flags to identify features
41 enum NodeFlags {
42 NODE_TAG = 0x1,
43 NODE_DECAL = 0x2
44 };
45
46 //Small structure used internally to pass rendering data
47 struct RenderData {
48 float linthrust[3]; // 1.0 to -1.0
49 float angthrust[3]; // 1.0 to -1.0
51
52 float boundingRadius; //updated by model and passed to submodels
53 unsigned int nodemask;
54
56 linthrust(),
57 angthrust(),
58 boundingRadius(0.f),
59 nodemask(NODE_SOLID) //draw solids
60 {
61 }
62 };
63
64 //Collection of stuff nodes need for serialization -
65 //makes maintaining function signatures easier
66 struct NodeDatabase {
69 // Graphics::Renderer *renderer;
71 std::vector<std::pair<std::string, RefCountedPtr<Graphics::Material>>> *materials;
73 };
74
75 class Node : public RefCounted {
76 public:
78 Node(Graphics::Renderer *r, unsigned int nodemask);
79 Node(const Node &, NodeCopyCache *);
80 virtual Node *Clone(NodeCopyCache *) = 0; //implement clone to return shallow or deep copy
81 virtual const char *GetTypeName() const { return "Node"; }
82 virtual void Save(NodeDatabase &);
83
84 virtual void Accept(NodeVisitor &v);
85 virtual void Traverse(NodeVisitor &v);
86 virtual void Render(const matrix4x4f &trans, const RenderData *rd) {}
87 virtual void Render(const std::vector<matrix4x4f> &trans, const RenderData *rd) {}
88 void DrawAxes();
89 void SetName(const std::string &name) { m_name = name; }
90 const std::string &GetName() const { return m_name; }
91
92 void SetParent(Group *parent) { m_parent = parent; }
93 Group *GetParent() { return m_parent; }
94 const Group *GetParent() const { return m_parent; }
95
96 virtual Node *FindNode(const std::string &);
97
98 unsigned int GetNodeMask() const { return m_nodeMask; }
99 void SetNodeMask(unsigned int m) { m_nodeMask = m; }
100
101 unsigned int GetNodeFlags() const { return m_nodeFlags; }
102 void SetNodeFlags(unsigned int m) { m_nodeFlags = m; }
103
105
106 protected:
107 //can only to be deleted using DecRefCount
108 virtual ~Node();
109 std::string m_name;
110 unsigned int m_nodeMask;
111 unsigned int m_nodeFlags;
114 };
115
116} // namespace SceneGraph
117
118#endif
Definition: Renderer.h:45
Definition: RefCounted.h:11
Definition: BaseLoader.h:17
Definition: Group.h:13
Definition: Model.h:87
Definition: NodeCopyCache.h:14
Definition: NodeVisitor.h:25
Definition: Node.h:75
virtual void Save(NodeDatabase &)
Definition: Node.cpp:66
virtual void Accept(NodeVisitor &v)
Definition: Node.cpp:43
unsigned int GetNodeFlags() const
Definition: Node.h:101
unsigned int GetNodeMask() const
Definition: Node.h:98
Graphics::Renderer * GetRenderer() const
Definition: Node.h:104
Graphics::Renderer * m_renderer
Definition: Node.h:112
const std::string & GetName() const
Definition: Node.h:90
unsigned int m_nodeMask
Definition: Node.h:110
void SetParent(Group *parent)
Definition: Node.h:92
std::string m_name
Definition: Node.h:109
virtual Node * FindNode(const std::string &)
Definition: Node.cpp:52
unsigned int m_nodeFlags
Definition: Node.h:111
virtual Node * Clone(NodeCopyCache *)=0
virtual ~Node()
Definition: Node.cpp:39
virtual void Render(const matrix4x4f &trans, const RenderData *rd)
Definition: Node.h:86
void SetNodeMask(unsigned int m)
Definition: Node.h:99
void SetNodeFlags(unsigned int m)
Definition: Node.h:102
Group * m_parent
Definition: Node.h:113
virtual const char * GetTypeName() const
Definition: Node.h:81
Group * GetParent()
Definition: Node.h:93
const Group * GetParent() const
Definition: Node.h:94
void SetName(const std::string &name)
Definition: Node.h:89
virtual void Traverse(NodeVisitor &v)
Definition: Node.cpp:48
void DrawAxes()
Definition: Node.cpp:60
virtual void Render(const std::vector< matrix4x4f > &trans, const RenderData *rd)
Definition: Node.h:87
Definition: Serializer.h:111
Definition: Serializer.h:36
Definition: Background.h:14
Definition: CityOnPlanet.h:32
NodeMask
Definition: Node.h:34
@ NODE_TRANSPARENT
Definition: Node.h:36
@ NODE_SOLID
Definition: Node.h:35
@ MASK_IGNORE
Definition: Node.h:37
NodeFlags
Definition: Node.h:41
@ NODE_DECAL
Definition: Node.h:43
@ NODE_TAG
Definition: Node.h:42
Definition: GeomTree.h:12
Definition: Color.h:66
Definition: Node.h:66
Serializer::Reader * rd
Definition: Node.h:68
std::vector< std::pair< std::string, RefCountedPtr< Graphics::Material > > > * materials
Definition: Node.h:71
Serializer::Writer * wr
Definition: Node.h:67
Model * model
Definition: Node.h:70
BaseLoader * loader
Definition: Node.h:72
Definition: Node.h:47
RenderData()
Definition: Node.h:55
unsigned int nodemask
Definition: Node.h:53
Color customColor
Definition: Node.h:50
float boundingRadius
Definition: Node.h:52
float linthrust[3]
Definition: Node.h:48
float angthrust[3]
Definition: Node.h:49