]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/TargetSelection.cpp
removed invalid TODO :o
[l2e.git] / src / battle / TargetSelection.cpp
index c1aedf3ca7d8a253b05b368812801a8b3ce6cf67..5fbf78525d21d1318b636b5b63beb6f756c57c5c 100644 (file)
@@ -8,12 +8,13 @@
 #include "TargetSelection.h"
 
 #include "BattleState.h"
+#include "../common/TargetingMode.h"
 
 namespace battle {
 
 TargetSelection::TargetSelection(BattleState *battle, bool multiple, bool atEnemy)
 : battle(battle)
-, selected(battle ? ((int)battle->MonsterPositions().size() > battle->NumHeroes() ? (int)battle->MonsterPositions().size() : battle->NumHeroes()) : 0, false)
+, selected(battle ? (battle->MaxMonsters() > battle->NumHeroes() ? battle->MaxMonsters() : battle->NumHeroes()) : 0, State())
 , selection(-1)
 , cursor(0)
 , multiple(multiple)
@@ -23,6 +24,21 @@ TargetSelection::TargetSelection(BattleState *battle, bool multiple, bool atEnem
        }
 }
 
+
+void TargetSelection::ReadMode(const common::TargetingMode &tm) {
+       if (tm.TargetsEnemy()) {
+               SelectEnemies();
+       } else {
+               SelectHeroes();
+       }
+       if (tm.TargetsSingle()) {
+               SelectSingle();
+       } else if (tm.TargetsMultiple()) {
+               SelectMultiple();
+       }
+}
+
+
 void TargetSelection::SelectEnemies() {
        if (TargetsEnemies()) return;
        enemy = true;
@@ -59,9 +75,9 @@ void TargetSelection::MoveUp() {
 
 void TargetSelection::MoveRight() {
        if (TargetsEnemies()) {
-               cursor = (cursor + 1) % battle->MonsterPositions().size();
+               cursor = (cursor + 1) % battle->MaxMonsters();
                while (!battle->MonsterPositionOccupied(cursor)) {
-                       cursor = (cursor + 1) % battle->MonsterPositions().size();
+                       cursor = (cursor + 1) % battle->MaxMonsters();
                }
        } else {
                cursor = (cursor + 1) % battle->NumHeroes();
@@ -81,7 +97,7 @@ void TargetSelection::MoveDown() {
 
 void TargetSelection::MoveLeft() {
        if (TargetsEnemies()) {
-               cursor = (cursor + battle->MonsterPositions().size() - 1) % battle->MonsterPositions().size();
+               cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters();
                FindNextEnemy();
        } else {
                cursor = (cursor + battle->NumHeroes() - 1) % battle->NumHeroes();
@@ -89,8 +105,10 @@ void TargetSelection::MoveLeft() {
 }
 
 void TargetSelection::FindNextEnemy() {
+       int start(cursor);
        while (!battle->MonsterPositionOccupied(cursor)) {
-               cursor = (cursor + battle->MonsterPositions().size() - 1) % battle->MonsterPositions().size();
+               cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters();
+               if (cursor == start) break;
        }
 }