diff options
author | PilzAdam <PilzAdam@gmx.de> | 2013-01-03 19:51:52 +0100 |
---|---|---|
committer | PilzAdam <PilzAdam@gmx.de> | 2013-01-04 18:51:38 +0100 |
commit | 82fd83fd12e23ad7c61b4c7ae525be745b5236a5 (patch) | |
tree | 10ae8a3c7a1bec088944caab1ca0ea4960df78b8 /src | |
parent | b50da63852f2a2360d07cc2f1e29fc6844b15ccc (diff) | |
download | minetest-82fd83fd12e23ad7c61b4c7ae525be745b5236a5.tar.gz minetest-82fd83fd12e23ad7c61b4c7ae525be745b5236a5.tar.bz2 minetest-82fd83fd12e23ad7c61b4c7ae525be745b5236a5.zip |
Switch to fly mode if spacebar is doubleclicked
Can be turned off in the key change GUI or in minetest.conf via doubletab_space
Diffstat (limited to 'src')
-rw-r--r-- | src/defaultsettings.cpp | 1 | ||||
-rw-r--r-- | src/game.cpp | 35 | ||||
-rw-r--r-- | src/guiKeyChangeMenu.cpp | 20 |
3 files changed, 56 insertions, 0 deletions
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp index cac3e568a..82783db0d 100644 --- a/src/defaultsettings.cpp +++ b/src/defaultsettings.cpp @@ -56,6 +56,7 @@ void set_default_settings(Settings *settings) settings->setDefault("anaglyph", "false"); settings->setDefault("anaglyph_strength", "0.1"); settings->setDefault("aux1_descends", "false"); + settings->setDefault("doubletab_jump", "false"); // Some (temporary) keys for debugging settings->setDefault("keymap_print_debug_stacks", "KEY_KEY_P"); diff --git a/src/game.cpp b/src/game.cpp index fdb083ff1..ab480c3db 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -1310,6 +1310,9 @@ void the_game( float damage_flash = 0; s16 farmesh_range = 20*MAP_BLOCKSIZE; + float jump_timer = 0; + bool reset_jump_timer = false; + const float object_hit_delay = 0.2; float object_hit_delay_timer = 0.0; float time_from_last_punch = 10; @@ -1592,6 +1595,10 @@ void the_game( // Input handler step() (used by the random input generator) input->step(dtime); + // Increase timer for doubleclick of "jump" + if(g_settings->getBool("doubletab_jump") && jump_timer <= 0.2) + jump_timer += dtime; + /* Launch menus and trigger stuff according to keys */ @@ -1681,6 +1688,27 @@ void the_game( statustext += L" (note: no 'fly' privilege)"; } } + else if(input->wasKeyDown(getKeySetting("keymap_jump"))) + { + if(g_settings->getBool("doubletab_jump") && jump_timer < 0.2) + { + if(g_settings->getBool("free_move")) + { + g_settings->set("free_move","false"); + statustext = L"free_move disabled"; + statustext_time = 0; + } + else + { + g_settings->set("free_move","true"); + statustext = L"free_move enabled"; + statustext_time = 0; + if(!client.checkPrivilege("fly")) + statustext += L" (note: no 'fly' privilege)"; + } + } + reset_jump_timer = true; + } else if(input->wasKeyDown(getKeySetting("keymap_fastmove"))) { if(g_settings->getBool("fast_move")) @@ -1843,6 +1871,13 @@ void the_game( statustext_time = 0; } + // Reset jump_timer + if(!input->isKeyDown(getKeySetting("keymap_jump")) && reset_jump_timer) + { + reset_jump_timer = false; + jump_timer = 0.0; + } + // Handle QuicktuneShortcutter if(input->wasKeyDown(getKeySetting("keymap_quicktune_next"))) quicktune.next(); diff --git a/src/guiKeyChangeMenu.cpp b/src/guiKeyChangeMenu.cpp index 8f7c7245c..336b13e07 100644 --- a/src/guiKeyChangeMenu.cpp +++ b/src/guiKeyChangeMenu.cpp @@ -57,6 +57,7 @@ enum GUI_ID_KEY_RANGE_BUTTON, // other GUI_ID_CB_AUX1_DESCENDS, + GUI_ID_CB_DOUBLETAB_JUMP, }; GUIKeyChangeMenu::GUIKeyChangeMenu(gui::IGUIEnvironment* env, @@ -149,6 +150,20 @@ void GUIKeyChangeMenu::regenerateGui(v2u32 screensize) Environment->addCheckBox(g_settings->getBool("aux1_descends"), rect, this, GUI_ID_CB_AUX1_DESCENDS, wgettext("\"Use\" = climb down")); } + offset += v2s32(0, 25); + } + + { + s32 option_x = offset.X + 10; + s32 option_y = offset.Y; + u32 option_w = 220; + { + core::rect<s32> rect(0, 0, option_w, 30); + rect += topleft + v2s32(option_x, option_y); + Environment->addCheckBox(g_settings->getBool("doubletab_jump"), rect, this, + GUI_ID_CB_DOUBLETAB_JUMP, wgettext("Doubltab \"jump\" to toogle fly")); + } + offset += v2s32(0, 25); } { @@ -197,6 +212,11 @@ bool GUIKeyChangeMenu::acceptInput() if(e != NULL && e->getType() == gui::EGUIET_CHECK_BOX) g_settings->setBool("aux1_descends", ((gui::IGUICheckBox*)e)->isChecked()); } + { + gui::IGUIElement *e = getElementFromId(GUI_ID_CB_DOUBLETAB_JUMP); + if(e != NULL && e->getType() == gui::EGUIET_CHECK_BOX) + g_settings->setBool("doubletab_jump", ((gui::IGUICheckBox*)e)->isChecked()); + } clearKeyCache(); return true; } |