From: Daniel Karbach Date: Thu, 9 Aug 2012 00:47:02 +0000 (+0200) Subject: added ikari select state X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=b782e097508340f375a06f0f293775eb86c3df9c;p=l2e.git added ikari select state --- diff --git a/Debug/src/battle/states/subdir.mk b/Debug/src/battle/states/subdir.mk index 6697dcb..8217544 100644 --- a/Debug/src/battle/states/subdir.mk +++ b/Debug/src/battle/states/subdir.mk @@ -5,18 +5,21 @@ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ ../src/battle/states/SelectAttackType.cpp \ +../src/battle/states/SelectIkari.cpp \ ../src/battle/states/SelectItem.cpp \ ../src/battle/states/SelectMoveAction.cpp \ ../src/battle/states/SelectSpell.cpp OBJS += \ ./src/battle/states/SelectAttackType.o \ +./src/battle/states/SelectIkari.o \ ./src/battle/states/SelectItem.o \ ./src/battle/states/SelectMoveAction.o \ ./src/battle/states/SelectSpell.o CPP_DEPS += \ ./src/battle/states/SelectAttackType.d \ +./src/battle/states/SelectIkari.d \ ./src/battle/states/SelectItem.d \ ./src/battle/states/SelectMoveAction.d \ ./src/battle/states/SelectSpell.d diff --git a/Release/src/battle/states/subdir.mk b/Release/src/battle/states/subdir.mk index 5fdaab0..6bd8035 100644 --- a/Release/src/battle/states/subdir.mk +++ b/Release/src/battle/states/subdir.mk @@ -5,18 +5,21 @@ # Add inputs and outputs from these tool invocations to the build variables CPP_SRCS += \ ../src/battle/states/SelectAttackType.cpp \ +../src/battle/states/SelectIkari.cpp \ ../src/battle/states/SelectItem.cpp \ ../src/battle/states/SelectMoveAction.cpp \ ../src/battle/states/SelectSpell.cpp OBJS += \ ./src/battle/states/SelectAttackType.o \ +./src/battle/states/SelectIkari.o \ ./src/battle/states/SelectItem.o \ ./src/battle/states/SelectMoveAction.o \ ./src/battle/states/SelectSpell.o CPP_DEPS += \ ./src/battle/states/SelectAttackType.d \ +./src/battle/states/SelectIkari.d \ ./src/battle/states/SelectItem.d \ ./src/battle/states/SelectMoveAction.d \ ./src/battle/states/SelectSpell.d diff --git a/src/battle/BattleState.cpp b/src/battle/BattleState.cpp index 382972f..0c983e7 100644 --- a/src/battle/BattleState.cpp +++ b/src/battle/BattleState.cpp @@ -53,6 +53,8 @@ void BattleState::EnterState(Application &ctrl, SDL_Surface *screen) { for (vector::size_type i(0), end(heroes.size()); i < end; ++i) { spellMenus.push_back(res->spellMenuPrototype); // TODO: insert spell menu entries + ikariMenus.push_back(res->ikariMenuPrototype); + // TODO: insert ikari menu entries heroTags.push_back(HeroTag(&heroes[i], &attackChoices[i], res, HeroTag::Alignment((i + 1) % 2))); } // TODO: insert item menu entries diff --git a/src/battle/BattleState.h b/src/battle/BattleState.h index 65e8727..074578e 100644 --- a/src/battle/BattleState.h +++ b/src/battle/BattleState.h @@ -80,6 +80,8 @@ public: bool AttackSelectionDone() const { return activeHero >= (int) heroes.size(); } graphics::Menu &GetSpellMenu() { return spellMenus[activeHero]; } const graphics::Menu &GetSpellMenu() const { return spellMenus[activeHero]; } + graphics::Menu &GetIkariMenu() { return ikariMenus[activeHero]; } + const graphics::Menu &GetIkariMenu() const { return ikariMenus[activeHero]; } graphics::Menu &GetItemMenu() { return itemMenu; } const graphics::Menu &GetItemMenu() const { return itemMenu; } @@ -110,6 +112,7 @@ private: std::vector heroes; std::vector > spellMenus; graphics::Menu itemMenu; + std::vector > ikariMenus; std::vector heroTags; std::vector attackChoices; int activeHero; diff --git a/src/battle/Resources.h b/src/battle/Resources.h index 0c64667..0d18b9f 100644 --- a/src/battle/Resources.h +++ b/src/battle/Resources.h @@ -47,6 +47,9 @@ struct Resources { const char *itemMenuHeadline; graphics::Menu itemMenuPrototype; + const char *ikariMenuHeadline; + graphics::Menu ikariMenuPrototype; + Resources() : moveIcons(0) @@ -70,6 +73,7 @@ struct Resources { , menuCursor(0) , spellMenuHeadline("") , itemMenuHeadline("") + , ikariMenuHeadline("") { } }; diff --git a/src/battle/states/SelectAttackType.cpp b/src/battle/states/SelectAttackType.cpp index c5e0bba..5e687b6 100644 --- a/src/battle/states/SelectAttackType.cpp +++ b/src/battle/states/SelectAttackType.cpp @@ -7,6 +7,7 @@ #include "SelectAttackType.h" +#include "SelectIkari.h" #include "SelectItem.h" #include "SelectMoveAction.h" #include "SelectSpell.h" @@ -79,8 +80,7 @@ void SelectAttackType::HandleInput(const Input &input) { battle->NextHero(); break; case AttackChoice::IKARI: - // TODO: switch to ikari attack select - battle->NextHero(); + ctrl->PushState(new SelectIkari(battle, this)); break; case AttackChoice::ITEM: ctrl->PushState(new SelectItem(battle, this)); diff --git a/src/battle/states/SelectIkari.cpp b/src/battle/states/SelectIkari.cpp new file mode 100644 index 0000000..3c11164 --- /dev/null +++ b/src/battle/states/SelectIkari.cpp @@ -0,0 +1,109 @@ +/* + * SelectIkari.cpp + * + * Created on: Aug 9, 2012 + * Author: holy + */ + +#include "SelectIkari.h" + +#include "SelectAttackType.h" +#include "../BattleState.h" +#include "../../app/Application.h" +#include "../../app/Input.h" +#include "../../geometry/Point.h" +#include "../../geometry/operators.h" +#include "../../graphics/Frame.h" + +using app::Application; +using app::Input; +using geometry::Point; +using geometry::Vector; +using graphics::Frame; + +namespace battle { + +void SelectIkari::EnterState(Application &c, SDL_Surface *screen) { + ctrl = &c; +} + +void SelectIkari::ExitState(Application &c, SDL_Surface *screen) { + ctrl = 0; +} + +void SelectIkari::ResumeState(Application &ctrl, SDL_Surface *screen) { + +} + +void SelectIkari::PauseState(Application &ctrl, SDL_Surface *screen) { + +} + + +void SelectIkari::Resize(int width, int height) { + +} + + +void SelectIkari::HandleInput(const Input &input) { + if (input.JustPressed(Input::ACTION_A)) { + // TODO: switch to target select + if (battle->GetIkariMenu().SelectedIsEnabled()) { + battle->NextHero(); + ctrl->PopState(); + } + } + if (input.JustPressed(Input::ACTION_B)) { + ctrl->PopState(); // return control to parent + } + if (input.JustPressed(Input::PAD_UP)) { + battle->GetIkariMenu().PreviousRow(); + } + if (input.JustPressed(Input::PAD_RIGHT)) { + battle->GetIkariMenu().NextItem(); + } + if (input.JustPressed(Input::PAD_DOWN)) { + battle->GetIkariMenu().NextRow(); + } + if (input.JustPressed(Input::PAD_LEFT)) { + battle->GetIkariMenu().PreviousItem(); + } +} + +void SelectIkari::UpdateWorld(float deltaT) { + +} + +void SelectIkari::Render(SDL_Surface *screen) { + parent->Render(screen); + Vector offset(battle->CalculateScreenOffset(screen)); + RenderFrame(screen, offset); + RenderHeadline(screen, offset); + RenderMenu(screen, offset); +} + +void SelectIkari::RenderFrame(SDL_Surface *screen, const Vector &offset) { + const Frame *frame(battle->Res().selectFrame); + Point position(frame->BorderWidth(), frame->BorderHeight()); + int width(battle->BackgroundWidth() - 2 * frame->BorderWidth()); + int height(battle->Res().normalFont->CharHeight() * 13); + frame->Draw(screen, position + offset, width, height); +} + +void SelectIkari::RenderHeadline(SDL_Surface *screen, const Vector &offset) { + const Resources &res(battle->Res()); + Point position( + 2 * res.selectFrame->BorderWidth() + res.normalFont->CharWidth(), + 2 * res.selectFrame->BorderHeight()); + res.normalFont->DrawString(res.itemMenuHeadline, screen, position + offset); +} + +void SelectIkari::RenderMenu(SDL_Surface *screen, const Vector &offset) { + const Resources &res(battle->Res()); + Point position( + 2 * res.selectFrame->BorderWidth() + res.normalFont->CharWidth(), + 2 * res.selectFrame->BorderHeight() + 2 * res.normalFont->CharHeight()); + battle->GetIkariMenu().Draw(screen, position + offset); +} + +} diff --git a/src/battle/states/SelectIkari.h b/src/battle/states/SelectIkari.h new file mode 100644 index 0000000..1550ed8 --- /dev/null +++ b/src/battle/states/SelectIkari.h @@ -0,0 +1,54 @@ +/* + * SelectIkari.h + * + * Created on: Aug 9, 2012 + * Author: holy + */ + +#ifndef BATTLE_SELECTIKARI_H_ +#define BATTLE_SELECTIKARI_H_ + +#include "../../app/State.h" + +#include "../../geometry/Vector.h" + +namespace battle { + +class BattleState; +class SelectAttackType; + +// TODO: looks like item, spell, and ikari select can be merged into one class +class SelectIkari +: public app::State { + +public: + SelectIkari(BattleState *battle, SelectAttackType *parent) + : ctrl(0), battle(battle), parent(parent) { } + +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 HandleInput(const app::Input &); + virtual void UpdateWorld(float deltaT); + virtual void Render(SDL_Surface *); + +private: + void RenderFrame(SDL_Surface *, const geometry::Vector &offset); + void RenderHeadline(SDL_Surface *, const geometry::Vector &offset); + void RenderMenu(SDL_Surface *, const geometry::Vector &offset); + +private: + app::Application *ctrl; + BattleState *battle; + SelectAttackType *parent; + +}; + +} + +#endif /* BATTLE_SELECTIKARI_H_ */ diff --git a/src/main.cpp b/src/main.cpp index 8820004..7dbeba0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -247,6 +247,15 @@ int main(int argc, char **argv) { battleRes.itemMenuPrototype.Add("Protect ring: 1", 0, false, &ringIcon); battleRes.itemMenuPrototype.Add("Mysto jewel : 1", 0, false, &stoneIcon); + battleRes.ikariMenuHeadline = "Please choose equipment."; + battleRes.ikariMenuPrototype = Menu(&normalFont, &disabledFont, &handCursorSprite, 26, 6, 8, 16, 1, 32); + battleRes.ikariMenuPrototype.Add("Zirco whip Thundershriek", 0, false, &swordIcon); + battleRes.ikariMenuPrototype.Add("Zircon plate Sudden cure", 0, true, &armorIcon); + battleRes.ikariMenuPrototype.Add("Zirco gloves Forcefield", 0, true, &shieldIcon); + battleRes.ikariMenuPrototype.Add("Holy cap Vulnerable", 0, false, &helmetIcon); + battleRes.ikariMenuPrototype.Add("Ghost ring Destroy", 0, true, &ringIcon); + battleRes.ikariMenuPrototype.Add("Eagle rock Dive", 0, true, &stoneIcon); + BattleState *battleState(new BattleState(bg, monstersLayout, heroesLayout, &battleRes)); battleState->AddMonster(monster); battleState->AddMonster(monster);