#include "CapsuleMenu.h"
+#include "CapsuleChangeMenu.h"
+#include "CapsuleFeedMenu.h"
+#include "CapsuleNameMenu.h"
#include "PartyMenu.h"
#include "Resources.h"
#include "../app/Application.h"
#include "../graphics/Font.h"
#include "../graphics/Frame.h"
#include "../graphics/Texture.h"
+#include "../math/Vector.h"
using app::Input;
using common::Capsule;
using common::Stats;
-using geometry::Vector;
+using math::Vector;
using graphics::Font;
using graphics::Frame;
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);
}
void CapsuleMenu::OnEnterState(SDL_Surface *) {
-
+ menu.StartAnimation(Ctrl());
}
void CapsuleMenu::OnExitState(SDL_Surface *) {
}
void CapsuleMenu::OnResumeState(SDL_Surface *) {
-
+ menu.SetActive();
}
void CapsuleMenu::OnPauseState(SDL_Surface *) {
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();
}
}
-void CapsuleMenu::UpdateWorld(float deltaT) {
+void CapsuleMenu::UpdateWorld(Uint32 deltaT) {
}
void CapsuleMenu::Render(SDL_Surface *screen) {
- const Font &font(*parent->Res().statusFont);
+ const Font &font(*Res().statusFont);
const Vector<int> offset((screen->w - Width()) / 2, (screen->h - Height()) / 2);
const Vector<int> capsuleOffset(
6 * font.CharWidth(),
12 * font.CharWidth(),
2 * font.CharHeight() - font.CharHeight() / 8);
// TODO: wheel offset: top left, center, or center bottom?
- const Vector<int> wheelOffset;
+ const Vector<int> wheelOffset(
+ 6 * font.CharWidth(),
+ 19 * font.CharHeight() - font.CharHeight() / 8);
const Vector<int> statsOffset(
12 * font.CharWidth(),
15 * font.CharHeight() - font.CharHeight() / 8);
}
void CapsuleMenu::RenderBackground(SDL_Surface *screen) const {
- parent->Res().capsulebg->Render(screen, Vector<int>(), Vector<int>(screen->w, screen->h));
+ Res().capsulebg->Draw(screen, Vector<int>(), Vector<int>(screen->w, screen->h));
}
void CapsuleMenu::RenderCapsule(SDL_Surface *screen, const Vector<int> &offset) const {
void CapsuleMenu::RenderInfo(SDL_Surface *screen, const Vector<int> &offset) const {
const Capsule &capsule(GetCapsule());
- const Font &font(*parent->Res().statusFont);
+ const Font &font(*Res().statusFont);
const Vector<int> delimiterOffset(5 * font.CharWidth(), 0);
const Vector<int> valueOffset(6 * font.CharWidth(), 0);
const Vector<int> lineBreak(0, font.CharHeight() + font.CharHeight() / 2);
Vector<int> 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<int> &offset) const {
- // later
+ Res().capsuleAlignmentWheel->DrawCenter(screen, offset);
+ Res().capsuleAlignmentCursor->DrawCenter(screen, offset + Game().state->GetCapsule().AlignmentOffset());
}
void CapsuleMenu::RenderStats(SDL_Surface *screen, const Vector<int> &offset) const {
const Capsule &capsule(GetCapsule());
Stats stats(capsule.GetStats());
- const Font &font(*parent->Res().statusFont);
+ const Font &font(*Res().statusFont);
const Vector<int> lineBreak(0, font.CharHeight());
Vector<int> 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<int>(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<int> &offset, const char *name, int value) const {
- const Font &font(*parent->Res().statusFont);
+void CapsuleMenu::RenderStatsLine(SDL_Surface *screen, const math::Vector<int> &offset, const char *name, int value) const {
+ const Font &font(*Res().statusFont);
const Vector<int> numberOffset(4 * font.CharWidth(), 0);
font.DrawString(name, screen, offset, 4);
}
void CapsuleMenu::RenderMenu(SDL_Surface *screen, const Vector<int> &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<int> 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();
}
return parent->Height();
}
+Capsule &CapsuleMenu::GetCapsule() {
+ return Game().state->GetCapsule();
+}
+
const Capsule &CapsuleMenu::GetCapsule() const {
- return *parent->Game().state->capsule;
+ return Game().state->GetCapsule();
}
}