summaryrefslogtreecommitdiff
path: root/src/player.cpp
diff options
context:
space:
mode:
authorBen Deutsch <ben@bendeutsch.de>2018-04-18 20:56:01 +0200
committerSmallJoker <SmallJoker@users.noreply.github.com>2018-04-18 20:56:01 +0200
commit3eac24946418d787697077cc1806856e514ba5f4 (patch)
treeb831acb5d872cdc0f46123e92be9bb21f46d8d9f /src/player.cpp
parentb1e58c9c35ae3eb6167a0745086cdb0ddb1dd9d7 (diff)
downloadminetest-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.cpp29
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();
+}