From b8838794e135c1b849ac7a8638ca8e948042ef86 Mon Sep 17 00:00:00 2001 From: Frederico Linhares Date: Mon, 8 Aug 2022 11:12:51 -0300 Subject: refa Replace SDL timer with C++ timer --- src/core.cpp | 5 ++++- src/core.hpp | 3 ++- src/main.cpp | 19 +++++++++++-------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/core.cpp b/src/core.cpp index 30acbf9..a1c996f 100644 --- a/src/core.cpp +++ b/src/core.cpp @@ -54,6 +54,8 @@ vk_debug_callback( static void load_variables(void *obj) { + using namespace std::chrono; + YAML::Node root = YAML::LoadFile(cg_core.config_file); std::string game_name = root["name"].as().c_str(); @@ -70,7 +72,8 @@ load_variables(void *obj) cg_core.game_version_patch = 0; cg_core.fps = 30; - cg_core.max_frame_duration_ms = 1000 / cg_core.fps; + cg_core.max_frame_duration = + duration(1000 / cg_core.fps); } static void diff --git a/src/core.hpp b/src/core.hpp index a51d2b4..d9e68e8 100644 --- a/src/core.hpp +++ b/src/core.hpp @@ -23,6 +23,7 @@ #define DATA_DIR "/usr/local/share/candy_gear" +#include #include #include @@ -87,7 +88,7 @@ struct cg_sCore int game_version_major, game_version_minor, game_version_patch; Uint32 fps; - Uint32 max_frame_duration_ms; + std::chrono::duration max_frame_duration; SDL_Window *window; diff --git a/src/main.cpp b/src/main.cpp index 34cbcb4..5155f60 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -14,6 +14,9 @@ * limitations under the License. */ +#include +#include + #include "camera.hpp" #include "candy_gear.hpp" #include "core.hpp" @@ -33,8 +36,10 @@ static void handle_error(mrb_state *mrb) int main(int argc, char *argv[]) { + using namespace std::chrono; + using namespace std::this_thread; + SDL_Event event; - Uint32 frame_start; // Random numbers random_number_generator.seed(random_seed()); @@ -79,7 +84,7 @@ int main(int argc, char *argv[]) if (cg_core.mrb->exc) handle_error(cg_core.mrb); } - frame_start = SDL_GetTicks(); + auto frame_start = steady_clock::now(); // Game main loop. while(!cg_core.quit_game) @@ -118,14 +123,12 @@ int main(int argc, char *argv[]) // Timer { - Uint32 frame_stop, frame_duration; - - frame_stop = SDL_GetTicks(); - frame_duration = frame_stop - frame_start; + auto frame_stop = steady_clock::now(); + auto frame_duration = frame_stop - frame_start; // If frame take less time than maximum allowed. - if(cg_core.max_frame_duration_ms > frame_duration) - SDL_Delay(cg_core.max_frame_duration_ms - frame_duration); + if(cg_core.max_frame_duration > frame_duration) + sleep_for(cg_core.max_frame_duration - frame_duration); frame_start = frame_stop; } -- cgit v1.2.3