X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fbattle%2FBattleState.h;h=1c994e4f88a664c2d572173fd79c156d1daf0687;hb=67f6bb1d9727e7d1e2140cf2913aa89ebba84bf5;hp=60c24bc87aef33faf4537d961d82ea8cf05bc199;hpb=0ad5ca97b5df217329bc319d62564a9f46ba11d7;p=l2e.git diff --git a/src/battle/BattleState.h b/src/battle/BattleState.h index 60c24bc..1c994e4 100644 --- a/src/battle/BattleState.h +++ b/src/battle/BattleState.h @@ -1,15 +1,9 @@ -/* - * BattleState.h - * - * Created on: Aug 5, 2012 - * Author: holy - */ - #ifndef BATTLE_BATTLESTATE_H_ #define BATTLE_BATTLESTATE_H_ #include "fwd.h" #include "AttackTypeMenu.h" +#include "Capsule.h" #include "Hero.h" #include "HeroTag.h" #include "Monster.h" @@ -54,15 +48,9 @@ public: public: void AddMonster(const Monster &); void AddHero(const Hero &); + void SetCapsule(const Capsule &); public: - virtual void EnterState(app::Application &ctrl, SDL_Surface *screen); - virtual void ExitState(app::Application &ctrl, SDL_Surface *screen); - virtual void ResumeState(app::Application &ctrl, SDL_Surface *screen); - virtual void PauseState(app::Application &ctrl, SDL_Surface *screen); - - virtual void Resize(int width, int height); - virtual void HandleEvents(const app::Input &); virtual void UpdateWorld(float deltaT); virtual void Render(SDL_Surface *); @@ -90,6 +78,8 @@ public: const HeroTag &HeroTagAt(int index) const { assert(index >= 0 && index < NumHeroes()); return heroTags[index]; } const geometry::Vector &HeroTagPositionAt(int index) const { assert(index >= 0 && index < NumHeroes()); return heroTagPositions[index]; } + Capsule &GetCapsule() { return capsule; } + bool HasChosenAttackType() const { return ActiveHero().GetAttackChoice().GetType() != AttackChoice::UNDECIDED; } bool AttackSelectionDone() const { return activeHero >= numHeroes; } @@ -103,10 +93,20 @@ public: void SetRunaway() { ranAway = true; } struct Order { - Order(int index, bool isMonster) - : index(index), isMonster(isMonster) { } + enum Performer { + HERO, + CAPSULE, + MONSTER, + }; + Order(Performer by, int index = 0) + : index(index), by(by) { } + AttackChoice &GetAttackChoice(BattleState &) const; + common::Stats &GetStats(BattleState &) const; + bool IsHero() const { return by == HERO; } + bool IsCapsule() const { return by == CAPSULE; } + bool IsMonster() const { return by == MONSTER; } int index; - bool isMonster; + Performer by; }; void CalculateAttackOrder(); @@ -134,13 +134,23 @@ public: void RenderBackground(SDL_Surface *screen, const geometry::Vector &offset); void RenderMonsters(SDL_Surface *screen, const geometry::Vector &offset); void RenderHeroes(SDL_Surface *screen, const geometry::Vector &offset); + void RenderCapsule(SDL_Surface *screen, const geometry::Vector &offset); void RenderHeroTags(SDL_Surface *screen, const geometry::Vector &offset); void RenderSmallHeroTags(SDL_Surface *screen, const geometry::Vector &offset); +private: + virtual void OnEnterState(SDL_Surface *screen); + virtual void OnExitState(SDL_Surface *screen); + virtual void OnResumeState(SDL_Surface *screen); + virtual void OnPauseState(SDL_Surface *screen); + + virtual void OnResize(int width, int height); + private: void LoadInventory(); - void DecideMonsterAttack(Monster &) const; + void DecideMonsterAttack(Monster &); + void DecideCapsuleAttack(); void CalculateDamage(const common::Stats &attackerStats, TargetSelection &targets) const; Uint16 CalculateDamage(const common::Stats &attacker, const common::Stats &defender) const; @@ -160,6 +170,7 @@ private: SmallHeroTag smallHeroTags[4]; geometry::Vector heroTagPositions[4]; geometry::Vector smallHeroTagPositions[4]; + Capsule capsule; int numHeroes; int activeHero; int attackCursor;