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