X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmenu%2FCapsuleMenu.cpp;h=5a800a39294fd7d9a0ae699173c34a977e4a0de1;hb=6dff93b1a6e9b727dbe26747456f4b23efca86da;hp=7837ea5976e3e6143256cfdd9c6488c8f4ed4928;hpb=7f0a586b8238c7093a8942ff5b5c4122edd386fc;p=l2e.git diff --git a/src/menu/CapsuleMenu.cpp b/src/menu/CapsuleMenu.cpp index 7837ea5..5a800a3 100644 --- a/src/menu/CapsuleMenu.cpp +++ b/src/menu/CapsuleMenu.cpp @@ -1,5 +1,8 @@ #include "CapsuleMenu.h" +#include "CapsuleChangeMenu.h" +#include "CapsuleFeedMenu.h" +#include "CapsuleNameMenu.h" #include "PartyMenu.h" #include "Resources.h" #include "../app/Application.h" @@ -23,10 +26,10 @@ namespace menu { CapsuleMenu::CapsuleMenu(PartyMenu *parent) : parent(parent) -, menu(*parent->Res().capsuleMenuProperties) { - menu.Add(parent->Res().capsuleFeedLabel, 0); - menu.Add(parent->Res().capsuleChangeLabel, 1); - menu.Add(parent->Res().capsuleNameLabel, 2); +, menu(*Res().capsuleMenuProperties) { + menu.Add(Res().capsuleFeedLabel, CHOICE_FEED); + menu.Add(Res().capsuleChangeLabel, CHOICE_CHANGE); + menu.Add(Res().capsuleNameLabel, CHOICE_NAME); } @@ -39,7 +42,7 @@ void CapsuleMenu::OnExitState(SDL_Surface *) { } void CapsuleMenu::OnResumeState(SDL_Surface *) { - + menu.SetActive(); } void CapsuleMenu::OnPauseState(SDL_Surface *) { @@ -60,7 +63,22 @@ void CapsuleMenu::HandleEvents(const Input &input) { menu.NextItem(); } - if (input.JustPressed(Input::ACTION_B)) { + if (input.JustPressed(Input::ACTION_A)) { + switch (menu.Selected()) { + case CHOICE_FEED: + Ctrl().PushState(new CapsuleFeedMenu(this)); + menu.SetSelected(); + break; + case CHOICE_CHANGE: + Ctrl().PushState(new CapsuleChangeMenu(this)); + menu.SetSelected(); + break; + case CHOICE_NAME: + Ctrl().PushState(new CapsuleNameMenu(this)); + menu.SetSelected(); + break; + } + } else if (input.JustPressed(Input::ACTION_B)) { Ctrl().PopState(); } } @@ -70,7 +88,7 @@ void CapsuleMenu::UpdateWorld(float deltaT) { } void CapsuleMenu::Render(SDL_Surface *screen) { - const Font &font(*parent->Res().statusFont); + const Font &font(*Res().statusFont); const Vector offset((screen->w - Width()) / 2, (screen->h - Height()) / 2); const Vector capsuleOffset( 6 * font.CharWidth(), @@ -79,7 +97,9 @@ void CapsuleMenu::Render(SDL_Surface *screen) { 12 * font.CharWidth(), 2 * font.CharHeight() - font.CharHeight() / 8); // TODO: wheel offset: top left, center, or center bottom? - const Vector wheelOffset; + const Vector wheelOffset( + 6 * font.CharWidth(), + 19 * font.CharHeight() - font.CharHeight() / 8); const Vector statsOffset( 12 * font.CharWidth(), 15 * font.CharHeight() - font.CharHeight() / 8); @@ -96,7 +116,7 @@ void CapsuleMenu::Render(SDL_Surface *screen) { } void CapsuleMenu::RenderBackground(SDL_Surface *screen) const { - parent->Res().capsulebg->Render(screen, Vector(), Vector(screen->w, screen->h)); + Res().capsulebg->Render(screen, Vector(), Vector(screen->w, screen->h)); } void CapsuleMenu::RenderCapsule(SDL_Surface *screen, const Vector &offset) const { @@ -105,102 +125,103 @@ void CapsuleMenu::RenderCapsule(SDL_Surface *screen, const Vector &offset) void CapsuleMenu::RenderInfo(SDL_Surface *screen, const Vector &offset) const { const Capsule &capsule(GetCapsule()); - const Font &font(*parent->Res().statusFont); + const Font &font(*Res().statusFont); const Vector delimiterOffset(5 * font.CharWidth(), 0); const Vector valueOffset(6 * font.CharWidth(), 0); const Vector lineBreak(0, font.CharHeight() + font.CharHeight() / 2); Vector lineHead(offset); - font.DrawString(parent->Res().capsuleNameLabel, screen, lineHead, 5); + font.DrawString(Res().capsuleNameLabel, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); font.DrawString(capsule.Name(), screen, lineHead + valueOffset); lineHead += lineBreak; - font.DrawString(parent->Res().capsuleClassLabel, screen, lineHead, 5); + font.DrawString(Res().capsuleClassLabel, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); font.DrawString(capsule.ClassName(), screen, lineHead + valueOffset); lineHead += lineBreak; - font.DrawString(parent->Res().capsuleAlignmentLabel, screen, lineHead, 5); + font.DrawString(Res().capsuleAlignmentLabel, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); font.DrawString(capsule.Alignment(), screen, lineHead + valueOffset); lineHead += lineBreak; - font.DrawString(parent->Res().capsuleTribeLabel, screen, lineHead, 5); + font.DrawString(Res().capsuleTribeLabel, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); font.DrawString(capsule.Tribe(), screen, lineHead + valueOffset); lineHead += lineBreak; - font.DrawString(parent->Res().capsuleAttack1Label, screen, lineHead, 5); + font.DrawString(Res().capsuleAttack1Label, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); if (capsule.Attack1()) { font.DrawString(capsule.Attack1()->Name(), screen, lineHead + valueOffset); } else { - font.DrawString(parent->Res().capsuleNoAttackText, screen, lineHead + valueOffset); + font.DrawString(Res().capsuleNoAttackText, screen, lineHead + valueOffset); } lineHead += lineBreak; - font.DrawString(parent->Res().capsuleAttack1Label, screen, lineHead, 5); + font.DrawString(Res().capsuleAttack1Label, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); if (capsule.Attack2()) { font.DrawString(capsule.Attack2()->Name(), screen, lineHead + valueOffset); } else { - font.DrawString(parent->Res().capsuleNoAttackText, screen, lineHead + valueOffset); + font.DrawString(Res().capsuleNoAttackText, screen, lineHead + valueOffset); } lineHead += lineBreak; - font.DrawString(parent->Res().capsuleAttack1Label, screen, lineHead, 5); + font.DrawString(Res().capsuleAttack1Label, screen, lineHead, 5); font.DrawChar(':', screen, lineHead + delimiterOffset); if (capsule.Attack3()) { font.DrawString(capsule.Attack3()->Name(), screen, lineHead + valueOffset); } else { - font.DrawString(parent->Res().capsuleNoAttackText, screen, lineHead + valueOffset); + font.DrawString(Res().capsuleNoAttackText, screen, lineHead + valueOffset); } } void CapsuleMenu::RenderWheel(SDL_Surface *screen, const Vector &offset) const { - // later + Res().capsuleAlignmentWheel->DrawCenter(screen, offset); + Res().capsuleAlignmentCursor->DrawCenter(screen, offset + Game().state->capsule->AlignmentOffset()); } void CapsuleMenu::RenderStats(SDL_Surface *screen, const Vector &offset) const { const Capsule &capsule(GetCapsule()); Stats stats(capsule.GetStats()); - const Font &font(*parent->Res().statusFont); + const Font &font(*Res().statusFont); const Vector lineBreak(0, font.CharHeight()); Vector lineHead(offset); - RenderStatsLine(screen, lineHead, parent->Res().hpLabel, capsule.MaxHealth()); + RenderStatsLine(screen, lineHead, Res().hpLabel, capsule.MaxHealth()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().atpLabel, stats.Attack()); + RenderStatsLine(screen, lineHead, Res().atpLabel, stats.Attack()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().dfpLabel, stats.Defense()); + RenderStatsLine(screen, lineHead, Res().dfpLabel, stats.Defense()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().strLabel, stats.Strength()); + RenderStatsLine(screen, lineHead, Res().strLabel, stats.Strength()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().aglLabel, stats.Agility()); + RenderStatsLine(screen, lineHead, Res().aglLabel, stats.Agility()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().intLabel, stats.Intelligence()); + RenderStatsLine(screen, lineHead, Res().intLabel, stats.Intelligence()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().gutLabel, stats.Gut()); + RenderStatsLine(screen, lineHead, Res().gutLabel, stats.Gut()); lineHead += lineBreak; - RenderStatsLine(screen, lineHead, parent->Res().mgrLabel, stats.MagicResistance()); + RenderStatsLine(screen, lineHead, Res().mgrLabel, stats.MagicResistance()); lineHead = offset + Vector(18 * font.CharWidth(), 0); - font.DrawStringRight(parent->Res().levelLabel, screen, lineHead); + font.DrawStringRight(Res().levelLabel, screen, lineHead); lineHead += lineBreak; font.DrawNumberRight(capsule.Level(), screen, lineHead); lineHead += 2 * lineBreak; - font.DrawStringRight(parent->Res().experienceLabel, screen, lineHead); + font.DrawStringRight(Res().experienceLabel, screen, lineHead); lineHead += lineBreak; font.DrawNumberRight(capsule.Experience(), screen, lineHead); lineHead += 2 * lineBreak; - font.DrawStringRight(parent->Res().nextLevelLabel, screen, lineHead); + font.DrawStringRight(Res().nextLevelLabel, screen, lineHead); lineHead += lineBreak; font.DrawNumberRight(capsule.NextLevel(), screen, lineHead); } void CapsuleMenu::RenderStatsLine(SDL_Surface *screen, const geometry::Vector &offset, const char *name, int value) const { - const Font &font(*parent->Res().statusFont); + const Font &font(*Res().statusFont); const Vector numberOffset(4 * font.CharWidth(), 0); font.DrawString(name, screen, offset, 4); @@ -208,14 +229,32 @@ void CapsuleMenu::RenderStatsLine(SDL_Surface *screen, const geometry::Vector &offset) const { - const Font &font(*parent->Res().normalFont); - const Frame &frame(*parent->Res().statusFrame); + const Font &font(*Res().normalFont); + const Frame &frame(*Res().statusFrame); const Vector menuOffset(3 * font.CharWidth(), font.CharHeight()); frame.Draw(screen, offset, 30 * font.CharWidth(), 3 * font.CharHeight()); menu.Draw(screen, offset + menuOffset); } + +common::GameConfig &CapsuleMenu::Game() { + return parent->Game(); +} + +const common::GameConfig &CapsuleMenu::Game() const { + return parent->Game(); +} + +Resources &CapsuleMenu::Res() { + return parent->Res(); +} + +const Resources &CapsuleMenu::Res() const { + return parent->Res(); +} + + int CapsuleMenu::Width() const { return parent->Width(); } @@ -224,8 +263,12 @@ int CapsuleMenu::Height() const { return parent->Height(); } +Capsule &CapsuleMenu::GetCapsule() { + return *Game().state->capsule; +} + const Capsule &CapsuleMenu::GetCapsule() const { - return *parent->Game().state->capsule; + return *Game().state->capsule; } }