OGL Engine 1.2.0-dev
Loading...
Searching...
No Matches
scene.hpp
Go to the documentation of this file.
1
5#pragma once
6
7#include <queue>
8
9#include "../defs.hpp"
10#include "../ecs/registry.hpp"
11#include "../ecs/entity.hpp"
12
13#include "camera.hpp"
14#include "../core/event.hpp"
15
16// Forward declaration
17namespace Engine { class App; }
18
19namespace Engine::Scene {
32
36 class Scene {
37 friend class App;
38
39 private:
41 App* mApp;
43 ICamera* mCamera;
44
46 ECS::Registry mRegistry;
48 Core::EventDispatcher mEventDispatcher;
49
50 public:
55 Scene();
56 ~Scene() = default;
57
75 App& GetApp();
76
77 // Event management
84 template<typename EventType>
86 mEventDispatcher.Subscribe<EventType>(callback);
87 }
88
95 template<typename EventType>
96 void EmitEvent(EventType* event) {
97 mEventDispatcher.Emit<EventType>(event);
98 }
99
100 // Entity management
107
114 template<typename... Components>
117 (e.AddComponent<Components>(), ...); // C++17 fold expression
118 return e;
119 }
120
125 void DestroyEntity(EntityID entityID);
126
130 virtual void OnEnter() {}
131
135 virtual void OnExit() {}
136
137 // Méthodes de cycle de vie, appelées par l'application pour bypass l'ECS si besoin
138 virtual void OnInit() {}
139 virtual void OnFixedUpdate(float deltaTime) {}
140 virtual void OnUpdate(float deltaTime) {}
141 virtual void OnRender(float alpha = 0.0f) {}
142 virtual void OnUIRender() {}
143 virtual void OnLateUpdate(float deltaTime) {}
144 };
145}
Point d'entrée d'une application. Gère les différents systèmes associés au moteur de jeu.
Definition app.hpp:40
EventDispatcher enregistre des listeners, émet des évènements, et appelle des callbacks.
Definition event.hpp:27
std::function< void(EventType &)> EventCallback
Spécifie un nom pour les fonctions de callbacks typés (par event)
Definition event.hpp:40
Une entité est l'élément "atomique" utilisé dans l'architecture ECS pour référencer les composants.
Definition entity.hpp:19
T & AddComponent(Args &&... args)
Ajoute un component de type T au registre, référencé sous l'entityID de cette entité
Definition entity.hpp:95
Classe Registre qui stocke des composants et gère l'attribution des IDs d'entités.
Definition registry.hpp:32
Definition camera.hpp:7
virtual void OnExit()
Callback appelé lorsqu'une autre scène prend la place de scène courante.
Definition scene.hpp:135
App & GetApp()
Renvoie une référence à l'Application courante.
Definition scene.cpp:16
ECS::Registry * GetRegistry()
Renvoie le registre ECS de la scène.
Definition scene.cpp:14
void EmitEvent(EventType *event)
Emet un évènement dans le contexte de la scène.
Definition scene.hpp:96
virtual void OnUIRender()
Definition scene.hpp:142
virtual void OnRender(float alpha=0.0f)
Definition scene.hpp:141
virtual void OnEnter()
Callback appelé au lorsque cette scène est chargée comme scène courante.
Definition scene.hpp:130
ECS::Entity CreateEntity(PrimitiveType type=PrimitiveType::Empty)
Créé une nouvelle entité dans le registre de la scène courante.
Definition scene.cpp:18
void DestroyEntity(EntityID entityID)
Détruit une entité donnée.
Definition scene.cpp:48
ECS::Entity CreateEntityWith()
Créé une entité en lui ajoutant au passage une liste de components.
Definition scene.hpp:115
ICamera * GetCamera()
Renvoie la caméra principale de la scène.
Definition scene.cpp:15
friend class App
Definition scene.hpp:37
virtual void OnUpdate(float deltaTime)
Definition scene.hpp:140
Scene()
Construit une nouvelle scène.
Definition scene.cpp:10
virtual void OnLateUpdate(float deltaTime)
Definition scene.hpp:143
virtual void OnInit()
Definition scene.hpp:138
virtual void OnFixedUpdate(float deltaTime)
Definition scene.hpp:139
void AddEventListener(Core::EventDispatcher::EventCallback< EventType > callback)
Permet d'ajouter un listener aux évènements de la scène.
Definition scene.hpp:85
Définit des types de données utilisés dans le moteur.
Décrit le fonctionnement de l'entité dans une architecture ECS.
Fichier qui recense les structures et classes de données nécessaires à la gestion d'évènements Permet...
Definition registry.hpp:23
PrimitiveType
Les PrimitiveType sont des types d'entités préfabriquées.
Definition scene.hpp:26
@ Sprite
Definition scene.hpp:29
@ Text
Definition scene.hpp:30
@ Empty
Definition scene.hpp:27
@ Quad
Definition scene.hpp:28
Definition app.cpp:14
std::uint32_t EntityID
Définition de type pour mieux identifier les EntityID.
Definition defs.hpp:13
Définit le rôle du Registre dans l'architecture ECS.