]> git.localhorst.tv Git - l2e.git/commitdiff
added scenario menu
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 30 Nov 2012 13:49:22 +0000 (14:49 +0100)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Fri, 30 Nov 2012 13:49:22 +0000 (14:49 +0100)
src/main.cpp
src/menu/PartyMenu.cpp
src/menu/Resources.cpp
src/menu/Resources.h
src/menu/ScenarioMenu.cpp [new file with mode: 0644]
src/menu/ScenarioMenu.h [new file with mode: 0644]
src/menu/fwd.h

index 580c5db14904e2450cb17f8695e41ad74489f533..f3103995f27b92677c714d0991f7f03d44ed1d51 100644 (file)
@@ -464,6 +464,16 @@ int main(int argc, char **argv) {
                menuResources.configMusicStereo = "STEREO";
                menuResources.configMusicMono = "MONO";
 
+               graphics::MenuProperties scenarioMenuProperties;
+               scenarioMenuProperties.cols = 1;
+               scenarioMenuProperties.rows = 6;
+               scenarioMenuProperties.charsPerEntry = 14;
+               scenarioMenuProperties.rowGap = 8;
+               scenarioMenuProperties.cursor = &menuCursor;
+               scenarioMenuProperties.font = &menuFont;
+               menuResources.scenarioMenuProperties = &scenarioMenuProperties;
+               menuResources.scenarioMenuHeadline = "SCENARIO ITEM";
+
                InitScreen screen(width, height);
 
                app::State *state(0);
index 99e86d1b67e40521ee86f616aa6bf0051db1849e..619d7e15bdb3e013eeb47e1f32ed1e67999fa1e8 100644 (file)
@@ -12,6 +12,7 @@
 #include "EquipMenu.h"
 #include "InventoryMenu.h"
 #include "Resources.h"
+#include "ScenarioMenu.h"
 #include "SelectHero.h"
 #include "SpellMenu.h"
 #include "StatusMenu.h"
@@ -118,6 +119,7 @@ void PartyMenu::HandleEvents(const Input &input) {
                                Ctrl().PushState(new ConfigMenu(this));
                                break;
                        case MENU_ITEM_SCENARIO:
+                               Ctrl().PushState(new ScenarioMenu(this));
                                break;
                        default:
                                break;
index 83daa10a5736a8e3a53d63e3e716ceb2c6473abe..38cf6f89534688dbd8f5d6d63de1b6b06220e91f 100644 (file)
@@ -86,7 +86,10 @@ Resources::Resources()
 , configCursorMemory(0)
 , configMusicLabel(0)
 , configMusicStereo(0)
-, configMusicMono(0) {
+, configMusicMono(0)
+
+, scenarioMenuProperties(0)
+, scenarioMenuHeadline(0) {
 
 }
 
index 026e3da100b9414406c3145ef62f6e30fe974385..62b825ded0cf94b39d7bf2b6597035bfb86d65d1 100644 (file)
@@ -93,6 +93,9 @@ struct Resources {
        const char *configMusicStereo;
        const char *configMusicMono;
 
+       graphics::MenuProperties *scenarioMenuProperties;
+       const char *scenarioMenuHeadline;
+
        Resources();
 
 };
diff --git a/src/menu/ScenarioMenu.cpp b/src/menu/ScenarioMenu.cpp
new file mode 100644 (file)
index 0000000..a2aca87
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * ScenarioMenu.cpp
+ *
+ *  Created on: Nov 30, 2012
+ *      Author: holy
+ */
+
+#include "ScenarioMenu.h"
+
+#include "PartyMenu.h"
+#include "Resources.h"
+#include "../app/Input.h"
+#include "../common/GameConfig.h"
+#include "../common/GameState.h"
+#include "../common/Inventory.h"
+#include "../common/Item.h"
+#include "../graphics/Font.h"
+#include "../graphics/Frame.h"
+
+using app::Input;
+using common::Inventory;
+using common::Item;
+using geometry::Vector;
+using graphics::Font;
+using graphics::Frame;
+
+namespace menu {
+
+ScenarioMenu::ScenarioMenu(PartyMenu *parent)
+: parent(parent)
+, itemMenu(*parent->Res().scenarioMenuProperties) {
+
+}
+
+
+void ScenarioMenu::OnEnterState(SDL_Surface *) {
+       LoadItems();
+}
+
+void ScenarioMenu::LoadItems() {
+       const Inventory &inv(parent->Game().state->inventory);
+       itemMenu.Clear();
+       itemMenu.Reserve(inv.MaxScenarioItems());
+       int i = 0;
+       for (; i < inv.NumScenarioItems(); ++i) {
+               const Item *item(inv.ScenarioItemAt(i));
+               itemMenu.Add(item->Name(), item, item->CanUseOnStatusScreen(), item->MenuIcon(), inv.ItemCountAt(i));
+       }
+       for (; i < inv.MaxScenarioItems(); ++i) {
+               itemMenu.AddEmptyEntry();
+       }
+}
+
+void ScenarioMenu::OnExitState(SDL_Surface *) {
+
+}
+
+void ScenarioMenu::OnResumeState(SDL_Surface *) {
+
+}
+
+void ScenarioMenu::OnPauseState(SDL_Surface *) {
+
+}
+
+
+void ScenarioMenu::OnResize(int width, int height) {
+
+}
+
+
+void ScenarioMenu::HandleEvents(const Input &input) {
+       if (input.JustPressed(Input::PAD_DOWN)) {
+               itemMenu.NextRow();
+       }
+       if (input.JustPressed(Input::PAD_UP)) {
+               itemMenu.PreviousRow();
+       }
+       if (input.JustPressed(Input::ACTION_B)) {
+               Ctrl().PopState();
+       }
+}
+
+void ScenarioMenu::UpdateWorld(float deltaT) {
+
+}
+
+
+void ScenarioMenu::Render(SDL_Surface *screen) {
+       const Font &font(*parent->Res().normalFont);
+       Vector<int> offset((screen->w - Width()) / 2, (screen->h - Height()) / 2);
+       Vector<int> headlineOffset(font.CharWidth(), 13 * font.CharHeight() + font.CharHeight() / 8);
+       Vector<int> itemsOffset(font.CharWidth(), 16 * font.CharHeight() + font.CharHeight() / 8);
+
+       parent->RenderBackground(screen);
+       parent->RenderHeros(screen, offset);
+       RenderHeadline(screen, offset + headlineOffset);
+       RenderItems(screen, offset + itemsOffset);
+}
+
+int ScenarioMenu::Width() const {
+       return parent->Width();
+}
+
+int ScenarioMenu::Height() const {
+       return parent->Height();
+}
+
+void ScenarioMenu::RenderHeadline(SDL_Surface *screen, const geometry::Vector<int> &offset) const {
+       const Font &font(*parent->Res().normalFont);
+       const Frame &frame(*parent->Res().statusFrame);
+       const Vector<int> textOffset(2 * font.CharWidth(), font.CharHeight());
+
+       int width = font.StringWidth(parent->Res().scenarioMenuHeadline) + 4 * font.CharWidth();
+       frame.Draw(screen, offset, width, 3 * font.CharHeight());
+       font.DrawString(parent->Res().scenarioMenuHeadline, screen, offset + textOffset);
+}
+
+void ScenarioMenu::RenderItems(SDL_Surface *screen, const geometry::Vector<int> &offset) const {
+       const Font &font(*parent->Res().normalFont);
+       const Frame &frame(*parent->Res().statusFrame);
+       const Vector<int> menuOffset(3 * font.CharWidth(), font.CharHeight() + font.CharHeight() / 4);
+
+       frame.Draw(screen, offset, 30 * font.CharWidth(), 11 * font.CharHeight());
+       itemMenu.Draw(screen, offset + menuOffset);
+}
+
+}
diff --git a/src/menu/ScenarioMenu.h b/src/menu/ScenarioMenu.h
new file mode 100644 (file)
index 0000000..bcc2bbc
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * ScenarioMenu.h
+ *
+ *  Created on: Nov 30, 2012
+ *      Author: holy
+ */
+
+#ifndef MENU_SCENARIOMENU_H_
+#define MENU_SCENARIOMENU_H_
+
+#include "fwd.h"
+#include "../app/State.h"
+#include "../common/fwd.h"
+#include "../geometry/Vector.h"
+#include "../graphics/Menu.h"
+
+namespace menu {
+
+class ScenarioMenu
+: public app::State {
+
+public:
+       explicit ScenarioMenu(PartyMenu *parent);
+
+public:
+       virtual void HandleEvents(const app::Input &);
+       virtual void UpdateWorld(float deltaT);
+       virtual void Render(SDL_Surface *);
+
+       int Width() const;
+       int Height() const;
+
+private:
+       virtual void OnEnterState(SDL_Surface *screen);
+       virtual void OnExitState(SDL_Surface *screen);
+       virtual void OnResumeState(SDL_Surface *screen);
+       virtual void OnPauseState(SDL_Surface *screen);
+
+       virtual void OnResize(int width, int height);
+
+       void LoadItems();
+
+       void RenderHeadline(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
+       void RenderItems(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
+
+private:
+       PartyMenu *parent;
+       graphics::Menu<const common::Item *> itemMenu;
+
+};
+
+}
+
+#endif /* MENU_SCENARIOMENU_H_ */
index b0ad85acab1a5581cf6ff7bdd56f4a9445dc30d4..b4b96e591abc032869394cceb47e0141a68bdb6f 100644 (file)
@@ -17,6 +17,7 @@ class HeroStatus;
 class InventoryMenu;
 class PartyMenu;
 struct Resources;
+class ScenarioMenu;
 class SelectHero;
 class SpellMenu;
 class StatusMenu;