]> git.localhorst.tv Git - l2e.git/blob - src/battle/TargetSelection.cpp
removed stupid file headers that eclipse put in
[l2e.git] / src / battle / TargetSelection.cpp
1 #include "TargetSelection.h"
2
3 #include "BattleState.h"
4 #include "../common/TargetingMode.h"
5
6 namespace battle {
7
8 TargetSelection::TargetSelection(BattleState *battle, bool multiple, bool atEnemy)
9 : battle(battle)
10 , selected(battle ? (battle->MaxMonsters() > battle->NumHeroes() ? battle->MaxMonsters() : battle->NumHeroes()) : 0, State())
11 , selection(-1)
12 , cursor(0)
13 , multiple(multiple)
14 , enemy(atEnemy) {
15         if (battle && enemy) {
16                 FindNextEnemy();
17         }
18 }
19
20
21 void TargetSelection::ReadMode(const common::TargetingMode &tm) {
22         if (tm.TargetsEnemy()) {
23                 SelectMonsters();
24         } else {
25                 SelectHeroes();
26         }
27         if (tm.TargetsSingle()) {
28                 SelectSingle();
29         } else if (tm.TargetsMultiple()) {
30                 SelectMultiple();
31         }
32 }
33
34
35 void TargetSelection::SelectMonsters() {
36         if (TargetsMonsters()) return;
37         enemy = true;
38         UnselectAll();
39         cursor = 0;
40         FindNextEnemy();
41 }
42
43 void TargetSelection::SelectHeroes() {
44         if (TargetsHeroes()) return;
45         enemy = false;
46         UnselectAll();
47         cursor = 0;
48 }
49
50
51 void TargetSelection::Reset() {
52         UnselectAll();
53         cursor = 0;
54         if (TargetsMonsters()) {
55                 FindNextEnemy();
56         }
57 }
58
59
60 void TargetSelection::MoveUp() {
61         if (TargetsMonsters()) return;
62         if (cursor < 2) {
63                 SelectMonsters();
64         } else {
65                 cursor -= 2;
66         }
67 }
68
69 void TargetSelection::MoveRight() {
70         if (TargetsMonsters()) {
71                 cursor = (cursor + 1) % battle->MaxMonsters();
72                 while (!battle->MonsterPositionOccupied(cursor)) {
73                         cursor = (cursor + 1) % battle->MaxMonsters();
74                 }
75         } else {
76                 cursor = (cursor + 1) % battle->NumHeroes();
77         }
78 }
79
80 void TargetSelection::MoveDown() {
81         if (TargetsMonsters()) {
82                 SelectHeroes();
83                 return;
84         }
85         int newCursor((cursor + 2) % 4);
86         if (newCursor < battle->NumHeroes()) {
87                 cursor = newCursor;
88         }
89 }
90
91 void TargetSelection::MoveLeft() {
92         if (TargetsMonsters()) {
93                 cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters();
94                 FindNextEnemy();
95         } else {
96                 cursor = (cursor + battle->NumHeroes() - 1) % battle->NumHeroes();
97         }
98 }
99
100 void TargetSelection::FindNextEnemy() {
101         int start(cursor);
102         while (!battle->MonsterPositionOccupied(cursor)) {
103                 cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters();
104                 if (cursor == start) break;
105         }
106 }
107
108 }