X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmenu%2FCapsuleFeedMenu.cpp;h=f2631b90aecad4b40fbf6fb305a3362f2a01355c;hb=e518ac67cf94e244df16078dcbc536e6b659e758;hp=184212d820537b47bbaac4cb2813357125608670;hpb=5cbe0ba11d6fe180f49101547f05e7fe586d55c0;p=l2e.git diff --git a/src/menu/CapsuleFeedMenu.cpp b/src/menu/CapsuleFeedMenu.cpp index 184212d..f2631b9 100644 --- a/src/menu/CapsuleFeedMenu.cpp +++ b/src/menu/CapsuleFeedMenu.cpp @@ -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,6 +129,18 @@ void CapsuleFeedMenu::HandleEvents(const Input &input) { } } +void CapsuleFeedMenu::FeedSelected() { + if (itemMenu.Selected()) { + // TODO: feed and grow animations + GetCapsule().Feed(itemMenu.Selected()); + parent->Game().state->inventory.Remove(itemMenu.Selected(), 1); + LoadInventory(); + } else { + // beep + } +} + + void CapsuleFeedMenu::UpdateWorld(float deltaT) { } @@ -144,6 +154,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 +170,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 +193,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 +249,10 @@ int CapsuleFeedMenu::Height() const { return parent->Height(); } +Capsule &CapsuleFeedMenu::GetCapsule() { + return parent->GetCapsule(); +} + const Capsule &CapsuleFeedMenu::GetCapsule() const { return parent->GetCapsule(); }