Sparkle 0.0.1
Loading...
Searching...
No Matches
spk_game_engine.hpp
1#pragma once
2
3#include <mutex>
4#include <set>
5#include <vector>
6
7#include "structure/engine/spk_entity.hpp"
8
9#include "structure/system/event/spk_keyboard_event.hpp"
10#include "structure/system/event/spk_mouse_event.hpp"
11#include "structure/system/event/spk_paint_event.hpp"
12#include "structure/system/event/spk_system_event.hpp"
13#include "structure/system/event/spk_update_event.hpp"
14
15namespace spk
16{
22 {
23 private:
27 class ComponentListUpdateDispatcher : public spk::Component
28 {
29 public:
31 ComponentListUpdateDispatcher();
32
33 protected:
38 void _onUpdateEvent(spk::UpdateEvent &p_event) override;
39 };
40
41 Entity _rootObject = spk::Entity(L"/root");
42
43 public:
45 GameEngine();
46
48 void clear();
49
59 void addEntity(Entity *p_entity);
64 void removeEntity(Entity *p_entity);
65
71 Entity *getEntity(const std::wstring &p_name);
77 const Entity *getEntity(const std::wstring &p_name) const;
83 std::vector<Entity *> getEntities(const std::wstring &p_name);
89 std::vector<const Entity *> getEntities(const std::wstring &p_name) const;
90
96 Entity *getEntityByTag(const std::wstring &p_name);
102 const Entity *getEntityByTag(const std::wstring &p_name) const;
108 std::vector<Entity *> getEntitiesByTag(const std::wstring &p_name);
114 std::vector<const Entity *> getEntitiesByTag(const std::wstring &p_name) const;
115
121 bool contains(const std::wstring &p_name) const;
122
128 size_t count(const std::wstring &p_name) const;
129
134 virtual void handleGeometryChange(const spk::Extend2D &p_geometry) final;
139 virtual void handlePaintEvent(spk::PaintEvent &p_event) final;
144 virtual void handleKeyPressEvent(spk::KeyPressEvent &p_event) final;
149 virtual void handleKeyReleaseEvent(spk::KeyReleaseEvent &p_event) final;
154 virtual void handleGlyphEvent(spk::GlyphEvent &p_event) final;
159 virtual void handleMousePressEvent(spk::MousePressEvent &p_event) final;
164 virtual void handleMouseReleaseEvent(spk::MouseReleaseEvent &p_event) final;
169 virtual void handleMouseDoubleClickEvent(spk::MouseDoubleClickEvent &p_event) final;
174 virtual void handleMouseMotionEvent(spk::MouseMotionEvent &p_event) final;
179 virtual void handleMouseWheelEvent(spk::MouseWheelEvent &p_event) final;
184 virtual void handleEnterResizeModeEvent(spk::EnterResizeModeEvent &p_event) final;
189 virtual void handleResizeEvent(spk::ResizeEvent &p_event) final;
194 virtual void handleExitResizeModeEvent(spk::ExitResizeModeEvent &p_event) final;
199 virtual void handleQuitEvent(spk::QuitEvent &p_event) final;
204 virtual void handleMoveEvent(spk::MoveEvent &p_event) final;
209 virtual void handleFullScreenModeEvent(spk::FullScreenModeEvent &p_event) final;
214 virtual void handleMaximizedModeEvent(spk::MaximizedModeEvent &p_event) final;
219 virtual void handleFocusEvent(spk::FocusEvent &p_event) final;
224 virtual void handleUpdateEvent(spk::UpdateEvent &p_event) final;
225
226 private:
227 friend class Entity;
228 };
229}
Base class for engine components attached to entities.
Definition spk_component.hpp:23
Hierarchical game object containing components and children.
Definition spk_entity.hpp:34
std::vector< Entity * > getEntities(const std::wstring &p_name)
Returns all entities matching the name.
Definition spk_game_engine.cpp:52
virtual void handleMousePressEvent(spk::MousePressEvent &p_event) final
Dispatches mouse press events to entities.
Definition spk_game_engine.cpp:112
virtual void handleKeyReleaseEvent(spk::KeyReleaseEvent &p_event) final
Dispatches key release events to entities.
Definition spk_game_engine.cpp:104
std::vector< Entity * > getEntitiesByTag(const std::wstring &p_name)
Returns all entities matching a tag.
Definition spk_game_engine.cpp:72
virtual void handleGeometryChange(const spk::Extend2D &p_geometry) final
Dispatches geometry change events to entities.
Definition spk_game_engine.cpp:92
virtual void handleMouseDoubleClickEvent(spk::MouseDoubleClickEvent &p_event) final
Dispatches mouse double click events to entities.
Definition spk_game_engine.cpp:120
virtual void handleKeyPressEvent(spk::KeyPressEvent &p_event) final
Dispatches key press events to entities.
Definition spk_game_engine.cpp:100
void removeEntity(Entity *p_entity)
Removes an entity from the engine.
Definition spk_game_engine.cpp:37
virtual void handleFocusEvent(spk::FocusEvent &p_event) final
Dispatches focus events to entities.
Definition spk_game_engine.cpp:160
void addEntity(Entity *p_entity)
Adds an entity to the engine.
Definition spk_game_engine.cpp:32
virtual void handleMaximizedModeEvent(spk::MaximizedModeEvent &p_event) final
Dispatches maximized events to entities.
Definition spk_game_engine.cpp:156
virtual void handleMouseWheelEvent(spk::MouseWheelEvent &p_event) final
Dispatches mouse wheel events to entities.
Definition spk_game_engine.cpp:128
virtual void handleMouseMotionEvent(spk::MouseMotionEvent &p_event) final
Dispatches mouse motion events to entities.
Definition spk_game_engine.cpp:124
size_t count(const std::wstring &p_name) const
Counts entities matching the name.
Definition spk_game_engine.cpp:87
virtual void handlePaintEvent(spk::PaintEvent &p_event) final
Dispatches paint events to entities.
Definition spk_game_engine.cpp:96
virtual void handleGlyphEvent(spk::GlyphEvent &p_event) final
Dispatches glyph input events to entities.
Definition spk_game_engine.cpp:108
virtual void handleFullScreenModeEvent(spk::FullScreenModeEvent &p_event) final
Dispatches fullscreen events to entities.
Definition spk_game_engine.cpp:152
Entity * getEntity(const std::wstring &p_name)
Returns the first entity matching the name.
Definition spk_game_engine.cpp:42
GameEngine()
Creates a new game engine.
Definition spk_game_engine.cpp:15
spk::Entity & rootObject()
Returns the root entity.
Definition spk_game_engine.cpp:27
bool contains(const std::wstring &p_name) const
Checks if an entity with the name exists.
Definition spk_game_engine.cpp:82
virtual void handleQuitEvent(spk::QuitEvent &p_event) final
Dispatches quit events to entities.
Definition spk_game_engine.cpp:144
virtual void handleMoveEvent(spk::MoveEvent &p_event) final
Dispatches move events to entities.
Definition spk_game_engine.cpp:148
virtual void handleEnterResizeModeEvent(spk::EnterResizeModeEvent &p_event) final
Dispatches enter resize mode events to entities.
Definition spk_game_engine.cpp:132
virtual void handleResizeEvent(spk::ResizeEvent &p_event) final
Dispatches resize events to entities.
Definition spk_game_engine.cpp:136
virtual void handleExitResizeModeEvent(spk::ExitResizeModeEvent &p_event) final
Dispatches exit resize mode events to entities.
Definition spk_game_engine.cpp:140
void clear()
Clears all entities from the engine.
Definition spk_game_engine.cpp:22
Entity * getEntityByTag(const std::wstring &p_name)
Returns the first entity matching a tag.
Definition spk_game_engine.cpp:62
virtual void handleMouseReleaseEvent(spk::MouseReleaseEvent &p_event) final
Dispatches mouse release events to entities.
Definition spk_game_engine.cpp:116
virtual void handleUpdateEvent(spk::UpdateEvent &p_event) final
Dispatches update events to entities.
Definition spk_game_engine.cpp:164
Signals the window enters resize mode.
Definition spk_system_event.hpp:16
Signals the window exits resize mode.
Definition spk_system_event.hpp:34
Axis-aligned rectangle defined by an anchor point and size.
Definition spk_extend_2d.hpp:24
Reports focus gain or loss.
Definition spk_system_event.hpp:80
Requests or reports fullscreen state.
Definition spk_system_event.hpp:60
Character input event.
Definition spk_keyboard_event.hpp:38
Keyboard key press event.
Definition spk_keyboard_event.hpp:14
Keyboard key release event.
Definition spk_keyboard_event.hpp:26
Requests or reports maximized state.
Definition spk_system_event.hpp:70
Mouse button double-click event.
Definition spk_mouse_event.hpp:38
Mouse move event carrying current position.
Definition spk_mouse_event.hpp:50
Mouse button press event.
Definition spk_mouse_event.hpp:14
Mouse button release event.
Definition spk_mouse_event.hpp:26
Mouse wheel scroll event.
Definition spk_mouse_event.hpp:62
Reports a window move event.
Definition spk_system_event.hpp:50
Event emitted when a drawable region needs repainting.
Definition spk_paint_event.hpp:19
Signals application quit.
Definition spk_system_event.hpp:42
Reports a window/client-area resize.
Definition spk_system_event.hpp:24
Carries per-frame update timing and input state snapshot.
Definition spk_update_event.hpp:15