aboutsummaryrefslogtreecommitdiff
path: root/source/30-game/App.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/30-game/App.hpp')
-rw-r--r--source/30-game/App.hpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/source/30-game/App.hpp b/source/30-game/App.hpp
new file mode 100644
index 0000000..c73c5a1
--- /dev/null
+++ b/source/30-game/App.hpp
@@ -0,0 +1,62 @@
+#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 <GLFW/glfw3.h>
+
+#include <deque>
+#include <functional>
+#include <memory>
+#include <vector>
+
+using KeyCaptureCallback = std::function<bool(int, int)>;
+
+class App {
+private:
+ std::deque<KeyCaptureCallback> mKeyCaptureCallbacks;
+ PodVector<Player*> mPlayers;
+ std::unique_ptr<IEditor> mEditor;
+ GameWorld mWorld;
+ Renderer mWorldRenderer;
+ Camera mMainCamera;
+ Camera* mActiveCamera;
+ // NOTE: should only be true when mEditor != nullptr
+ bool mEditorVisible = false;
+ bool mGameRunning = false;
+
+public:
+ App();
+ ~App();
+
+ IEditor* GetEditor() { return mEditor.get(); }
+ GameWorld* GetWorld() { return &mWorld; }
+ Renderer* GetWorldRenderer() { return &mWorldRenderer; }
+
+ Camera* GetActiveCamera() const;
+ void BindActiveCamera(Camera* camera);
+ void UnbindActiveCamera();
+
+ 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);
+};