X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmenu%2FCapsuleFeedMenu.cpp;h=085c73d29d06c7cb883ac009f584d408bc743cb4;hb=5d1a76ae7725af998c6ee46adfe492c68ee1d34f;hp=184212d820537b47bbaac4cb2813357125608670;hpb=60e0fe29ce6cd033edc78b181d9d07fa72c11172;p=l2e.git diff --git a/src/menu/CapsuleFeedMenu.cpp b/src/menu/CapsuleFeedMenu.cpp index 184212d..085c73d 100644 --- a/src/menu/CapsuleFeedMenu.cpp +++ b/src/menu/CapsuleFeedMenu.cpp @@ -15,7 +15,7 @@ using app::Input; using common::Capsule; using common::Inventory; using common::Item; -using geometry::Vector; +using math::Vector; using graphics::Font; using graphics::Frame; @@ -100,9 +100,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 +129,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 +162,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 +178,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 +201,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 +257,10 @@ int CapsuleFeedMenu::Height() const { return parent->Height(); } +Capsule &CapsuleFeedMenu::GetCapsule() { + return parent->GetCapsule(); +} + const Capsule &CapsuleFeedMenu::GetCapsule() const { return parent->GetCapsule(); }