diff options
author | HampusM <hampus@hampusmat.com> | 2022-06-03 12:02:11 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2022-06-13 17:57:00 +0200 |
commit | df49c32fc0792214182d510b4a58c524bf8b59c5 (patch) | |
tree | fb626b5bdb359bca08a85d8d8fefb1679b4e61ab /src/game/game.cpp | |
parent | 4f27cc4f86fb7265bc6ad78cdfbe5d858a92a56e (diff) |
feat: add ability to change generation speed
Diffstat (limited to 'src/game/game.cpp')
-rw-r--r-- | src/game/game.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/game/game.cpp b/src/game/game.cpp index 8ea6571..9d8c246 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -34,7 +34,9 @@ void Game::on_start() noexcept _status_manager->set_section_title(StatusLineSection::C, "Y: "); _status_manager->set_section_title(StatusLineSection::D, "Paused: "); _status_manager->set_section_title(StatusLineSection::E, "Generation: "); - _status_manager->set_section_title(StatusLineSection::F, "Time since last frame: "); + _status_manager->set_section_title( + StatusLineSection::F, + "Minimum time since last generation: "); _status_manager->set_section_title(StatusLineSection::G, "Living cells: "); _status_manager->set_section_title(StatusLineSection::H, "Window size: "); @@ -150,6 +152,17 @@ void Game::on_update() noexcept is_generation_stepping = true; break; + case '+': + if (_min_time_since_last_gen_millis > 0) + { + _min_time_since_last_gen_millis -= MIN_TIME_SINCE_LAST_GEN_INCREMENT; + } + break; + + case '-': + _min_time_since_last_gen_millis += MIN_TIME_SINCE_LAST_GEN_DECREMENT; + break; + default: break; } @@ -167,29 +180,27 @@ void Game::on_update() noexcept fmt::format("{}", current_pos.get_y())); } - const auto time_now = std::chrono::system_clock::now(); - - const auto time_since_last_update = time_now - _last_update_time; - _status_manager->set_section_body( StatusLineSection::F, - fmt::format("{} nanoseconds", time_since_last_update.count())); + fmt::format("{} milliseconds", _min_time_since_last_gen_millis)); _status_manager->set_section_body( StatusLineSection::G, fmt::format("{}", _living_cell_positions.size())); + const auto time_now = std::chrono::system_clock::now(); + if (_generation_tracker->get_is_paused() && !is_generation_stepping) { _last_update_time = time_now; return; } - const auto time_since_last_gen_update = + const auto time_since_last_gen = std::chrono::duration_cast<std::chrono::milliseconds>( time_now - _last_gen_update_time); - if (time_since_last_gen_update.count() <= GENERATION_UPDATE_SPEED_MILLIS) + if (time_since_last_gen.count() <= _min_time_since_last_gen_millis) { _last_update_time = time_now; return; |