X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FTargetSelection.h;h=52b0d00bcb519bbc7d1819a31708261a1099ca5e;hb=087783315ac5955c17bb3b051c9351f321653df6;hp=664e9607e86caaf374f53d5f1f6d2a3151f59554;hpb=3c72a71fbf6de96333a641051a20c6bf8b3a5df3;p=l2e.git diff --git a/src/battle/TargetSelection.h b/src/battle/TargetSelection.h index 664e960..52b0d00 100644 --- a/src/battle/TargetSelection.h +++ b/src/battle/TargetSelection.h @@ -1,28 +1,28 @@ -/* - * TargetSelection.h - * - * Created on: Aug 9, 2012 - * Author: holy - */ - #ifndef BATTLE_TARGETSELECTION_H_ #define BATTLE_TARGETSELECTION_H_ +namespace battle { + class Battle; +} +namespace common { + class TargetingMode; +} + #include -namespace battle { -class BattleState; +namespace battle { class TargetSelection { public: - explicit TargetSelection(BattleState *battle = 0, bool multiple = false, bool atEnemy = true); + TargetSelection(); + explicit TargetSelection(Battle *battle, 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 +31,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 +51,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: - BattleState *battle; - std::vector selected; + 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) { } + }; + Battle *battle; + std::vector selected; int selection; int cursor; bool multiple; @@ -64,4 +87,4 @@ private: } -#endif /* BATTLE_TARGETSELECTION_H_ */ +#endif