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();
}
}
+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();
+}
+
}