mirror of
https://github.com/minetest/minetest.git
synced 2024-08-19 04:54:18 +02:00
Safe digging and placing (#6127)
* Setting: Safe digging and placing * New setting 'safe_dig_and_place' under Controls * If set, digging and placing will not auto-repeat * Releasing buttons unblocks the respective action again * Useful for inexperienced users in creative mode where default repeat times may be too short * Safe placing (right click repetition) does not need a guarding flag * Added new setting to minetest.conf.example
This commit is contained in:
parent
c7160cb629
commit
397a701f98
@ -101,6 +101,10 @@ always_fly_fast (Always fly and fast) bool true
|
|||||||
# The time in seconds it takes between repeated right clicks when holding the right mouse button.
|
# The time in seconds it takes between repeated right clicks when holding the right mouse button.
|
||||||
repeat_rightclick_time (Rightclick repetition interval) float 0.25
|
repeat_rightclick_time (Rightclick repetition interval) float 0.25
|
||||||
|
|
||||||
|
# Prevent digging and placing from repeating when holding the mouse buttons.
|
||||||
|
# Enable this when you dig or place too often by accident.
|
||||||
|
safe_dig_and_place (Safe digging and placing) bool false
|
||||||
|
|
||||||
# Enable random user input (only used for testing).
|
# Enable random user input (only used for testing).
|
||||||
random_input (Random input) bool false
|
random_input (Random input) bool false
|
||||||
|
|
||||||
|
@ -75,6 +75,11 @@
|
|||||||
# type: float
|
# type: float
|
||||||
# repeat_rightclick_time = 0.25
|
# repeat_rightclick_time = 0.25
|
||||||
|
|
||||||
|
# Prevent digging and placing from repeating when holding the mouse buttons.
|
||||||
|
# Enable this when you dig or place too often by accident.
|
||||||
|
# type: bool
|
||||||
|
# safe_dig_and_place = false
|
||||||
|
|
||||||
# Enable random user input (only used for testing).
|
# Enable random user input (only used for testing).
|
||||||
# type: bool
|
# type: bool
|
||||||
# random_input = false
|
# random_input = false
|
||||||
|
@ -240,6 +240,7 @@ void set_default_settings(Settings *settings)
|
|||||||
settings->setDefault("invert_mouse", "false");
|
settings->setDefault("invert_mouse", "false");
|
||||||
settings->setDefault("mouse_sensitivity", "0.2");
|
settings->setDefault("mouse_sensitivity", "0.2");
|
||||||
settings->setDefault("repeat_rightclick_time", "0.25");
|
settings->setDefault("repeat_rightclick_time", "0.25");
|
||||||
|
settings->setDefault("safe_dig_and_place", "false");
|
||||||
settings->setDefault("random_input", "false");
|
settings->setDefault("random_input", "false");
|
||||||
settings->setDefault("aux1_descends", "false");
|
settings->setDefault("aux1_descends", "false");
|
||||||
settings->setDefault("doubletap_jump", "false");
|
settings->setDefault("doubletap_jump", "false");
|
||||||
|
13
src/game.cpp
13
src/game.cpp
@ -1142,6 +1142,7 @@ struct GameRunData {
|
|||||||
bool digging;
|
bool digging;
|
||||||
bool ldown_for_dig;
|
bool ldown_for_dig;
|
||||||
bool dig_instantly;
|
bool dig_instantly;
|
||||||
|
bool digging_blocked;
|
||||||
bool left_punch;
|
bool left_punch;
|
||||||
bool update_wielded_item_trigger;
|
bool update_wielded_item_trigger;
|
||||||
bool reset_jump_timer;
|
bool reset_jump_timer;
|
||||||
@ -3559,6 +3560,11 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
|||||||
hud->updateSelectionMesh(camera_offset);
|
hud->updateSelectionMesh(camera_offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (runData.digging_blocked && !isLeftPressed()) {
|
||||||
|
// allow digging again if button is not pressed
|
||||||
|
runData.digging_blocked = false;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Stop digging when
|
Stop digging when
|
||||||
- releasing left mouse button
|
- releasing left mouse button
|
||||||
@ -3603,7 +3609,8 @@ void Game::processPlayerInteraction(f32 dtime, bool show_hud, bool show_debug)
|
|||||||
|
|
||||||
soundmaker->m_player_leftpunch_sound.name = "";
|
soundmaker->m_player_leftpunch_sound.name = "";
|
||||||
|
|
||||||
if (isRightPressed())
|
// Prepare for repeating, unless we're not supposed to
|
||||||
|
if (isRightPressed() && !g_settings->getBool("safe_dig_and_place"))
|
||||||
runData.repeat_rightclick_timer += dtime;
|
runData.repeat_rightclick_timer += dtime;
|
||||||
else
|
else
|
||||||
runData.repeat_rightclick_timer = 0;
|
runData.repeat_rightclick_timer = 0;
|
||||||
@ -3762,6 +3769,7 @@ void Game::handlePointingAtNode(const PointedThing &pointed,
|
|||||||
ClientMap &map = client->getEnv().getClientMap();
|
ClientMap &map = client->getEnv().getClientMap();
|
||||||
|
|
||||||
if (runData.nodig_delay_timer <= 0.0 && isLeftPressed()
|
if (runData.nodig_delay_timer <= 0.0 && isLeftPressed()
|
||||||
|
&& !runData.digging_blocked
|
||||||
&& client->checkPrivilege("interact")) {
|
&& client->checkPrivilege("interact")) {
|
||||||
handleDigging(pointed, nodepos, playeritem_toolcap, dtime);
|
handleDigging(pointed, nodepos, playeritem_toolcap, dtime);
|
||||||
}
|
}
|
||||||
@ -3985,6 +3993,9 @@ void Game::handleDigging(const PointedThing &pointed, const v3s16 &nodepos,
|
|||||||
|
|
||||||
runData.dig_time = 0;
|
runData.dig_time = 0;
|
||||||
runData.digging = false;
|
runData.digging = false;
|
||||||
|
// we successfully dug, now block it from repeating if we want to be safe
|
||||||
|
if (g_settings->getBool("safe_dig_and_place"))
|
||||||
|
runData.digging_blocked = true;
|
||||||
|
|
||||||
runData.nodig_delay_timer =
|
runData.nodig_delay_timer =
|
||||||
runData.dig_time_complete / (float)crack_animation_length;
|
runData.dig_time_complete / (float)crack_animation_length;
|
||||||
|
Loading…
Reference in New Issue
Block a user