namespace battle {
-void SelectAttackType::OnEnterState(SDL_Surface *screen) {
+SelectAttackType::SelectAttackType(Battle *battle, BattleState *parent)
+: battle(battle)
+, parent(parent) {
+
+}
+
+void SelectAttackType::OnEnterState(SDL_Surface *screen) {
+ OnResize(screen->w, screen->h);
}
void SelectAttackType::OnExitState(SDL_Surface *screen) {
void SelectAttackType::OnResumeState(SDL_Surface *screen) {
if (battle->ActiveHero().GetAttackChoice().Selection().HasSelected()) {
- battle->ActiveHero().GetAttackChoice().SetType(battle->GetAttackTypeMenu().Selected());
+ battle->ActiveHero().GetAttackChoice().SetType(parent->GetAttackTypeMenu().Selected());
battle->NextHero();
}
if (battle->AttackSelectionDone()) {
void SelectAttackType::OnResize(int width, int height) {
-
+ Vector<int> offset(parent->ScreenOffset());
+ Vector<int> position(
+ (parent->Width() - parent->GetAttackTypeMenu().Width()) / 2,
+ parent->Height() - parent->GetAttackTypeMenu().Height() - parent->GetAttackTypeMenu().Height() / 2);
+ menuOffset = offset + position;
}
void SelectAttackType::HandleEvents(const Input &input) {
if (input.IsDown(Input::PAD_UP)) {
- battle->GetAttackTypeMenu().Select(AttackChoice::MAGIC);
+ parent->GetAttackTypeMenu().Select(AttackChoice::MAGIC);
} else if (input.IsDown(Input::PAD_RIGHT)) {
- battle->GetAttackTypeMenu().Select(AttackChoice::DEFEND);
+ parent->GetAttackTypeMenu().Select(AttackChoice::DEFEND);
} else if (input.IsDown(Input::PAD_DOWN)) {
- battle->GetAttackTypeMenu().Select(AttackChoice::IKARI);
+ parent->GetAttackTypeMenu().Select(AttackChoice::IKARI);
} else if (input.IsDown(Input::PAD_LEFT)) {
- battle->GetAttackTypeMenu().Select(AttackChoice::ITEM);
+ parent->GetAttackTypeMenu().Select(AttackChoice::ITEM);
} else {
- battle->GetAttackTypeMenu().Select(AttackChoice::SWORD);
+ parent->GetAttackTypeMenu().Select(AttackChoice::SWORD);
}
Hero &hero(battle->ActiveHero());
AttackChoice &ac(hero.GetAttackChoice());
if (input.JustPressed(Input::ACTION_A)) {
- switch (battle->GetAttackTypeMenu().Selected()) {
+ switch (parent->GetAttackTypeMenu().Selected()) {
case AttackChoice::SWORD:
if (hero.HasWeapon()) {
if (hero.Weapon()->GetTargetingMode().TargetsAll()) {
ac.Selection().SetSingle();
}
ac.Selection().Reset();
- Ctrl().PushState(new SelectTarget(battle, this, &ac.Selection(), battle->Res().weaponTargetCursor));
+ Ctrl().PushState(new SelectTarget(battle, this, &ac.Selection(), parent->Res().weaponTargetCursor));
break;
case AttackChoice::MAGIC:
if (battle->ActiveHero().CanUseMagic()) {
ac.Reset();
battle->PreviousHero();
if (battle->BeforeFirstHero()) {
- Ctrl().ChangeState(new SelectMoveAction(battle));
+ Ctrl().ChangeState(new SelectMoveAction(battle, parent));
} else {
battle->ActiveHero().GetAttackChoice().Reset();
}
}
void SelectAttackType::Render(SDL_Surface *screen) {
- Vector<int> offset(battle->CalculateScreenOffset(screen));
- battle->RenderBackground(screen, offset);
- battle->RenderMonsters(screen, offset);
- battle->RenderHeroTags(screen, offset);
- RenderMenu(screen, offset);
+ parent->RenderBackground(screen);
+ parent->RenderMonsters(screen);
+ parent->RenderHeroTags(screen);
+ RenderMenu(screen);
}
-void SelectAttackType::RenderMenu(SDL_Surface *screen, const Vector<int> &offset) {
- Vector<int> position(
- (battle->Width() - battle->GetAttackTypeMenu().Width()) / 2,
- battle->Height() - battle->GetAttackTypeMenu().Height() - battle->GetAttackTypeMenu().Height() / 2);
- battle->GetAttackTypeMenu().Render(screen, position + offset);
+void SelectAttackType::RenderMenu(SDL_Surface *screen) {
+ parent->GetAttackTypeMenu().Render(screen, menuOffset);
+}
+
+
+const Resources &SelectAttackType::Res() const {
+ return parent->Res();
+}
+
+graphics::Menu<const Item *> &SelectAttackType::ItemMenu() {
+ return parent->ItemMenu();
+}
+
+const graphics::Menu<const Item *> &SelectAttackType::ItemMenu() const {
+ return parent->ItemMenu();
+}
+
+const HeroTag &SelectAttackType::HeroTagAt(int index) const {
+ return parent->HeroTagAt(index);
+}
+const Vector<int> &SelectAttackType::HeroTagPositionAt(int index) const {
+ return parent->HeroTagPositionAt(index);
+}
+
+const Vector<int> &SelectAttackType::ScreenOffset() const {
+ return parent->ScreenOffset();
+}
+
+int SelectAttackType::Width() const {
+ return parent->Width();
+}
+
+int SelectAttackType::Height() const {
+ return parent->Height();
}
}