X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FTargetSelection.cpp;h=5fbf78525d21d1318b636b5b63beb6f756c57c5c;hb=b53c2ec2621ccc654e819cb203dc26e0a482bd41;hp=85639074fd3f5ba998fcbd7ede41a625574b3ef2;hpb=3c72a71fbf6de96333a641051a20c6bf8b3a5df3;p=l2e.git diff --git a/src/battle/TargetSelection.cpp b/src/battle/TargetSelection.cpp index 8563907..5fbf785 100644 --- a/src/battle/TargetSelection.cpp +++ b/src/battle/TargetSelection.cpp @@ -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 ? (battle->MonsterPositions().size() > battle->Heroes().size() ? battle->MonsterPositions().size() : battle->Heroes().size()) : 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,12 +75,12 @@ 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->Heroes().size(); + cursor = (cursor + 1) % battle->NumHeroes(); } } @@ -73,24 +89,26 @@ void TargetSelection::MoveDown() { SelectHeroes(); return; } - int newCursor(cursor + 2 % 4); - if (newCursor < int(battle->Heroes().size())) { + 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(); + cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters(); FindNextEnemy(); } else { - cursor = (cursor + battle->Heroes().size() - 1) % battle->Heroes().size(); + 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; } }