/********************************************************************* * \file SHFramerateController.h * \author Ryan Wang Nian Jing * \brief Declaration for the framerate controller * Handles changing of scenes and manages loop (timestep, etc.) * * \copyright Copyright (c) 2022 DigiPen Institute of Technology. Reproduction or disclosure of this file or its contents without the prior written consent of DigiPen Institute of Technology is prohibited. *********************************************************************/ #ifndef SH_FRAMERATECONTROLLER_H #define SH_FRAMERATECONTROLLER_H #pragma once #include #include "SH_API.h" namespace SHADE { class SH_API SHFrameRateController { private: //Varying delta time. The actual time it took for every frame static double rawDeltaTime; static std::chrono::steady_clock::time_point prevFrameTime; public: //Gets the raw delta time static inline double GetRawDeltaTime() noexcept { return rawDeltaTime; } //Updates the raw delta time accordingly static void UpdateFRC() noexcept; }; } //TODO Legacy code. Delete soon #if 0 #include "../Scene/SHScene.h" namespace SHADE { class SHFramerateController { private: //scene pointers static SHScene* previousScene; static SHScene* currentScene; static SHScene* nextScene; //Flags //Whether the flag has been raised for the game to be quit static bool toQuit; //Whether the flag has been raised for the current scene to restart static bool toRestart; public: //Fixed timestep value for physics. Default at 1/100th of a second. //Should be lower than the variable refresh rate static double fixedTimestep; //Scene Manager Loop //This loop is vital to the game because it runs for as long as the game //runs. Before entering, initialise vital systems for game. After exiting, //free these vital systems before finishing the main() function and //terminating the game //Parameter of firstScene is what scene the game should start with static void Run(SHScene* firstScene); //Set the flag to restart the current game scene static inline void RestartScene() { toRestart = true; } //Set the flag to halt running of the scene manager and quit the game static inline void QuitGame() { toQuit = true; } //Set the next scene to be excuted //This will tell the scene manager to //halt execution of the current scene and prepare //execution of the next static inline void SetNextScene(SHScene* const next) { nextScene = next; } }; } #endif #endif