X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FTargetSelection.h;h=fd1d041c90fe604ea01b229be51036353a21da7d;hb=520af5a8ef4fdfd4156377d4fccd93eecd450f0f;hp=664e9607e86caaf374f53d5f1f6d2a3151f59554;hpb=3c72a71fbf6de96333a641051a20c6bf8b3a5df3;p=l2e.git diff --git a/src/battle/TargetSelection.h b/src/battle/TargetSelection.h index 664e960..fd1d041 100644 --- a/src/battle/TargetSelection.h +++ b/src/battle/TargetSelection.h @@ -10,6 +10,8 @@ #include +namespace common { class TargetingMode; } + namespace battle { class BattleState; @@ -20,9 +22,9 @@ public: explicit TargetSelection(BattleState *battle = 0, bool multiple = false, bool atEnemy = true); 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 TargetsMonsters() const { return enemy; } + bool TargetsHeroes() const { return !TargetsMonsters(); } + 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; } @@ -31,14 +33,16 @@ public: bool SelectSingle() const { return !SelectMultiple(); } void SetSingle() { multiple = false; } - void SelectEnemies(); + void ReadMode(const common::TargetingMode &); + + void SelectMonsters(); 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 +53,33 @@ 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; } + bool Missed(int index) const { return selected[index].type == State::MISS; } + bool IsGood(int index) const { return selected[index].type == State::GOOD; } + bool IsBad(int index) const { return selected[index].type == State::BAD; } + 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;