]> git.localhorst.tv Git - l2e.git/blobdiff - src/menu/CapsuleFeedMenu.cpp
rough implementation of capsule feeding
[l2e.git] / src / menu / CapsuleFeedMenu.cpp
index 184212d820537b47bbaac4cb2813357125608670..f2631b90aecad4b40fbf6fb305a3362f2a01355c 100644 (file)
@@ -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<int> spriteOffset(
                                3 * font.CharWidth() + font.CharWidth() * 3 / 4,
                                4 * font.CharHeight() + font.CharHeight() / 4);
+       const Vector<int> growthOffset(
+                       13 * font.CharWidth(),
+                       7 * font.CharHeight() + font.CharHeight() / 4);
        const Vector<int> 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<int> &offse
        GetCapsule().BattleSprite()->Draw(screen, offset);
 }
 
+void CapsuleFeedMenu::RenderGrowth(SDL_Surface *screen, const Vector<int> &offset) const {
+       Vector<int> 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<int> &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();
 }