GameKit  0.0.1a
C++ gamedev tools
Scene.cpp
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: Scene.cpp
5  *
6  * Description:
7  *
8  * Created: 17/01/2018 19:34:08
9  *
10  * Author: Quentin Bazin, <quent42340@gmail.com>
11  *
12  * =====================================================================================
13  */
15 #include "gk/scene/Scene.hpp"
16 
17 namespace gk {
18 
20  setCollisionHelper<CollisionHelper>();
21 }
22 
23 void Scene::reset() {
24  for (auto &controller : m_controllerList)
25  if (controller->isGlobal())
26  controller->reset(m_objects);
27 
28  for (SceneObject &object : m_objects) {
29  reset(object);
30  }
31 }
32 
33 void Scene::update() {
34  for (auto &controller : m_controllerList)
35  if (controller->isGlobal())
36  controller->update(m_objects);
37 
38  for (SceneObject &object : m_objects) {
39  update(object);
40  }
41 }
42 
43 void Scene::reset(SceneObject &object) {
44  for (auto &controller : m_controllerList) {
45  if (!controller->isGlobal()) {
46  controller->reset(object);
47 
48  if (object.has<SceneObjectList>())
49  controller->reset(object.get<SceneObjectList>());
50  }
51  }
52 }
53 
54 void Scene::update(SceneObject &object) {
55  for (auto &controller : m_controllerList) {
56  if (!controller->isGlobal()) {
57  controller->update(object);
58 
59  if (object.has<SceneObjectList>())
60  controller->update(object.get<SceneObjectList>());
61  }
62  }
63 }
64 
65 void Scene::draw(const SceneObject &object, RenderTarget &target, RenderStates states) const {
66  for (auto &view : m_viewList) {
67  view->draw(object, target, states);
68 
69  if (object.has<SceneObjectList>())
70  view->draw(object.get<SceneObjectList>(), target, states);
71  }
72 }
73 
74 void Scene::draw(gk::RenderTarget &target, gk::RenderStates states) const {
75  for (auto &view : m_viewList)
76  view->draw(m_objects, target, states);
77 }
78 
80  SceneObject &obj = m_objects.addObject(std::move(object));
81 
82  if(obj.has<CollisionComponent>()) {
83  obj.get<CollisionComponent>().addChecker([&](SceneObject &object) {
84  checkCollisionsFor(object);
85  });
86  }
87 
88  return obj;
89 }
90 
91 void Scene::addCollisionChecker(std::function<void(SceneObject &)> checker) {
92  for (SceneObject &object : m_objects) {
93  if (object.has<CollisionComponent>()) {
94  object.get<CollisionComponent>().addChecker(checker);
95  }
96  }
97 }
98 
100  for(SceneObject &object2 : m_objects) {
101  if(&object != &object2) {
102  m_collisionHelper->checkCollision(object, object2);
103 
104  if (object.has<SceneObjectList>())
105  for (SceneObject &child : object.get<SceneObjectList>())
106  m_collisionHelper->checkCollision(child, object2);
107 
108  if (object2.has<SceneObjectList>())
109  for (SceneObject &child : object2.get<SceneObjectList>())
110  m_collisionHelper->checkCollision(object, child);
111  }
112  }
113 }
114 
115 } // namespace gk
116 
Scene()
Definition: Scene.cpp:19
std::list< std::unique_ptr< AbstractController > > m_controllerList
Definition: Scene.hpp:74
T & get() const
Definition: SceneObject.hpp:42
std::list< std::unique_ptr< AbstractView > > m_viewList
Definition: Scene.hpp:75
void addCollisionChecker(std::function< void(SceneObject &)> checker)
Definition: Scene.cpp:91
bool has() const
Definition: SceneObject.hpp:37
SceneObject & addObject(SceneObject &&object)
SceneObjectList m_objects
Definition: Scene.hpp:72
void checkCollisionsFor(SceneObject &object)
Definition: Scene.cpp:99
void update()
Definition: Scene.cpp:33
void reset()
Definition: Scene.cpp:23
std::unique_ptr< CollisionHelper > m_collisionHelper
Definition: Scene.hpp:77
SceneObject & addObject(SceneObject &&object)
Definition: Scene.cpp:79
void draw(const SceneObject &object, RenderTarget &target, RenderStates states) const
Definition: Scene.cpp:65