X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmenu%2FCapsuleFeedMenu.cpp;h=ead0d718c7382a67f1b3b00cfd0c00bf21313d87;hb=ec824200aec12d6870b70304bcd2e2aeadba767b;hp=184212d820537b47bbaac4cb2813357125608670;hpb=67f6bb1d9727e7d1e2140cf2913aa89ebba84bf5;p=l2e.git diff --git a/src/menu/CapsuleFeedMenu.cpp b/src/menu/CapsuleFeedMenu.cpp index 184212d..ead0d71 100644 --- a/src/menu/CapsuleFeedMenu.cpp +++ b/src/menu/CapsuleFeedMenu.cpp @@ -10,12 +10,13 @@ #include "../common/GameState.h" #include "../graphics/Font.h" #include "../graphics/Frame.h" +#include "../math/Vector.h" using app::Input; using common::Capsule; using common::Inventory; using common::Item; -using geometry::Vector; +using math::Vector; using graphics::Font; using graphics::Frame; @@ -33,7 +34,9 @@ CapsuleFeedMenu::CapsuleFeedMenu(CapsuleMenu *parent) void CapsuleFeedMenu::OnEnterState(SDL_Surface *) { menu.SetSelected(); + menu.StartAnimation(Ctrl()); itemMenu.SetActive(); + itemMenu.StartAnimation(Ctrl()); } void CapsuleFeedMenu::LoadInventory() { @@ -100,9 +103,7 @@ void CapsuleFeedMenu::HandleEvents(const Input &input) { } else if (itemMenu.SelectedIndex() == itemMenu.SecondaryIndex()) { switch (menu.Selected()) { case CHOICE_SELECT: - if (true /* can feed */) { - // TODO: implement capsule feeding - } + FeedSelected(); itemMenu.SetActive(); break; case CHOICE_SORT: @@ -131,7 +132,27 @@ void CapsuleFeedMenu::HandleEvents(const Input &input) { } } -void CapsuleFeedMenu::UpdateWorld(float deltaT) { +void CapsuleFeedMenu::FeedSelected() { + if (itemMenu.Selected()) { + // TODO: feed and grow animations + if (GetCapsule().IsHungry()) { + GetCapsule().Feed(itemMenu.Selected()); + parent->Game().state->inventory.Remove(itemMenu.Selected(), 1); + LoadInventory(); + } else if (itemMenu.Selected() == GetCapsule().UpgradeItem()) { + GetCapsule().UpgradeSpecial(); + parent->Game().state->inventory.Remove(itemMenu.Selected(), 1); + LoadInventory(); + } else { + // error beep + } + } else { + // also beep + } +} + + +void CapsuleFeedMenu::UpdateWorld(Uint32 deltaT) { } @@ -144,6 +165,9 @@ void CapsuleFeedMenu::Render(SDL_Surface *screen) { const Vector spriteOffset( 3 * font.CharWidth() + font.CharWidth() * 3 / 4, 4 * font.CharHeight() + font.CharHeight() / 4); + const Vector growthOffset( + 13 * font.CharWidth(), + 7 * font.CharHeight() + font.CharHeight() / 4); const Vector hungerOffset( 13 * font.CharWidth(), 9 * font.CharHeight() + font.CharHeight() / 8); @@ -157,6 +181,9 @@ void CapsuleFeedMenu::Render(SDL_Surface *screen) { parent->RenderBackground(screen); RenderName(screen, offset + nameOffset); RenderSprite(screen, offset + spriteOffset); + if (GetCapsule().IsHungry()) { + RenderGrowth(screen, offset + growthOffset); + } RenderHunger(screen, offset + hungerOffset); RenderMenu(screen, offset + menuOffset); RenderItems(screen, offset + itemsOffset); @@ -177,6 +204,22 @@ void CapsuleFeedMenu::RenderSprite(SDL_Surface *screen, const Vector &offse GetCapsule().BattleSprite()->Draw(screen, offset); } +void CapsuleFeedMenu::RenderGrowth(SDL_Surface *screen, const Vector &offset) const { + Vector cursor(offset); + parent->Res().capsuleGrowthLabel->Draw(screen, offset); + cursor.X() += parent->Res().capsuleGrowthLabel->Width(); + + for (int i = 0; i < GetCapsule().HungerFull(); ++i) { + parent->Res().capsuleGrowthBarFilled->Draw(screen, cursor); + cursor.X() += parent->Res().capsuleGrowthBarFilled->Width(); + } + + for (int i = 0; i < GetCapsule().HungerEmpty(); ++i) { + parent->Res().capsuleGrowthBar->Draw(screen, cursor); + cursor.X() += parent->Res().capsuleGrowthBar->Width(); + } +} + void CapsuleFeedMenu::RenderHunger(SDL_Surface *screen, const Vector &offset) const { const Font &font(*parent->Res().normalFont); const Frame &frame(*parent->Res().statusFrame); @@ -217,6 +260,10 @@ int CapsuleFeedMenu::Height() const { return parent->Height(); } +Capsule &CapsuleFeedMenu::GetCapsule() { + return parent->GetCapsule(); +} + const Capsule &CapsuleFeedMenu::GetCapsule() const { return parent->GetCapsule(); }