diff options
author | Ben Deutsch <ben@bendeutsch.de> | 2018-04-18 20:56:01 +0200 |
---|---|---|
committer | SmallJoker <SmallJoker@users.noreply.github.com> | 2018-04-18 20:56:01 +0200 |
commit | 3eac24946418d787697077cc1806856e514ba5f4 (patch) | |
tree | b831acb5d872cdc0f46123e92be9bb21f46d8d9f /src/player.cpp | |
parent | b1e58c9c35ae3eb6167a0745086cdb0ddb1dd9d7 (diff) | |
download | minetest-3eac24946418d787697077cc1806856e514ba5f4.tar.gz minetest-3eac24946418d787697077cc1806856e514ba5f4.tar.bz2 minetest-3eac24946418d787697077cc1806856e514ba5f4.zip |
PlayerSettings struct for player movement code (#7243)
Instead of calling g_settings->getBool("flag") multiple times
during each movement step, the current settings are cached
in a new player object member. Updated via registered callbacks.
Diffstat (limited to 'src/player.cpp')
-rw-r--r-- | src/player.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/src/player.cpp b/src/player.cpp index 1ff953253..c7036663a 100644 --- a/src/player.cpp +++ b/src/player.cpp @@ -74,6 +74,20 @@ Player::Player(const char *name, IItemDefManager *idef): HUD_FLAG_MINIMAP_RADAR_VISIBLE; hud_hotbar_itemcount = HUD_HOTBAR_ITEMCOUNT_DEFAULT; + + m_player_settings.readGlobalSettings(); + g_settings->registerChangedCallback("free_move", &Player::settingsChangedCallback, + &m_player_settings); + g_settings->registerChangedCallback("fast_move", &Player::settingsChangedCallback, + &m_player_settings); + g_settings->registerChangedCallback("continuous_forward", + &Player::settingsChangedCallback, &m_player_settings); + g_settings->registerChangedCallback("always_fly_fast", + &Player::settingsChangedCallback, &m_player_settings); + g_settings->registerChangedCallback("aux1_descends", + &Player::settingsChangedCallback, &m_player_settings); + g_settings->registerChangedCallback( + "noclip", &Player::settingsChangedCallback, &m_player_settings); } Player::~Player() @@ -126,3 +140,18 @@ void Player::clearHud() hud.pop_back(); } } + +void PlayerSettings::readGlobalSettings() +{ + free_move = g_settings->getBool("free_move"); + fast_move = g_settings->getBool("fast_move"); + continuous_forward = g_settings->getBool("continuous_forward"); + always_fly_fast = g_settings->getBool("always_fly_fast"); + aux1_descends = g_settings->getBool("aux1_descends"); + noclip = g_settings->getBool("noclip"); +} + +void Player::settingsChangedCallback(const std::string &name, void *data) +{ + ((PlayerSettings *)data)->readGlobalSettings(); +} |