Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
Engine.h
Go to the documentation of this file.
1
6
7#pragma once
8#ifndef ECS__ECS_ENGINE_H__
9#define ECS__ECS_ENGINE_H__
10
11#include "API.h"
12
13#include "Event/EventHandler.h"
14#include "Event/EventDelegate.h"
15
16namespace ECS
17{
18 namespace util
19 {
20 class Timer;
21 }
22
23 namespace Event
24 {
25 class IEvent;
26 class IEventListener;
27 class EventHandler;
28 }
29
30 class EntityManager;
31 class SystemManager;
32 class ComponentManager;
33 struct Data;
34
35
37 {
38 friend class IEntity;
39 friend class IComponent;
40 friend class ISystem;
41
42 friend class Event::IEvent;
43
45
46 friend class EntityManager;
47
48 private:
49
51
53
55
57
59
60
61 ECSEngine(const ECSEngine&) = delete;
63
64 // Add event callback
65 template<class E>
66 inline void SubscribeEvent(Event::Internal::IEventDelegate* const eventDelegate)
67 {
68 ECS_EventHandler->AddEventCallback<E>(eventDelegate);
69 }
70
71 // Remove event callback
72 void UnsubscribeEvent(Event::Internal::IEventDelegate* eventDelegate);
73
74 public:
75
76 ECSEngine();
77
78 ~ECSEngine();
79
80
81 inline EntityManager* GetEntityManager() const { return ECS_EntityManager; }
82
83 inline ComponentManager* GetComponentManager() { return ECS_ComponentManager; }
84 inline ComponentManager* GetComponentManager() const { return ECS_ComponentManager; }
85
86 inline SystemManager* GetSystemManager() { return ECS_SystemManager; }
87 inline SystemManager* GetSystemManager() const { return ECS_SystemManager; }
88
104
105 template<class E, class... ARGS>
106 void SendEvent(ARGS&&... eventArgs) const
107 {
108 ECS_EventHandler->Send<E>(this, FWD(eventArgs)...);
109 }
110
111 template<class E, class... ARGS>
112 void SendEventAndDispatch(ARGS&&... eventArgs) const
113 {
114 ECS_EventHandler->SendAndDispatchEvent<E>(this, FWD(eventArgs)...);
115 }
128 void PreUpdate(f32 tick_ms);
129 void Update(f32 tick_ms);
130 void PostUpdate(f32 tick_ms);
131 void OnFrameStart();
132 void OnFrameEnd();
133 };
134
135} // namespace ECS
136
137#endif // ECS__ECS_ENGINE_H__
#define ECS_API
Definition: Platform.h:16
#define FWD(...)
EntityManager * ECS_EntityManager
Definition: Engine.h:52
ECSEngine & operator=(ECSEngine &)=delete
ComponentManager * GetComponentManager()
Definition: Engine.h:83
Event::EventHandler * ECS_EventHandler
Definition: Engine.h:58
ComponentManager * ECS_ComponentManager
Definition: Engine.h:54
void SendEventAndDispatch(ARGS &&... eventArgs) const
Definition: Engine.h:112
SystemManager * GetSystemManager()
Definition: Engine.h:86
ComponentManager * GetComponentManager() const
Definition: Engine.h:84
ECSEngine(const ECSEngine &)=delete
util::Timer * ECS_EngineTime
Definition: Engine.h:50
void SubscribeEvent(Event::Internal::IEventDelegate *const eventDelegate)
Definition: Engine.h:66
void SendEvent(ARGS &&... eventArgs) const
Definition: Engine.h:106
SystemManager * ECS_SystemManager
Definition: Engine.h:56
EntityManager * GetEntityManager() const
Definition: Engine.h:81
SystemManager * GetSystemManager() const
Definition: Engine.h:87
void SendAndDispatchEvent(ECSEngine *engine, ARGS &&... eventArgs)
Definition: EventHandler.h:127
void AddEventCallback(Internal::IEventDelegate *const eventDelegate)
Definition: EventHandler.h:53
void Send(ECSEngine *engine, ARGS &&... eventArgs)
Definition: EventHandler.h:104
float_t f32
Definition: Platform.h:59