GA::kit v0.3
G&A's in-house C++ application framework
Loading...
Searching...
No Matches
scene.h
Go to the documentation of this file.
1#pragma once
2#include "ga/defines.h"
3#include "ga/events.h"
4#include "ga/graph/node.h"
5#include "ga/signal.h"
6#include "ga/timeout.h"
7#include <algorithm>
8#include <map>
9#include <memory>
10#include <vector>
11
12namespace ga {
13
19class Scene : public std::enable_shared_from_this<Scene>
20{
21public:
22 // Static Scene factory
23 // in place of public constructor
24 template <CLASS_INHERITS( SceneT, ga::Scene )>
25 static std::shared_ptr<SceneT> create();
26 static std::shared_ptr<Scene> create() { return Scene::create<Scene>(); }
27
28 virtual ~Scene();
29
30 virtual void setup();
31 virtual void update();
32 virtual void draw();
33
34 template <CLASS_INHERITS( NodeT, ga::Node )>
35 std::shared_ptr<NodeT> addNode( std::shared_ptr<NodeT> child = nullptr );
36 std::shared_ptr<ga::Node> addNode();
37
38 bool removeNode( std::shared_ptr<Node> node );
39 void clearNodes();
40
41 bool hasNode( std::shared_ptr<Node> node );
42
43 std::shared_ptr<Node> getRootNode();
44 std::vector<std::shared_ptr<Node>> getNodes();
45 void forEachNode( std::function<void( std::shared_ptr<Node> )> fn );
46
47 void setName( const std::string& name );
48 const std::string& getName();
49
50 virtual void handleMouseEvent( MouseEvent& mouseEvent );
51 virtual void handleTouchEvent( TouchEvent& touchEvent );
52 virtual void handleKeyEvent( KeyEvent& keyEvent );
53
54 // signals
58
59protected:
60 Scene();
61
62 void updateNodes(); // update root node and all children
63 void drawNodes(); // draw root node and all children
64
65 friend void Node::setScene( std::shared_ptr<Scene> scene );
66 //void addToHierarchy( std::shared_ptr<Node> node );
67 //void removeFromHierarchy( std::shared_ptr<Node> node );
68
69 friend void Node::drawTree();
70 size_t nextDrawIndex( std::shared_ptr<Node> node );
71
72 friend size_t Node::getSceneDrawIndex() const;
74
75 std::string m_name;
76 std::shared_ptr<Node> m_rootNode;
78
79 std::vector<std::weak_ptr<Node>> m_drawnNodes; // sorted by draw order
80};
81
82// template implementations
83// ------------------------
84
85template <class SceneT, typename>
86std::shared_ptr<SceneT> Scene::create()
87{
88 auto scene = std::shared_ptr<SceneT>( new SceneT() );
89 scene->setup();
90 return scene;
91}
92
93template <class NodeT, typename>
94std::shared_ptr<NodeT> Scene::addNode( std::shared_ptr<NodeT> node )
95{
96 return m_rootNode->addChild( node );
97}
98} // namespace ga
void drawTree()
Definition: node.cpp:219
void setScene(std::shared_ptr< Scene > scene)
Definition: node.cpp:265
size_t getSceneDrawIndex() const
Definition: node.cpp:103
Scene is a view controller.
Definition: scene.h:20
virtual void update()
Definition: scene.cpp:21
Signal< KeyEvent & > onKeyEvent
Definition: scene.h:55
Signal< MouseEvent & > onMouseEvent
Definition: scene.h:56
bool hasNode(std::shared_ptr< Node > node)
Definition: scene.cpp:47
ga::TimeoutManager m_timeoutManager
Definition: scene.h:77
void clearNodes()
Definition: scene.cpp:42
virtual void draw()
Definition: scene.cpp:27
void updateNodes()
Definition: scene.cpp:99
size_t nextDrawIndex(std::shared_ptr< Node > node)
Definition: scene.cpp:112
bool removeNode(std::shared_ptr< Node > node)
Definition: scene.cpp:37
void setName(const std::string &name)
Definition: scene.cpp:69
std::shared_ptr< ga::Node > addNode()
Definition: scene.cpp:32
virtual void handleMouseEvent(MouseEvent &mouseEvent)
Definition: scene.cpp:79
Scene()
Definition: scene.cpp:5
std::string m_name
Definition: scene.h:75
Signal< TouchEvent & > onTouchEvent
Definition: scene.h:57
void drawNodes()
Definition: scene.cpp:105
std::shared_ptr< Node > m_rootNode
Definition: scene.h:76
virtual void handleTouchEvent(TouchEvent &touchEvent)
Definition: scene.cpp:85
static std::shared_ptr< Scene > create()
Definition: scene.h:26
std::vector< std::weak_ptr< Node > > m_drawnNodes
Definition: scene.h:79
void forEachNode(std::function< void(std::shared_ptr< Node >)> fn)
Definition: scene.cpp:62
virtual ~Scene()
Definition: scene.cpp:10
std::shared_ptr< NodeT > addNode(std::shared_ptr< NodeT > child=nullptr)
std::vector< std::shared_ptr< Node > > getNodes()
Definition: scene.cpp:57
std::shared_ptr< Node > getRootNode()
Definition: scene.cpp:52
virtual void setup()
Definition: scene.cpp:15
void forceAssignDrawIndices()
Definition: scene.cpp:120
static std::shared_ptr< SceneT > create()
const std::string & getName()
Definition: scene.cpp:74
virtual void handleKeyEvent(KeyEvent &keyEvent)
Definition: scene.cpp:91
Definition: timeout.h:38
Definition: sigslot.hpp:1134
Definition: color.h:9
Definition: events.h:20
Definition: events.h:31
Definition: events.h:47