aboutsummaryrefslogtreecommitdiff
path: root/mwe/gameloop/include
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-09-21 15:31:58 +0200
committerLoek Le Blansch <loek@pipeframe.xyz>2024-09-21 15:31:58 +0200
commitca393b6b47618e48c107ad5c021d86700343648e (patch)
tree298bff793ee331566b6be1840c8d7404409b5198 /mwe/gameloop/include
parent8bf919f750807060f3ac2c640b8a02300af1733c (diff)
move gameloop poc to mwe
Diffstat (limited to 'mwe/gameloop/include')
-rw-r--r--mwe/gameloop/include/eventManager.h4
-rw-r--r--mwe/gameloop/include/gameObject.h29
-rw-r--r--mwe/gameloop/include/loopManager.h25
-rw-r--r--mwe/gameloop/include/timer.h30
-rw-r--r--mwe/gameloop/include/window.h20
5 files changed, 108 insertions, 0 deletions
diff --git a/mwe/gameloop/include/eventManager.h b/mwe/gameloop/include/eventManager.h
new file mode 100644
index 0000000..2aa0a68
--- /dev/null
+++ b/mwe/gameloop/include/eventManager.h
@@ -0,0 +1,4 @@
+class EventManager
+{
+
+};
diff --git a/mwe/gameloop/include/gameObject.h b/mwe/gameloop/include/gameObject.h
new file mode 100644
index 0000000..0e17991
--- /dev/null
+++ b/mwe/gameloop/include/gameObject.h
@@ -0,0 +1,29 @@
+#pragma once
+#include <iostream>
+class GameObject {
+ public:
+ GameObject();
+ GameObject(std::string name, float x, float y, float width, float height, float velX, float velY);
+ std::string getName() const;
+ float getX() const;
+ float getY() const;
+ float getWidth() const;
+ float getHeight() const;
+ float getVelX() const;
+ float getVelY() const;
+ void setName(std::string value);
+ void setX(float value);
+ void setY(float value);
+ void setWidth(float value);
+ void setHeight(float value);
+ void setVelX(float value);
+ void setVelY(float value);
+ private:
+ std::string name = "";
+ float x = 0;
+ float y = 0;
+ float width = 0;
+ float height = 0;
+ float velX = 0;
+ float velY = 0;
+};
diff --git a/mwe/gameloop/include/loopManager.h b/mwe/gameloop/include/loopManager.h
new file mode 100644
index 0000000..06bcd5f
--- /dev/null
+++ b/mwe/gameloop/include/loopManager.h
@@ -0,0 +1,25 @@
+#pragma once
+#include <SDL2/SDL.h>
+#include "window.h"
+#include "gameObject.h"
+class LoopManager{
+ public:
+ LoopManager();
+ void setup();
+ void loop();
+ private:
+
+ std::vector<GameObject*> objectList;
+ void processInput();
+ void update();
+ void lateUpdate();
+ void fixedUpdate();
+ void render();
+ bool gameRunning = false;
+ WindowManager window;
+ int timeScale = 1;
+ float accumulator = 0.0;
+ double currentTime;
+ double t = 0.0;
+ double dt = 0.01;
+};
diff --git a/mwe/gameloop/include/timer.h b/mwe/gameloop/include/timer.h
new file mode 100644
index 0000000..a245e5c
--- /dev/null
+++ b/mwe/gameloop/include/timer.h
@@ -0,0 +1,30 @@
+#pragma once
+
+#include <SDL2/SDL.h>
+
+class LoopTimer {
+public:
+ static LoopTimer& getInstance();
+ void start();
+ void update();
+ double getDeltaTime() const;
+ int getCurrentTime() const;
+ void advanceFixedUpdate();
+ double getFixedDeltaTime() const;
+ void setFPS(int FPS);
+ int getFPS() const;
+ void enforceFrameRate();
+ double getLag() const;
+private:
+ LoopTimer();
+ int FPS = 50;
+ double gameScale = 1;
+ double maximumDeltaTime = 0.25;
+ double deltaTime;
+ double frameTargetTime = FPS / 1000;
+ double fixedDeltaTime = 0.01;
+ double elapsedTime;
+ double elapsedFixedTime;
+ double time;
+ uint64_t lastFrameTime;
+};
diff --git a/mwe/gameloop/include/window.h b/mwe/gameloop/include/window.h
new file mode 100644
index 0000000..cfde0e9
--- /dev/null
+++ b/mwe/gameloop/include/window.h
@@ -0,0 +1,20 @@
+#pragma once
+#include <SDL2/SDL.h>
+#include <vector>
+#include "gameObject.h"
+#include <iostream>
+class WindowManager{
+ public:
+ WindowManager();
+ virtual ~WindowManager();
+ void render(std::vector<GameObject*> objects);
+ bool initWindow();
+ void destroyWindow();
+
+ SDL_Renderer* getRenderer();
+ private:
+ const int SCREEN_WIDTH = 800;
+ const int SCREEN_HEIGHT = 600;
+ SDL_Window* window = NULL;
+ SDL_Renderer* renderer = NULL;
+};