#pragma once #include "Camera.hpp" #include "EditorCore.hpp" #include "Player.hpp" #include "PodVector.hpp" #include "Renderer.hpp" #include "World.hpp" #define GLFW_INCLUDE_NONE #include #include #include #include #include using KeyCaptureCallback = std::function; class App { private: std::deque mKeyCaptureCallbacks; PodVector mPlayers; std::unique_ptr mEditor; GameWorld mWorld; Camera mGameCamera; Camera mEditorCamera; Renderer mRenderer; // NOTE: should only be true when mEditor != nullptr bool mEditorVisible = false; bool mGameRunning = false; public: App(); ~App(); EditorInstance* GetEditor() { return mEditor.get(); } GameWorld* GetWorld() { return &mWorld; } bool IsGameRunning() const; void SetGameRunning(bool running); bool IsEditorVisible() const; void SetEditorVisible(bool visible); // Do ImGui calls void Show(); // Do regular calls void Update(); void Draw(float currentTime, float deltaTime); void HandleMouse(int button, int action); void HandleMouseMotion(double xOff, double yOff); void HandleKey(GLFWkeyboard* keyboard, int key, int action); void PushKeyCaptureCallback(KeyCaptureCallback callback); };