]> git.localhorst.tv Git - l2e.git/blob - src/battle/TargetSelection.cpp
moved monster's position to Monster
[l2e.git] / src / battle / TargetSelection.cpp
1 /*
2  * TargetSelection.cpp
3  *
4  *  Created on: Aug 9, 2012
5  *      Author: holy
6  */
7
8 #include "TargetSelection.h"
9
10 #include "BattleState.h"
11
12 namespace battle {
13
14 TargetSelection::TargetSelection(BattleState *battle, bool multiple, bool atEnemy)
15 : battle(battle)
16 , selected(battle ? (battle->MaxMonsters() > battle->NumHeroes() ? battle->MaxMonsters() : battle->NumHeroes()) : 0, State())
17 , selection(-1)
18 , cursor(0)
19 , multiple(multiple)
20 , enemy(atEnemy) {
21         if (battle && enemy) {
22                 FindNextEnemy();
23         }
24 }
25
26 void TargetSelection::SelectEnemies() {
27         if (TargetsEnemies()) return;
28         enemy = true;
29         UnselectAll();
30         cursor = 0;
31         FindNextEnemy();
32 }
33
34 void TargetSelection::SelectHeroes() {
35         if (TargetsHeroes()) return;
36         enemy = false;
37         UnselectAll();
38         cursor = 0;
39 }
40
41
42 void TargetSelection::Reset() {
43         UnselectAll();
44         cursor = 0;
45         if (TargetsEnemies()) {
46                 FindNextEnemy();
47         }
48 }
49
50
51 void TargetSelection::MoveUp() {
52         if (TargetsEnemies()) return;
53         if (cursor < 2) {
54                 SelectEnemies();
55         } else {
56                 cursor -= 2;
57         }
58 }
59
60 void TargetSelection::MoveRight() {
61         if (TargetsEnemies()) {
62                 cursor = (cursor + 1) % battle->MaxMonsters();
63                 while (!battle->MonsterPositionOccupied(cursor)) {
64                         cursor = (cursor + 1) % battle->MaxMonsters();
65                 }
66         } else {
67                 cursor = (cursor + 1) % battle->NumHeroes();
68         }
69 }
70
71 void TargetSelection::MoveDown() {
72         if (TargetsEnemies()) {
73                 SelectHeroes();
74                 return;
75         }
76         int newCursor((cursor + 2) % 4);
77         if (newCursor < battle->NumHeroes()) {
78                 cursor = newCursor;
79         }
80 }
81
82 void TargetSelection::MoveLeft() {
83         if (TargetsEnemies()) {
84                 cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters();
85                 FindNextEnemy();
86         } else {
87                 cursor = (cursor + battle->NumHeroes() - 1) % battle->NumHeroes();
88         }
89 }
90
91 void TargetSelection::FindNextEnemy() {
92         int start(cursor);
93         while (!battle->MonsterPositionOccupied(cursor)) {
94                 cursor = (cursor + battle->MaxMonsters() - 1) % battle->MaxMonsters();
95                 if (cursor == start) break;
96         }
97 }
98
99 }