1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-06-27 16:36:03 +00:00

Make Sneak and Aux1 optionally togglable (#15785)

This commit is contained in:
Medley 2025-03-06 21:01:43 +01:00 committed by GitHub
parent 7892541383
commit 63701de45f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 29 additions and 2 deletions

View file

@ -111,6 +111,12 @@ doubletap_jump (Double tap jump for fly) bool false
# enabled.
always_fly_fast (Always fly fast) bool true
# If enabled, the "Sneak" key will toggle when pressed.
toggle_sneak_key (Toggle Sneak key) bool false
# If enabled, the "Aux1" key will toggle when pressed.
toggle_aux1_key (Toggle Aux1 key) bool false
# The time in seconds it takes between repeated node placements when holding
# the place button.
#

View file

@ -560,6 +560,7 @@ protected:
void updateCameraDirection(CameraOrientation *cam, float dtime);
void updateCameraOrientation(CameraOrientation *cam, float dtime);
bool getTogglableKeyState(GameKeyType key, bool toggling_enabled, bool prev_key_state);
void updatePlayerControl(const CameraOrientation &cam);
void updatePauseState();
void step(f32 dtime);
@ -746,6 +747,8 @@ private:
* a later release.
*/
bool m_cache_doubletap_jump;
bool m_cache_toggle_sneak_key;
bool m_cache_toggle_aux1_key;
bool m_cache_enable_joysticks;
bool m_cache_enable_fog;
bool m_cache_enable_noclip;
@ -791,6 +794,10 @@ Game::Game() :
&settingChangedCallback, this);
g_settings->registerChangedCallback("doubletap_jump",
&settingChangedCallback, this);
g_settings->registerChangedCallback("toggle_sneak_key",
&settingChangedCallback, this);
g_settings->registerChangedCallback("toggle_aux1_key",
&settingChangedCallback, this);
g_settings->registerChangedCallback("enable_joysticks",
&settingChangedCallback, this);
g_settings->registerChangedCallback("enable_fog",
@ -2427,6 +2434,16 @@ void Game::updateCameraOrientation(CameraOrientation *cam, float dtime)
}
// Get the state of an optionally togglable key
bool Game::getTogglableKeyState(GameKeyType key, bool toggling_enabled, bool prev_key_state)
{
if (!toggling_enabled)
return isKeyDown(key);
else
return prev_key_state ^ wasKeyPressed(key);
}
void Game::updatePlayerControl(const CameraOrientation &cam)
{
LocalPlayer *player = client->getEnv().getLocalPlayer();
@ -2439,8 +2456,8 @@ void Game::updatePlayerControl(const CameraOrientation &cam)
isKeyDown(KeyType::LEFT),
isKeyDown(KeyType::RIGHT),
isKeyDown(KeyType::JUMP) || player->getAutojump(),
isKeyDown(KeyType::AUX1),
isKeyDown(KeyType::SNEAK),
getTogglableKeyState(KeyType::AUX1, m_cache_toggle_aux1_key, player->control.aux1),
getTogglableKeyState(KeyType::SNEAK, m_cache_toggle_sneak_key, player->control.sneak),
isKeyDown(KeyType::ZOOM),
isKeyDown(KeyType::DIG),
isKeyDown(KeyType::PLACE),
@ -4100,6 +4117,8 @@ void Game::readSettings()
m_chat_log_buf.setLogLevel(chat_log_level);
m_cache_doubletap_jump = g_settings->getBool("doubletap_jump");
m_cache_toggle_sneak_key = g_settings->getBool("toggle_sneak_key");
m_cache_toggle_aux1_key = g_settings->getBool("toggle_aux1_key");
m_cache_enable_joysticks = g_settings->getBool("enable_joysticks");
m_cache_enable_fog = g_settings->getBool("enable_fog");
m_cache_mouse_sensitivity = g_settings->getFloat("mouse_sensitivity", 0.001f, 10.0f);

View file

@ -356,6 +356,8 @@ void set_default_settings()
settings->setDefault("aux1_descends", "false");
settings->setDefault("doubletap_jump", "false");
settings->setDefault("always_fly_fast", "true");
settings->setDefault("toggle_sneak_key", "false");
settings->setDefault("toggle_aux1_key", "false");
settings->setDefault("autojump", bool_to_cstr(has_touch));
settings->setDefault("continuous_forward", "false");
settings->setDefault("enable_joysticks", "false");