X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FTargetSelection.h;h=64500b0b02aca225a117e2005d60f881f63fae11;hb=a01c2f05b5a6493d7fe097eb15e5337a095992ae;hp=664e9607e86caaf374f53d5f1f6d2a3151f59554;hpb=f89e79ad6fdc3009657e81f3dc3765d661f4899c;p=l2e.git diff --git a/src/battle/TargetSelection.h b/src/battle/TargetSelection.h index 664e960..64500b0 100644 --- a/src/battle/TargetSelection.h +++ b/src/battle/TargetSelection.h @@ -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 selected; + std::vector selected; int selection; int cursor; bool multiple;