]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/BattleState.cpp
removed pasting fail from ikari selection
[l2e.git] / src / battle / BattleState.cpp
index 3f28f5cc43e1f74a2f4b9d650a867d7b8aa63961..f548f2dfdc6968a59c4ce8a8dbd09ec50f24d1e0 100644 (file)
@@ -16,7 +16,6 @@
 #include "../common/Inventory.h"
 #include "../common/Item.h"
 #include "../common/Spell.h"
-#include "../geometry/operators.h"
 #include "../graphics/Frame.h"
 #include "../graphics/Sprite.h"
 
@@ -30,7 +29,6 @@ using app::Input;
 using common::Inventory;
 using common::Item;
 using common::Spell;
-using geometry::Point;
 using geometry::Vector;
 using graphics::Menu;
 
@@ -97,19 +95,19 @@ void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) {
        int tagHeight(attackTypeMenu.Height());
        int tagWidth(attackTypeMenu.Width() * 2 + attackTypeMenu.Width() / 2);
        int xOffset((Width() - 2 * tagWidth) / 2);
-       heroTagPositions[0] = Point<int>(xOffset, Height() - 2 * tagHeight);
-       heroTagPositions[1] = Point<int>(xOffset + tagWidth, Height() - 2 * tagHeight);
-       heroTagPositions[2] = Point<int>(xOffset, Height() - tagHeight);
-       heroTagPositions[3] = Point<int>(xOffset + tagWidth, Height() - tagHeight);
+       heroTagPositions[0] = Vector<int>(xOffset, Height() - 2 * tagHeight);
+       heroTagPositions[1] = Vector<int>(xOffset + tagWidth, Height() - 2 * tagHeight);
+       heroTagPositions[2] = Vector<int>(xOffset, Height() - tagHeight);
+       heroTagPositions[3] = Vector<int>(xOffset + tagWidth, Height() - tagHeight);
 
        tagHeight = res->normalFont->CharHeight() * 4 + res->smallHeroTagFrame->BorderHeight() * 2;
        tagWidth = res->normalFont->CharWidth() * 6 + res->smallHeroTagFrame->BorderWidth() * 2;
        xOffset = (Width() - 4 * tagWidth) / 2;
        int yOffset(Height() - tagHeight);
-       smallHeroTagPositions[0] = Point<int>(xOffset, yOffset);
-       smallHeroTagPositions[1] = Point<int>(xOffset + 2 * tagWidth, yOffset);
-       smallHeroTagPositions[2] = Point<int>(xOffset + tagWidth, yOffset);
-       smallHeroTagPositions[3] = Point<int>(xOffset + 3 * tagWidth, yOffset);
+       smallHeroTagPositions[0] = Vector<int>(xOffset, yOffset);
+       smallHeroTagPositions[1] = Vector<int>(xOffset + 2 * tagWidth, yOffset);
+       smallHeroTagPositions[2] = Vector<int>(xOffset + tagWidth, yOffset);
+       smallHeroTagPositions[3] = Vector<int>(xOffset + 3 * tagWidth, yOffset);
 
        itemMenu = res->itemMenuPrototype;
        LoadInventory();
@@ -232,83 +230,14 @@ void BattleState::CalculateDamage() {
        // TODO: this only evaluates SWORD type attacks
        if (CurrentAttack().isMonster) {
                const Stats &attackerStats(MonsterAt(CurrentAttack().index).GetStats());
-               if (ts.TargetsMonsters()) {
-                       for (int i(0); i < MaxMonsters(); ++i) {
-                               if (ts.IsSelected(i)) {
-                                       if (MonsterAt(i).Health() > 0) {
-                                               const Stats &defenderStats(MonsterAt(i).GetStats());
-                                               Uint16 damage(CalculateDamage(attackerStats, defenderStats));
-                                               ts.SetBad(i, damage);
-                                       } else {
-                                               ts.Unselect(i);
-                                       }
-                               }
-                       }
-               } else {
-                       for (int i(0); i < NumHeroes(); ++i) {
-                               if (ts.IsSelected(i)) {
-                                       if (HeroAt(i).Health() > 0) {
-                                               const Stats &defenderStats(HeroAt(i).GetStats());
-                                               Uint16 damage(CalculateDamage(attackerStats, defenderStats));
-                                               ts.SetBad(i, damage);
-                                       } else {
-                                               ts.Unselect(i);
-                                       }
-                               }
-                       }
-               }
+               CalculateDamage(attackerStats, ts);
        } else {
                const Stats &attackerStats(HeroAt(CurrentAttack().index).GetStats());
-               bool hitSome(false);
-               if (ts.TargetsMonsters()) {
-                       for (int i(0); i < MaxMonsters(); ++i) {
-                               if (ts.IsSelected(i)) {
-                                       if (MonsterAt(i).Health() > 0) {
-                                               const Stats &defenderStats(MonsterAt(i).GetStats());
-                                               Uint16 damage(CalculateDamage(attackerStats, defenderStats));
-                                               ts.SetBad(i, damage);
-                                               hitSome = true;
-                                       } else {
-                                               ts.Unselect(i);
-                                       }
-                               }
-                       }
-                       if (hitSome) return;
-                       for (int i(0); i < MaxMonsters(); ++i) {
-                               if (MonsterAt(i).Health() > 0) {
-                                       const Stats &defenderStats(MonsterAt(i).GetStats());
-                                       Uint16 damage(CalculateDamage(attackerStats, defenderStats));
-                                       ts.SetBad(i, damage);
-                                       break;
-                               }
-                       }
-               } else {
-                       for (int i(0); i < NumHeroes(); ++i) {
-                               if (ts.IsSelected(i)) {
-                                       if (HeroAt(i).Health() > 0) {
-                                               const Stats &defenderStats(HeroAt(i).GetStats());
-                                               Uint16 damage(CalculateDamage(attackerStats, defenderStats));
-                                               ts.SetBad(i, damage);
-                                               hitSome = true;
-                                       } else {
-                                               ts.Unselect(i);
-                                       }
-                               }
-                       }
-                       if (hitSome) return;
-                       for (int i(0); i < NumHeroes(); ++i) {
-                               if (HeroAt(i).Health() > 0) {
-                                       const Stats &defenderStats(HeroAt(i).GetStats());
-                                       Uint16 damage(CalculateDamage(attackerStats, defenderStats));
-                                       ts.SetBad(i, damage);
-                                       break;
-                               }
-                       }
-               }
+               CalculateDamage(attackerStats, ts);
        }
 }
 
-void BattleState::DecideMonsterAttack(Monster &m) {
+void BattleState::DecideMonsterAttack(Monster &m) const {
        AttackChoice &ac(m.GetAttackChoice());
        TargetSelection &ts(ac.Selection());
        ac.Reset();
@@ -323,6 +252,55 @@ void BattleState::DecideMonsterAttack(Monster &m) {
        ts.Select(target);
 }
 
+void BattleState::CalculateDamage(const Stats &attackerStats, TargetSelection &ts) const {
+       bool hitSome(false);
+       if (ts.TargetsMonsters()) {
+               for (int i(0); i < MaxMonsters(); ++i) {
+                       if (ts.IsSelected(i)) {
+                               if (MonsterAt(i).Health() > 0) {
+                                       const Stats &defenderStats(MonsterAt(i).GetStats());
+                                       Uint16 damage(CalculateDamage(attackerStats, defenderStats));
+                                       ts.SetBad(i, damage);
+                                       hitSome = true;
+                               } else {
+                                       ts.Unselect(i);
+                               }
+                       }
+               }
+               if (hitSome) return;
+               for (int i(0); i < MaxMonsters(); ++i) {
+                       if (MonsterAt(i).Health() > 0) {
+                               const Stats &defenderStats(MonsterAt(i).GetStats());
+                               Uint16 damage(CalculateDamage(attackerStats, defenderStats));
+                               ts.SetBad(i, damage);
+                               break;
+                       }
+               }
+       } else {
+               for (int i(0); i < NumHeroes(); ++i) {
+                       if (ts.IsSelected(i)) {
+                               if (HeroAt(i).Health() > 0) {
+                                       const Stats &defenderStats(HeroAt(i).GetStats());
+                                       Uint16 damage(CalculateDamage(attackerStats, defenderStats));
+                                       ts.SetBad(i, damage);
+                                       hitSome = true;
+                               } else {
+                                       ts.Unselect(i);
+                               }
+                       }
+               }
+               if (hitSome) return;
+               for (int i(0); i < NumHeroes(); ++i) {
+                       if (HeroAt(i).Health() > 0) {
+                               const Stats &defenderStats(HeroAt(i).GetStats());
+                               Uint16 damage(CalculateDamage(attackerStats, defenderStats));
+                               ts.SetBad(i, damage);
+                               break;
+                       }
+               }
+       }
+}
+
 Uint16 BattleState::CalculateDamage(const Stats &attacker, const Stats &defender) const {
        // TODO: find out real formula and add some randomness
        return attacker.Attack() / 2 - defender.Defense() / 4;