1 /*
2     Copyright © 2020, Luna Nielsen
3     Distributed under the 2-Clause BSD License, see LICENSE file.
4     
5     Authors: Luna Nielsen
6 */
7 module engine.game;
8 import bindbc.glfw;
9 import engine;
10 
11 private double previousTime_;
12 private double currentTime_;
13 private double deltaTime_;
14 
15 /**
16     Function run when the game is to update
17 */
18 void function() gameUpdate;
19 
20 /**
21     Function run when the game is to initialize
22 */
23 void function() gameInit;
24 
25 /**
26     Function run when the game is to clean up
27 */
28 void function() gameCleanup;
29 
30 /**
31     Starts the game loop
32 */
33 void startGame() {
34     gameInit();
35     resetTime();
36     while(!GameWindow.isExitRequested) {
37 
38         currentTime_ = glfwGetTime();
39         deltaTime_ = currentTime_-previousTime_;
40         previousTime_ = currentTime_;
41         
42         // Clear color and depth buffers
43         glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
44 
45         // Reset OpenGL viewport
46         GameWindow.resetViewport();
47 
48         // Update and render the game
49         gameUpdate();
50 
51         // Update the mouse's state
52         Mouse.update();
53 
54         // Swap buffers and update the window
55         GameWindow.swapBuffers();
56         GameWindow.update();
57     }
58 
59     // Game cleanup
60     gameCleanup();
61 }
62 
63 /**
64     Gets delta time
65 */
66 double deltaTime() {
67     return deltaTime_;
68 }
69 
70 /**
71     Gets delta time
72 */
73 double prevTime() {
74     return previousTime_;
75 }
76 
77 /**
78     Gets delta time
79 */
80 double currTime() {
81     return currentTime_;
82 }
83 
84 /**
85     Resets the time scale
86 */
87 void resetTime() {
88     glfwSetTime(0);
89     previousTime_ = 0;
90     currentTime_ = 0;
91 }