]> git.lizzy.rs Git - minetest.git/commitdiff
Add keybind to swap items between hands dual_wielding
authorElias Fleckenstein <eliasfleckenstein@web.de>
Sat, 23 Jul 2022 23:05:31 +0000 (01:05 +0200)
committerLizzy Fleckenstein <eliasfleckenstein@web.de>
Tue, 7 Mar 2023 17:18:19 +0000 (18:18 +0100)
builtin/settingtypes.txt
src/client/game.cpp
src/client/inputhandler.cpp
src/client/keys.h
src/defaultsettings.cpp
src/gui/guiKeyChangeMenu.cpp

index 41ebcc6c817d0b67e7828442f6485dc0b5c922cc..83272fd291743b5e42a8e02fc9d24fc54e9bd0b3 100644 (file)
@@ -2210,6 +2210,10 @@ keymap_screenshot (Screenshot) key KEY_F12
 #    Key for dropping the currently selected item.
 keymap_drop (Drop item key) key KEY_KEY_Q
 
+#    Key for swapping items between main hand and offhand.
+#    See http://irrlicht.sourceforge.net/docu/namespaceirr.html#a54da2a0e231901735e3da1b0edf72eb3
+keymap_swap_offhand (Swap hand items) key KEY_KEY_F
+
 #    Key to use view zoom when possible.
 keymap_zoom (View zoom key) key KEY_KEY_Z
 
index e31db44a831768ee47532ca630c060ff274cfe55..3edde34c6e8416066b915e9dfed959de39afd76b 100644 (file)
@@ -794,6 +794,7 @@ class Game {
        void processItemSelection(u16 *new_playeritem);
 
        void dropSelectedItem(bool single_item = false);
+       void swapOffhand();
        void openInventory();
        void openConsole(float scale, const wchar_t *line=NULL);
        void toggleFreeMove();
@@ -2023,6 +2024,8 @@ void Game::processKeyInput()
 {
        if (wasKeyDown(KeyType::DROP)) {
                dropSelectedItem(isKeyDown(KeyType::SNEAK));
+       } else if (wasKeyDown(KeyType::SWAP_OFFHAND)) {
+               swapOffhand();
        } else if (wasKeyDown(KeyType::AUTOFORWARD)) {
                toggleAutoforward();
        } else if (wasKeyDown(KeyType::BACKWARD)) {
@@ -2191,6 +2194,34 @@ void Game::dropSelectedItem(bool single_item)
 }
 
 
+void Game::swapOffhand()
+{
+
+       IMoveAction *a = new IMoveAction();
+       a->count = 0;
+       a->from_inv.setCurrentPlayer();
+       a->from_list = "main";
+       a->from_i = client->getEnv().getLocalPlayer()->getWieldIndex();
+       a->to_inv.setCurrentPlayer();
+       a->to_list = "offhand";
+       a->to_i = 0;
+
+       ItemStack selected;
+       client->getEnv().getLocalPlayer()->getWieldedItem(&selected, nullptr);
+
+       if (selected.name == "") {
+               auto tmp_list = a->from_list;
+               auto tmp_i = a->from_i;
+               a->from_list = a->to_list;
+               a->from_i = a->to_i;
+               a->to_list = tmp_list;
+               a->to_i = tmp_i;
+       }
+
+       client->inventoryAction(a);
+}
+
+
 void Game::openInventory()
 {
        /*
@@ -4383,6 +4414,7 @@ void Game::showPauseMenu()
                "- %s: place/use\n"
                "- %s: sneak/climb down\n"
                "- %s: drop item\n"
+               "- %s: swap hand items\n"
                "- %s: inventory\n"
                "- Mouse: turn/look\n"
                "- Mouse wheel: select item\n"
@@ -4401,6 +4433,7 @@ void Game::showPauseMenu()
                GET_KEY_NAME(keymap_place),
                GET_KEY_NAME(keymap_sneak),
                GET_KEY_NAME(keymap_drop),
+               GET_KEY_NAME(keymap_swap_offhand),
                GET_KEY_NAME(keymap_inventory),
                GET_KEY_NAME(keymap_chat)
        );
index a6ba87e8d2b8526b28eab4e2bd07f3a4868ed09e..681931248548cec852f1fb40c2411729c56b0b8d 100644 (file)
@@ -43,6 +43,7 @@ void KeyCache::populate()
        key[KeyType::AUTOFORWARD] = getKeySetting("keymap_autoforward");
 
        key[KeyType::DROP] = getKeySetting("keymap_drop");
+       key[KeyType::SWAP_OFFHAND] = getKeySetting("keymap_swap_offhand");
        key[KeyType::INVENTORY] = getKeySetting("keymap_inventory");
        key[KeyType::CHAT] = getKeySetting("keymap_chat");
        key[KeyType::CMD] = getKeySetting("keymap_cmd");
index e120a2d927c49ba6d35849d305590aa70edfb288..989eb528c7084accb1934c75280a5dbf9cab9a67 100644 (file)
@@ -42,6 +42,7 @@ class KeyType
 
                // Other
                DROP,
+               SWAP_OFFHAND,
                INVENTORY,
                CHAT,
                CMD,
index 1dd4e257539da82a50880dec2acec964a5060a78..f06372d9c6e5d77399adde8790173646e600098f 100644 (file)
@@ -80,6 +80,7 @@ void set_default_settings()
        settings->setDefault("keymap_dig", "KEY_LBUTTON");
        settings->setDefault("keymap_place", "KEY_RBUTTON");
        settings->setDefault("keymap_drop", "KEY_KEY_Q");
+       settings->setDefault("keymap_swap_offhand", "KEY_KEY_F");
        settings->setDefault("keymap_zoom", "KEY_KEY_Z");
        settings->setDefault("keymap_inventory", "KEY_KEY_I");
        settings->setDefault("keymap_aux1", "KEY_KEY_E");
index 021f5f0a9cf5b5422f0357bf5b8ae336a774d40a..ab2811743f63d9391aab88ddd4f6f0b4a6ce8fc1 100644 (file)
@@ -58,6 +58,7 @@ enum
        GUI_ID_KEY_CONSOLE_BUTTON,
        GUI_ID_KEY_SNEAK_BUTTON,
        GUI_ID_KEY_DROP_BUTTON,
+       GUI_ID_KEY_SWAP_OFFHAND_BUTTON,
        GUI_ID_KEY_INVENTORY_BUTTON,
        GUI_ID_KEY_HOTBAR_PREV_BUTTON,
        GUI_ID_KEY_HOTBAR_NEXT_BUTTON,
@@ -409,6 +410,7 @@ void GUIKeyChangeMenu::init_keys()
        this->add_key(GUI_ID_KEY_JUMP_BUTTON,         wgettext("Jump"),             "keymap_jump");
        this->add_key(GUI_ID_KEY_SNEAK_BUTTON,        wgettext("Sneak"),            "keymap_sneak");
        this->add_key(GUI_ID_KEY_DROP_BUTTON,         wgettext("Drop"),             "keymap_drop");
+       this->add_key(GUI_ID_KEY_SWAP_OFFHAND_BUTTON, wgettext("Swap hand items"),  "keymap_swap_offhand");
        this->add_key(GUI_ID_KEY_INVENTORY_BUTTON,    wgettext("Inventory"),        "keymap_inventory");
        this->add_key(GUI_ID_KEY_HOTBAR_PREV_BUTTON,  wgettext("Prev. item"),       "keymap_hotbar_previous");
        this->add_key(GUI_ID_KEY_HOTBAR_NEXT_BUTTON,  wgettext("Next item"),        "keymap_hotbar_next");