.. _program_listing_file_blam_tick.cpp: Program Listing for File tick.cpp ================================= |exhale_lsh| :ref:`Return to documentation for file ` (``blam\tick.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp // Tick Management // // Controls and manages engine tick rate // // ---------------------------------------- // // Copyright (c) Elaztek Studios 2013-2019 // #include "core.h" #include #include //TODO: Add this to matg uint64_t max_tickrate = 40; uint64_t ticks_this_second = 0; LARGE_INTEGER last_second_time; void doTick(); uint64_t Blam::Tick::getCurrentTickRate() { //TODO: calculate average TPS //we're gonna return ticks this second in the meantime return ticks_this_second; } void Blam::Tick::updateLastTimestamp() { QueryPerformanceCounter(&last_second_time); } //check if a second has passed in order to reset tick counter bool hasSecondPassed() { LARGE_INTEGER elapsed_microseconds; //elapsed time LARGE_INTEGER current_time; //the new time LARGE_INTEGER frequency; QueryPerformanceFrequency(&frequency); QueryPerformanceCounter(¤t_time); elapsed_microseconds.QuadPart = current_time.QuadPart - last_second_time.QuadPart; elapsed_microseconds.QuadPart *= 1000000; elapsed_microseconds.QuadPart /= frequency.QuadPart; if (elapsed_microseconds.QuadPart >= 1000000) { return true; } else { return false; } } void Blam::Tick::tick() { //if a second has passed, reset this second's tick counter and last second timestamp if (hasSecondPassed()) { ticks_this_second = 0; Blam::Tick::updateLastTimestamp(); } if (max_tickrate > ticks_this_second) { doTick(); ticks_this_second += 1; } } //put things you want to run based on game tick here void doTick() { std::cout << "doTick() was called (" + std::to_string(ticks_this_second) + ")" << std::endl; }