-/*
- * BattleState.cpp
- *
- * Created on: Aug 5, 2012
- * Author: holy
- */
-
#include "BattleState.h"
#include "PartyLayout.h"
#include "states/PerformAttacks.h"
#include "../app/Application.h"
#include "../app/Input.h"
+#include "../common/GameState.h"
#include "../common/Ikari.h"
#include "../common/Inventory.h"
#include "../common/Item.h"
++numHeroes;
}
+void BattleState::SetCapsule(const Capsule &c) {
+ capsule = c;
+}
+
void BattleState::NextHero() {
++activeHero;
while (activeHero < numHeroes && heroes[activeHero].Health() == 0) {
}
-void BattleState::Resize(int w, int h) {
+void BattleState::OnResize(int w, int h) {
}
-void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) {
+void BattleState::OnEnterState(SDL_Surface *screen) {
for (int i(0); i < 4; ++i) {
heroes[i].Position() = heroesLayout->CalculatePosition(i, background->w, background->h);
heroes[i].SpellMenu() = *res->spellMenuProperties;
smallHeroTags[i] = SmallHeroTag(this, i);
}
+ capsule.Position() = heroesLayout->CalculatePosition(4, background->w, background->h);
+
for (int i(0); i < int(monsters.size()); ++i) {
monsters[i].Position() = monstersLayout->CalculatePosition(i, background->w, background->h);
}
itemMenu = *res->itemMenuProperties;
LoadInventory();
+ ClearAllAttacks();
}
void BattleState::LoadInventory() {
- const Inventory &inv(*res->inventory);
+ const Inventory &inv(game->state->inventory);
itemMenu.Clear();
itemMenu.Reserve(inv.MaxItems());
for (int i(0); i < inv.MaxItems(); ++i) {
itemMenu.AddEmptyEntry();
}
}
- ClearAllAttacks();
}
-void BattleState::ExitState(Application &ctrl, SDL_Surface *screen) {
+void BattleState::OnExitState(SDL_Surface *screen) {
}
-void BattleState::ResumeState(Application &ctrl, SDL_Surface *screen) {
+void BattleState::OnResumeState(SDL_Surface *screen) {
if (ranAway) {
- ctrl.PopState(); // quit the battle scene
+ Ctrl().PopState(); // quit the battle scene
return;
}
if (Victory()) {
- ctrl.PopState();
+ Ctrl().PopState();
return;
}
if (Defeat()) {
- ctrl.PopState();
+ Ctrl().PopState();
return;
}
// TODO: this should not push a state while quitting
if (AttackSelectionDone()) {
- ctrl.PushState(new PerformAttacks(this));
+ Ctrl().PushState(new PerformAttacks(this));
} else {
- ctrl.PushState(new SelectMoveAction(this));
+ Ctrl().PushState(new SelectMoveAction(this));
}
}
return true;
}
-void BattleState::PauseState(Application &ctrl, SDL_Surface *screen) {
+void BattleState::OnPauseState(SDL_Surface *screen) {
}
}
}
+void BattleState::RenderCapsule(SDL_Surface *screen, const Vector<int> &offset) {
+ if (capsule.Health() <= 0) return;
+ if (capsule.GetAnimation().Running()) {
+ capsule.GetAnimation().DrawCenter(screen, capsule.Position() + offset);
+ } else {
+ capsule.Sprite()->DrawCenter(screen, capsule.Position() + offset);
+ }
+}
+
void BattleState::RenderHeroTags(SDL_Surface *screen, const Vector<int> &offset) {
assert(screen);
int tagHeight(attackTypeMenu.Height());