]> git.localhorst.tv Git - l2e.git/blobdiff - src/battle/TargetSelection.h
moved attack order to battle state
[l2e.git] / src / battle / TargetSelection.h
index 664e9607e86caaf374f53d5f1f6d2a3151f59554..64500b0b02aca225a117e2005d60f881f63fae11 100644 (file)
@@ -22,7 +22,7 @@ public:
 public:
        bool TargetsEnemies() const { return enemy; }
        bool TargetsHeroes() const { return !TargetsEnemies(); }
-       bool IsSelected(int index) const { return index >= 0 && index < int(selected.size()) && selected[index]; }
+       bool IsSelected(int index) const { return index >= 0 && index < int(selected.size()) && selected[index].type != State::IGNORE; }
        bool HasSelected() const { return selection >= 0; }
        int SingleSelection() const { return selection; }
 
@@ -33,12 +33,12 @@ public:
 
        void SelectEnemies();
        void SelectHeroes();
-       void Select(int index) { selected[index] = true; selection = index; }
-       void Unselect(int index) { selected[index] = false; }
-       void UnselectAll() { selected.assign(selected.size(), false); selection = -1; }
+       void Select(int index) { selected[index].type = State::SELECTED; selection = index; }
+       void Unselect(int index) { selected[index].type = State::IGNORE; }
+       void UnselectAll() { selected.assign(selected.size(), State()); selection = -1; }
 
        void Reset();
-       void Resize(int num) { selected.resize(num, false); }
+       void Resize(int num) { selected.resize(num); }
 
        void MoveUp();
        void MoveRight();
@@ -49,12 +49,30 @@ public:
        int Current() const { return cursor; }
        bool CurrentIsSelected() { return IsSelected(cursor); }
 
+       void SetMiss(int index) { selected[index].type = State::MISS; }
+       void SetFull(int index) { selected[index].type = State::FULL; }
+       void SetGood(int index, int amount) { selected[index].type = State::GOOD; selected[index].number = amount; }
+       void SetBad(int index, int amount) { selected[index].type = State::BAD; selected[index].number = amount; }
+       int GetAmount(int index) const { return selected[index].number; }
+
 private:
        void FindNextEnemy();
 
 private:
+       struct State {
+               enum Type {
+                       IGNORE,
+                       SELECTED,
+                       MISS,
+                       FULL,
+                       GOOD,
+                       BAD,
+               } type;
+               int number;
+               explicit State(Type type = IGNORE, int num = 0) : type(type), number(num) { }
+       };
        BattleState *battle;
-       std::vector<bool> selected;
+       std::vector<State> selected;
        int selection;
        int cursor;
        bool multiple;