]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/BattleState.cpp
damn, I was right about max IP in the first place
[l2e.git] / src / battle / BattleState.cpp
index c54fecaca88dd10acdb79ff16b597fe82a6d7cf5..3f734f84d8ce5bc868f15ad8ea041f2439fce99b 100644 (file)
@@ -11,6 +11,7 @@
 #include "states/SelectMoveAction.h"
 #include "../app/Application.h"
 #include "../app/Input.h"
+#include "../common/Ikari.h"
 #include "../common/Inventory.h"
 #include "../common/Item.h"
 #include "../common/Spell.h"
@@ -59,7 +60,7 @@ void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) {
                spellMenus.push_back(res->spellMenuPrototype);
                LoadSpellMenu(i);
                ikariMenus.push_back(res->ikariMenuPrototype);
-               // TODO: insert ikari menu entries
+               LoadIkariMenu(i);
                heroTags[i] = HeroTag(&heroes[i], attackChoices + i, res, HeroTag::Alignment((i + 1) % 2));
        }
 
@@ -71,7 +72,6 @@ void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) {
        heroTagPositions[2] = Point<int>(xOffset, BackgroundHeight() - tagHeight);
        heroTagPositions[3] = Point<int>(xOffset + tagWidth, BackgroundHeight() - tagHeight);
 
-       // TODO: insert item menu entries
        itemMenu = res->itemMenuPrototype;
        LoadInventory();
 }
@@ -85,6 +85,83 @@ void BattleState::LoadSpellMenu(vector<Hero>::size_type index) {
        }
 }
 
+void BattleState::LoadIkariMenu(vector<Hero>::size_type index) {
+       ikariMenus[index].Clear();
+       ikariMenus[index].Reserve(6);
+
+       if (HeroAt(index).HasWeapon()) {
+               ikariMenus[index].Add(
+                               HeroAt(index).Weapon()->Name(),
+                               HeroAt(index).Weapon(),
+                               HeroAt(index).Weapon()->HasIkari() && HeroAt(index).Weapon()->GetIkari()->Cost() <= HeroAt(index).IP(),
+                               res->weaponMenuIcon,
+                               0,
+                               HeroAt(index).Weapon()->HasIkari() ? HeroAt(index).Weapon()->GetIkari()->Name() : "");
+       } else {
+               ikariMenus[index].Add(res->noEquipmentText, 0, false, res->weaponMenuIcon);
+       }
+
+       if (HeroAt(index).HasArmor()) {
+               ikariMenus[index].Add(
+                               HeroAt(index).Armor()->Name(),
+                               HeroAt(index).Armor(),
+                               HeroAt(index).Armor()->HasIkari() && HeroAt(index).Armor()->GetIkari()->Cost() <= HeroAt(index).IP(),
+                               res->armorMenuIcon,
+                               0,
+                               HeroAt(index).Armor()->HasIkari() ? HeroAt(index).Armor()->GetIkari()->Name() : "");
+       } else {
+               ikariMenus[index].Add(res->noEquipmentText, 0, false, res->armorMenuIcon);
+       }
+
+       if (HeroAt(index).HasShield()) {
+               ikariMenus[index].Add(
+                               HeroAt(index).Shield()->Name(),
+                               HeroAt(index).Shield(),
+                               HeroAt(index).Shield()->HasIkari() && HeroAt(index).Shield()->GetIkari()->Cost() <= HeroAt(index).IP(),
+                               res->shieldMenuIcon,
+                               0,
+                               HeroAt(index).Shield()->HasIkari() ? HeroAt(index).Shield()->GetIkari()->Name() : "");
+       } else {
+               ikariMenus[index].Add(res->noEquipmentText, 0, false, res->shieldMenuIcon);
+       }
+
+       if (HeroAt(index).HasHelmet()) {
+               ikariMenus[index].Add(
+                               HeroAt(index).Helmet()->Name(),
+                               HeroAt(index).Helmet(),
+                               HeroAt(index).Helmet()->HasIkari() && HeroAt(index).Helmet()->GetIkari()->Cost() <= HeroAt(index).IP(),
+                               res->helmetMenuIcon,
+                               0,
+                               HeroAt(index).Helmet()->HasIkari() ? HeroAt(index).Helmet()->GetIkari()->Name() : "");
+       } else {
+               ikariMenus[index].Add(res->noEquipmentText, 0, false, res->helmetMenuIcon);
+       }
+
+       if (HeroAt(index).HasRing()) {
+               ikariMenus[index].Add(
+                               HeroAt(index).Ring()->Name(),
+                               HeroAt(index).Ring(),
+                               HeroAt(index).Ring()->HasIkari() && HeroAt(index).Ring()->GetIkari()->Cost() <= HeroAt(index).IP(),
+                               res->ringMenuIcon,
+                               0,
+                               HeroAt(index).Ring()->HasIkari() ? HeroAt(index).Ring()->GetIkari()->Name() : "");
+       } else {
+               ikariMenus[index].Add(res->noEquipmentText, 0, false, res->ringMenuIcon);
+       }
+
+       if (HeroAt(index).HasJewel()) {
+               ikariMenus[index].Add(
+                               HeroAt(index).Jewel()->Name(),
+                               HeroAt(index).Jewel(),
+                               HeroAt(index).Jewel()->HasIkari() && HeroAt(index).Jewel()->GetIkari()->Cost() <= HeroAt(index).IP(),
+                               res->jewelMenuIcon,
+                               0,
+                               HeroAt(index).Jewel()->HasIkari() ? HeroAt(index).Jewel()->GetIkari()->Name() : "");
+       } else {
+               ikariMenus[index].Add(res->noEquipmentText, 0, false, res->jewelMenuIcon);
+       }
+}
+
 void BattleState::LoadInventory() {
        const Inventory &inv(*res->inventory);
        itemMenu.Clear();