diff options
| -rw-r--r-- | src/game/game.cpp | 17 | ||||
| -rw-r--r-- | src/game/game.hpp | 9 | ||||
| -rw-r--r-- | src/game/status_manager.cpp | 2 | 
3 files changed, 15 insertions, 13 deletions
diff --git a/src/game/game.cpp b/src/game/game.cpp index f0df83b..893be97 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -58,9 +58,7 @@ 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, -		"Minimum time since last generation: "); +	_status_manager->set_section_title(StatusLineSection::F, "Generation speed: ");  	_status_manager->set_section_title(StatusLineSection::G, "Living cells: ");  	_status_manager->set_section_title(StatusLineSection::H, "Window size: "); @@ -297,14 +295,17 @@ void Game::_on_normal_mode_update() noexcept  		break;  	case '+': -		if (_min_time_since_last_gen_millis > 0) +		if (_generations_per_second < MAXIMUM_GENERATIONS_PER_SECOND)  		{ -			_min_time_since_last_gen_millis -= MIN_TIME_SINCE_LAST_GEN_INCREMENT; +			_generations_per_second++;  		}  		break;  	case '-': -		_min_time_since_last_gen_millis += MIN_TIME_SINCE_LAST_GEN_DECREMENT; +		if (_generations_per_second > 1) +		{ +			_generations_per_second--; +		}  		break;  	default: @@ -326,7 +327,7 @@ void Game::_on_normal_mode_update() noexcept  	_status_manager->set_section_body(  		StatusLineSection::F, -		fmt::format("{} milliseconds", _min_time_since_last_gen_millis)); +		fmt::format("{}/s", _generations_per_second));  	_status_manager->set_section_body(  		StatusLineSection::G, @@ -343,7 +344,7 @@ void Game::_on_normal_mode_update() noexcept  		std::chrono::duration_cast<std::chrono::milliseconds>(  			time_now - _last_gen_update_time); -	if (time_since_last_gen.count() <= _min_time_since_last_gen_millis) +	if (time_since_last_gen.count() <= MILLIS_IN_SECOND / _generations_per_second)  	{  		return;  	} diff --git a/src/game/game.hpp b/src/game/game.hpp index abee6ec..09a9ee0 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -23,10 +23,11 @@  #include <string_view>  #include <vector> -constexpr auto DEFAULT_MIN_TIME_SINCE_LAST_GEN_MILLIS = 200; +constexpr auto DEFAULT_GENERATIONS_PER_SECOND = 5L; -constexpr auto MIN_TIME_SINCE_LAST_GEN_INCREMENT = 50; -constexpr auto MIN_TIME_SINCE_LAST_GEN_DECREMENT = 50; +constexpr auto MAXIMUM_GENERATIONS_PER_SECOND = 512L; + +constexpr auto MILLIS_IN_SECOND = 1000;  constexpr auto CURSOR_FALLBACK_POS_X = 10;  constexpr auto CURSOR_FALLBACK_POS_Y = 10; @@ -92,7 +93,7 @@ private:  	std::chrono::system_clock::time_point _last_gen_update_time; -	int32_t _min_time_since_last_gen_millis = DEFAULT_MIN_TIME_SINCE_LAST_GEN_MILLIS; +	int64_t _generations_per_second = DEFAULT_GENERATIONS_PER_SECOND;  	std::list<Vector2> _living_cell_positions; diff --git a/src/game/status_manager.cpp b/src/game/status_manager.cpp index b4496ba..ac86e0a 100644 --- a/src/game/status_manager.cpp +++ b/src/game/status_manager.cpp @@ -13,7 +13,7 @@ void StatusManager::bind(const std::shared_ptr<IStatusLine> &statusline) noexcep  	_statusline->set_section_length(StatusLineSection::C, 15);  	_statusline->set_section_length(StatusLineSection::D, 20);  	_statusline->set_section_length(StatusLineSection::E, 25); -	_statusline->set_section_length(StatusLineSection::F, 60); +	_statusline->set_section_length(StatusLineSection::F, 30);  	_statusline->set_section_length(StatusLineSection::G, 30);  	_statusline->set_section_length(StatusLineSection::H, 30);  }  | 
