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 }