#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, State())
+, selected(battle ? (battle->MaxMonsters() > battle->NumHeroes() ? battle->MaxMonsters() : battle->NumHeroes()) : 0, State())
, selection(-1)
, cursor(0)
, multiple(multiple)
}
}
+
+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;
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();
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();
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;
}
}