44 std::unordered_map<std::type_index, ECS::System*> mSystems;
46 std::unordered_map<std::string, std::function<
Scene::Scene*()>> mSceneFactories;
48 std::optional<std::string> mSceneToLoad;
52 void _LoadScene(
const std::string& name);
58 bool mInitialized =
false;
92 glm::vec4
clearColor = glm::vec4(0.1f, 0.2f, 0.3f, 1.0f);
181 void SetSize(
int width,
int height,
bool adjustCamera =
true);
200 mSceneFactories[name] = [
this]() {
218 template<
typename T,
typename... Args>
220 std::type_index ti(
typeid(T));
221 if(mSystems.find(ti) != mSystems.end())
throw std::runtime_error(
"App::RegisterSystem: Can not register an already registered system");
222 mSystems[ti] =
new T(args...);
223 mSystems[ti]->mApp =
this;
224 if(mCurrentScene) mSystems[ti]->mRegistry = mCurrentScene->GetRegistry();
226 return static_cast<T&
>(*mSystems[ti]);
237 std::type_index ti(
typeid(T));
238 return mSystems.find(ti) != mSystems.end();
249 std::type_index ti(
typeid(T));
250 if(mSystems.find(ti) == mSystems.end())
throw std::runtime_error(
"App::GetSystem: Can not get an unregistered system");
252 return static_cast<T&
>(*mSystems[ti]);
262 std::type_index ti(
typeid(T));
263 if(mSystems.find(ti) == mSystems.end())
throw std::runtime_error(
"App::UnregisterSystem: Can not unregister an already unregistered system");
Wrapper statique autour de l'api OpenAL pour charger, et lire des sons.
bool HasSystem()
vérifie si le système de type T est enregistré
Definition app.hpp:236
int GetWidth()
Renvoie la largeur interne de l'application.
Definition app.cpp:67
Utils::StateStore store
Store global de l'application.
Definition app.hpp:101
Render::RenderTarget * GetRenderTarget()
Renvoie un pointeur vers la renderTarget utilisée pour le screenRenderer.
Definition app.cpp:89
T & GetSystem()
Renvoie le système de type T.
Definition app.hpp:248
Core::Window * GetWindow()
Renvoie le wrapper du contexte openGL.
Definition app.cpp:88
App(int width=800, int height=600, AppSettings settings={"App"})
Créé une nouvelle application.
Definition app.cpp:50
void LoadScene(const std::string &name)
Charge la scène demandée.
Definition app.cpp:135
void UnregisterSystem()
Supprime le système de type T de l'application.
Definition app.hpp:261
Scene::Scene * GetCurrentScene()
Renvoie un pointeur vers la scène actuellement chargée.
Definition app.cpp:90
void SetSize(int width, int height, bool adjustCamera=true)
Définit la taille logique interne de l'application.
Definition app.cpp:69
void RegisterScene(const std::string &name)
Enregistre une scène de type T sous un nom donné
Definition app.hpp:199
int GetHeight()
Renvoie la hauteur interne de l'application.
Definition app.cpp:68
struct Engine::App::AppSettings settings
void Quit()
Demande la fermeture du contexte opengl (et par exetnsion met un terme à la boucle Run)
Definition app.cpp:255
void Run()
Lance la boucle principale de l'application.
Definition app.cpp:139
T & RegisterSystem(Args &&... args)
Enregistre un système de type T dans l'application.
Definition app.hpp:219
glm::vec2 GetProjectedMousePosition()
Permet d'obtenir la position de la osuris projetée dans la scène actuelle.
Definition app.cpp:110
float GetFPS()
Renvoie le nombre d'images comptées depuis la dernière seconde écoulée.
Definition app.cpp:86
glm::vec2 GetMousePosition()
Permet d'obtenir la position de la souris dans le cadre de l'application en prenant en compte les dif...
Definition app.cpp:92
Scene::ICamera * GetCurrentCamera()
Renvoie un pointeur vers la caméra de la scène actuelle.
Definition app.cpp:91
Wrapper pour le contexte openGL, ainsi que la statemachine openGL dans une certaine mesure.
Definition window.hpp:15
La classe RenderTarget encapsule la gestion d'un framebuffer de taille custom pour le rendu de scène ...
Definition rendertarget.hpp:15
La classe ScreenRenderer permet de dessiner une RenderTarget dans le contexte OpenGL courant.
Definition screenrenderer.hpp:18
Classe qui encapsule un registre de composants ECS, et des fonctions de lifcecycle.
Definition scene.hpp:36
Definition statestore.hpp:12
Définit des constantes utilisables un peu partout dans le code du moteur.
Décrit le fonctionnement de l'entité dans une architecture ECS.
Définit le rôle du Registre dans l'architecture ECS.
Implémentation d'un wrapper autour d'un framebuffer custom pour dessiner une scène.
Implémente une notion de "Scène" dans le moteur de jeu.
Implémente un système de state/store typé dynamiquement.
Structure de données qui contient des paramètres d'application.
Definition app.hpp:80
int fpsLimit
Limite du nombre d'images par seconde de la boucle principale Ce paramètre n'influence pas la boucle ...
Definition app.hpp:97
int windowHeight
hauteur de la fenêtre OpenGL générée (peut différer de la taille logique interne de l'app)
Definition app.hpp:86
std::string title
Le titre de l'application en cours.
Definition app.hpp:82
int windowWidth
largeur de la fenêtre OpenGL générée (peut différer de la taille logique interne de l'app)
Definition app.hpp:84
float resolutionScaling
Multiplie la résolution du renderTarget interne avant de l'envoyer à l'écran (> 1 = upscale,...
Definition app.hpp:90
bool stretchFit
Décide si le rendu du renderTarget interne doit s'étirer à la fenêtre ou maintenir l'aspect-ratio.
Definition app.hpp:88
glm::vec4 clearColor
La couleur affichée à chaque nettoyage d'écran (avant le dessin de la frame)
Definition app.hpp:92
Définit la manière dont le Système se comporte dans l'architecture ECS.
Fenêtre/Contexte OpenGL nécessaire pour le rendu 2D/3D et la gestion des inputs pour application de b...