X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FTargetSelection.cpp;h=573200a799c1caf96e3819f47850e5eb67fd4a29;hb=HEAD;hp=c5573862bb0207fc14e9a18aab4ae6a2a592657f;hpb=adb1e3d5eafba2ef3de1499be286be330afaefef;p=l2e.git diff --git a/src/battle/TargetSelection.cpp b/src/battle/TargetSelection.cpp index c557386..573200a 100644 --- a/src/battle/TargetSelection.cpp +++ b/src/battle/TargetSelection.cpp @@ -1,30 +1,52 @@ -/* - * TargetSelection.cpp - * - * Created on: Aug 9, 2012 - * Author: holy - */ - #include "TargetSelection.h" -#include "BattleState.h" +#include "Battle.h" +#include "../common/TargetingMode.h" + +#include + namespace battle { -TargetSelection::TargetSelection(BattleState *battle, bool multiple, bool atEnemy) +TargetSelection::TargetSelection() +: battle(0) +, selected() +, selection(-1) +, cursor(0) +, multiple(false) +, enemy(true) { + +} + +TargetSelection::TargetSelection(Battle *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->MaxMonsters() > battle->NumHeroes() ? battle->MaxMonsters() : battle->NumHeroes(), State()) , selection(-1) , cursor(0) , multiple(multiple) , enemy(atEnemy) { - if (battle && enemy) { + if (enemy) { FindNextEnemy(); } } -void TargetSelection::SelectEnemies() { - if (TargetsEnemies()) return; + +void TargetSelection::ReadMode(const common::TargetingMode &tm) { + if (tm.TargetsEnemy()) { + SelectMonsters(); + } else { + SelectHeroes(); + } + if (tm.TargetsSingle()) { + SelectSingle(); + } else if (tm.TargetsMultiple()) { + SelectMultiple(); + } +} + + +void TargetSelection::SelectMonsters() { + if (TargetsMonsters()) return; enemy = true; UnselectAll(); cursor = 0; @@ -42,26 +64,27 @@ void TargetSelection::SelectHeroes() { void TargetSelection::Reset() { UnselectAll(); cursor = 0; - if (TargetsEnemies()) { + if (TargetsMonsters()) { FindNextEnemy(); } } void TargetSelection::MoveUp() { - if (TargetsEnemies()) return; + if (TargetsMonsters()) return; if (cursor < 2) { - SelectEnemies(); + SelectMonsters(); } else { cursor -= 2; } } void TargetSelection::MoveRight() { - if (TargetsEnemies()) { - cursor = (cursor + 1) % battle->MonsterPositions().size(); + assert(battle); + if (TargetsMonsters()) { + 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(); @@ -69,19 +92,21 @@ void TargetSelection::MoveRight() { } void TargetSelection::MoveDown() { - if (TargetsEnemies()) { + assert(battle); + if (TargetsMonsters()) { SelectHeroes(); return; } - int newCursor(cursor + 2 % 4); + int newCursor((cursor + 2) % 4); if (newCursor < battle->NumHeroes()) { cursor = newCursor; } } void TargetSelection::MoveLeft() { - if (TargetsEnemies()) { - cursor = (cursor + battle->MonsterPositions().size() - 1) % battle->MonsterPositions().size(); + assert(battle); + if (TargetsMonsters()) { + cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters(); FindNextEnemy(); } else { cursor = (cursor + battle->NumHeroes() - 1) % battle->NumHeroes(); @@ -89,8 +114,11 @@ void TargetSelection::MoveLeft() { } void TargetSelection::FindNextEnemy() { + assert(battle); + 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; } }