]> git.localhorst.tv Git - l2e.git/commitdiff
implemented item equipping
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 27 Nov 2012 12:50:36 +0000 (13:50 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Tue, 27 Nov 2012 12:50:36 +0000 (13:50 +0100)
src/battle/Hero.h
src/common/Hero.h
src/menu/EquipMenu.cpp
src/menu/EquipMenu.h

index 1ec41406a6bb17347fc8228f423c6e7e215bca9e..5e86f88dae783da4f8dbaf47d1666e32568fb82c 100644 (file)
@@ -54,13 +54,6 @@ public:
        common::Stats &GetStats() { return stats; }
        const common::Stats &GetStats() const { return stats; }
 
-       common::Item *Weapon() { return master->Equipment(common::Hero::EQUIP_WEAPON); }
-       common::Item *Armor() { return master->Equipment(common::Hero::EQUIP_ARMOR); }
-       common::Item *Shield() { return master->Equipment(common::Hero::EQUIP_SHIELD); }
-       common::Item *Helmet() { return master->Equipment(common::Hero::EQUIP_HELMET); }
-       common::Item *Ring() { return master->Equipment(common::Hero::EQUIP_RING); }
-       common::Item *Jewel() { return master->Equipment(common::Hero::EQUIP_JEWEL); }
-
        const common::Item *Weapon() const { return master->Equipment(common::Hero::EQUIP_WEAPON); }
        const common::Item *Armor() const { return master->Equipment(common::Hero::EQUIP_ARMOR); }
        const common::Item *Shield() const { return master->Equipment(common::Hero::EQUIP_SHIELD); }
index f61d0ee95507b5ae009e25ea31ccd28d3469de63..00924d400ef7eaf3f2fca291d80c695132141076 100644 (file)
@@ -63,11 +63,10 @@ public:
        bool CanEquip(const Item &) const;
        bool CanInvoke(const Spell &) const;
 
-       Item *Equipment(EquipSlot i) { return equipment[i]; }
        const Item *Equipment(EquipSlot i) const { return equipment[i]; }
        bool Equipped(EquipSlot i) const { return equipment[i]; }
        void RemoveEquipment(EquipSlot i) { equipment[i] = 0; }
-       void SetEquipment(EquipSlot i, Item *item) { equipment[i] = item; }
+       void SetEquipment(EquipSlot i, const Item *item) { equipment[i] = item; }
 
        std::vector<const Spell *> &Spells() { return spells; }
        const std::vector<const Spell *> &Spells() const { return spells; }
@@ -105,7 +104,7 @@ private:
 
        int useMask;
 
-       Item *equipment[EQUIP_COUNT];
+       const Item *equipment[EQUIP_COUNT];
 
        // TODO: vector does not seem to be a good choice
        std::vector<const Spell *> spells;
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();
+}
+
 }
index 24e9789fef182d35b84f898d055ea82767ec5be6..f8e9e78361a0f7e54914273aa5d41bd43b0cb057 100644 (file)
@@ -52,6 +52,7 @@ private:
 
        bool InventoryVisible() const;
        void LoadInventory();
+       void EquipSelected();
 
        void RenderStatus(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
        void RenderStats(SDL_Surface *screen, const geometry::Vector<int> &offset) const;