]> git.localhorst.tv Git - l2e.git/blobdiff - src/menu/EquipMenu.cpp
implemented item equipping
[l2e.git] / src / menu / EquipMenu.cpp
index c60ea30a92795cb56fc85861b5ca95f03bd7f8ab..199b8e1265c7069a8d169118fb8ed05a4c438276 100644 (file)
@@ -148,7 +148,9 @@ void EquipMenu::HandleEvents(const Input &input) {
                        inventoryMenu.NextRow();
                }
                if (input.JustPressed(Input::ACTION_A)) {
-                       // TODO: equip selected item
+                       EquipSelected();
+                       inventoryMenu.SetInactive();
+                       equipmentMenu.SetActive();
                } else if (input.JustPressed(Input::ACTION_B)) {
                        inventoryMenu.SetInactive();
                        equipmentMenu.SetActive();
@@ -337,4 +339,30 @@ void EquipMenu::LoadInventory() {
        }
 }
 
+void EquipMenu::EquipSelected() {
+       Inventory &inv = parent->Game().state->inventory;
+       Hero &hero = GetHero();
+       const Hero::EquipSlot slot = Hero::EquipSlot(equipmentMenu.SelectedIndex());
+
+       const Item *selected = inventoryMenu.Selected();
+       const Item *equipped = equipmentMenu.Selected();
+
+       if (!hero.CanEquip(*selected)) {
+               // TODO: error noise and blur
+               return;
+       }
+
+       inv.Remove(selected, 1);
+       if (!inv.Add(equipped, 1)) {
+               // roll back
+               inv.Add(selected, 1);
+               // TODO: error noise, blur, message?
+               return;
+       }
+
+       hero.SetEquipment(slot, selected);
+       LoadEquipment();
+       LoadInventory();
+}
+
 }