GameKit  0.0.1a
C++ gamedev tools
Scene.hpp
Go to the documentation of this file.
1 /*
2  * =====================================================================================
3  *
4  * Filename: Scene.hpp
5  *
6  * Description:
7  *
8  * Created: 17/01/2018 19:34:20
9  *
10  * Author: Quentin Bazin, <quent42340@gmail.com>
11  *
12  * =====================================================================================
13  */
14 #ifndef GK_SCENE_HPP_
15 #define GK_SCENE_HPP_
16 
17 #include <functional>
18 #include <list>
19 
20 #include "gk/gl/IDrawable.hpp"
24 #include "gk/scene/SceneObject.hpp"
26 
27 namespace gk {
28 
29 class Scene : public IDrawable {
30  public:
31  Scene();
32 
33  void reset();
34  void update();
35 
36  void reset(SceneObject &object);
37  void update(SceneObject &object);
38 
40 
41  void addCollisionChecker(std::function<void(SceneObject &)> checker);
42  void checkCollisionsFor(SceneObject &object);
43 
45  const SceneObjectList &objects() const { return m_objects; }
46 
47  template<typename T, typename... Args>
48  auto addController(Args &&...args) -> typename std::enable_if<std::is_base_of<AbstractController, T>::value, T&>::type {
49  m_controllerList.emplace_back(new T(std::forward<Args>(args)...));
50  return *static_cast<T*>(m_controllerList.back().get());
51  }
52 
53  template<typename T, typename... Args>
54  auto addView(Args &&...args) -> typename std::enable_if<std::is_base_of<AbstractView, T>::value, T&>::type {
55  m_viewList.emplace_back(new T(std::forward<Args>(args)...));
56  return *static_cast<T*>(m_viewList.back().get());
57  }
58 
59  template<typename T, typename... Args>
60  auto setCollisionHelper(Args &&...args) -> typename std::enable_if<std::is_base_of<CollisionHelper, T>::value, T&>::type {
61  m_collisionHelper.reset(new T(std::forward<Args>(args)...));
62  return *static_cast<T*>(m_collisionHelper.get());
63  }
64 
65  bool isActive() { return !m_controllerList.empty() || !m_viewList.empty(); }
66 
67  void draw(const SceneObject &object, RenderTarget &target, RenderStates states) const;
68 
69  private:
70  void draw(RenderTarget &target, RenderStates states) const override;
71 
73 
74  std::list<std::unique_ptr<AbstractController>> m_controllerList;
75  std::list<std::unique_ptr<AbstractView>> m_viewList;
76 
77  std::unique_ptr<CollisionHelper> m_collisionHelper;
78 };
79 
80 } // namespace gk
81 
82 #endif // GK_SCENE_HPP_
Scene()
Definition: Scene.cpp:19
const SceneObjectList & objects() const
Definition: Scene.hpp:45
std::list< std::unique_ptr< AbstractController > > m_controllerList
Definition: Scene.hpp:74
auto addController(Args &&...args) -> typename std::enable_if< std::is_base_of< AbstractController, T >::value, T &>::type
Definition: Scene.hpp:48
auto addView(Args &&...args) -> typename std::enable_if< std::is_base_of< AbstractView, T >::value, T &>::type
Definition: Scene.hpp:54
auto setCollisionHelper(Args &&...args) -> typename std::enable_if< std::is_base_of< CollisionHelper, T >::value, T &>::type
Definition: Scene.hpp:60
std::list< std::unique_ptr< AbstractView > > m_viewList
Definition: Scene.hpp:75
void addCollisionChecker(std::function< void(SceneObject &)> checker)
Definition: Scene.cpp:91
bool isActive()
Definition: Scene.hpp:65
SceneObjectList m_objects
Definition: Scene.hpp:72
Abstract base class for objects that can be drawn to a render target.
Definition: IDrawable.hpp:25
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
SceneObjectList & objects()
Definition: Scene.hpp:44