summary refs log tree commit diff stats
path: root/src/game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game.cpp')
-rw-r--r--src/game.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/src/game.cpp b/src/game.cpp new file mode 100644 index 0000000..b3fa9a8 --- /dev/null +++ b/src/game.cpp
@@ -0,0 +1,75 @@
1#include "game.h"
2#include "components/animatable.h"
3#include "components/transformable.h"
4#include "components/controllable.h"
5#include "components/droppable.h"
6#include "components/ponderable.h"
7#include "systems/rendering.h"
8#include "systems/controlling.h"
9#include "systems/pondering.h"
10
11void key_callback(GLFWwindow* window, int key, int, int action, int)
12{
13 Game& game = *((Game*) glfwGetWindowUserPointer(window));
14
15 if ((action == GLFW_PRESS) && (key == GLFW_KEY_ESCAPE))
16 {
17 game.shouldQuit = true;
18
19 return;
20 }
21
22 game.systemManager.getSystem<ControllingSystem>().input(key, action);
23}
24
25Game::Game(GLFWwindow* window) : window(window)
26{
27 systemManager.emplaceSystem<ControllingSystem>(*this);
28 systemManager.emplaceSystem<RenderingSystem>(*this);
29 systemManager.emplaceSystem<PonderingSystem>(*this);
30
31 int player = entityManager.emplaceEntity();
32 entityManager.emplaceComponent<AnimatableComponent>(player, "res/Starla.png", 10, 12, 6);
33 entityManager.emplaceComponent<TransformableComponent>(player, 203, 44, 10, 12);
34 entityManager.emplaceComponent<DroppableComponent>(player);
35 entityManager.emplaceComponent<PonderableComponent>(player);
36 entityManager.emplaceComponent<ControllableComponent>(player);
37
38 glfwSwapInterval(1);
39 glfwSetWindowUserPointer(window, this);
40 glfwSetKeyCallback(window, key_callback);
41}
42
43void Game::execute()
44{
45 double lastTime = glfwGetTime();
46 const double dt = 0.01;
47 double accumulator = 0.0;
48
49 while (!(shouldQuit || glfwWindowShouldClose(window)))
50 {
51 double currentTime = glfwGetTime();
52 double frameTime = currentTime - lastTime;
53 lastTime = currentTime;
54
55 glfwPollEvents();
56
57 accumulator += frameTime;
58 while (accumulator >= dt)
59 {
60 systemManager.getSystem<ControllingSystem>().tick(dt);
61 systemManager.getSystem<PonderingSystem>().tick(dt);
62
63 accumulator -= dt;
64 }
65
66 systemManager.getSystem<RenderingSystem>().tick(frameTime);
67 }
68}
69
70EntityManager& Game::getEntityManager()
71{
72 return entityManager;
73}
74
75