]> git.localhorst.tv Git - l2e.git/commitdiff
added hero status tags in party menu
authorDaniel Karbach <daniel.karbach@localhorst.tv>
Sun, 21 Oct 2012 17:09:39 +0000 (19:09 +0200)
committerDaniel Karbach <daniel.karbach@localhorst.tv>
Sun, 21 Oct 2012 17:09:39 +0000 (19:09 +0200)
12 files changed:
Debug/src/menu/subdir.mk
Release/src/menu/subdir.mk
src/common/Hero.h
src/main.cpp
src/menu/HeroStatus.cpp [new file with mode: 0644]
src/menu/HeroStatus.h [new file with mode: 0644]
src/menu/PartyMenu.cpp
src/menu/PartyMenu.h
src/menu/Resources.h
src/menu/fwd.h
test-data/normal-font.png
test-data/status-labels.png [new file with mode: 0644]

index cdf7f21bb0289bc22353c608ed1239e16a0ba3d6..15d3746dcb97e906e82809c3706a04437dc8dcb5 100644 (file)
@@ -4,14 +4,17 @@
 
 # Add inputs and outputs from these tool invocations to the build variables 
 CPP_SRCS += \
+../src/menu/HeroStatus.cpp \
 ../src/menu/PartyMenu.cpp \
 ../src/menu/Resources.cpp 
 
 OBJS += \
+./src/menu/HeroStatus.o \
 ./src/menu/PartyMenu.o \
 ./src/menu/Resources.o 
 
 CPP_DEPS += \
+./src/menu/HeroStatus.d \
 ./src/menu/PartyMenu.d \
 ./src/menu/Resources.d 
 
index a289eae5e0d5fd3036961877d3ed08f83d7f76d4..a0ea3ff4e981cc439394fc41bc13514125e22ba4 100644 (file)
@@ -4,14 +4,17 @@
 
 # Add inputs and outputs from these tool invocations to the build variables 
 CPP_SRCS += \
+../src/menu/HeroStatus.cpp \
 ../src/menu/PartyMenu.cpp \
 ../src/menu/Resources.cpp 
 
 OBJS += \
+./src/menu/HeroStatus.o \
 ./src/menu/PartyMenu.o \
 ./src/menu/Resources.o 
 
 CPP_DEPS += \
+./src/menu/HeroStatus.d \
 ./src/menu/PartyMenu.d \
 ./src/menu/Resources.d 
 
index ca4651c947d66003583879145d4b44b4c304b9c7..b12e8f5b50c8e3ae719814d42c638f08ed057c0d 100644 (file)
@@ -72,6 +72,7 @@ public:
        const std::vector<const Spell *> &Spells() const { return spells; }
 
        graphics::Sprite *BattleSprite() { return battleSprite; }
+       const graphics::Sprite *BattleSprite() const { return battleSprite; }
        graphics::Animation *MeleeAnimation() { return meleeAnimation; }
        graphics::Animation *AttackAnimation() { return attackAnimation; }
        graphics::Animation *SpellAnimation() { return spellAnimation; }
index 73b42740180cc7f5727fe506da1847bdc3a5422f..b06b5c7533b1e463460461bafe613af016acf743 100644 (file)
@@ -279,6 +279,11 @@ int main(int argc, char **argv) {
                menubg.SetSize(Vector<int>(64, 64));
                menuResources.menubg = &menubg;
 
+               menuResources.normalFont = gameConfig.battleResources->normalFont;
+
+               graphics::Sprite statusLabels(IMG_Load("test-data/status-labels.png"), 32, 16);
+               menuResources.statusLabels = &statusLabels;
+
                InitScreen screen(width, height);
 
                app::State *state(0);
diff --git a/src/menu/HeroStatus.cpp b/src/menu/HeroStatus.cpp
new file mode 100644 (file)
index 0000000..e84327e
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+ * HeroStatus.cpp
+ *
+ *  Created on: Oct 21, 2012
+ *      Author: holy
+ */
+
+#include "HeroStatus.h"
+
+#include "Resources.h"
+#include "../common/Hero.h"
+#include "../graphics/Font.h"
+#include "../graphics/Sprite.h"
+
+using geometry::Vector;
+
+namespace menu {
+
+HeroStatus::HeroStatus()
+: res(0)
+, hero(0) {
+
+}
+
+HeroStatus::~HeroStatus() {
+
+}
+
+
+int HeroStatus::Width() const {
+       return hero->BattleSprite()->Width() + res->normalFont->CharWidth() * 10;
+}
+
+int HeroStatus::Height() const {
+       return hero->BattleSprite()->Height();
+}
+
+
+void HeroStatus::Render(SDL_Surface *screen, const Vector<int> &offset) const {
+       if (!hero) return;
+
+       hero->BattleSprite()->Draw(screen, position + offset, 0, 0);
+
+       // for some reason, fonts are shifted by one pixel in the original
+       Vector<int> nameOffset(
+                       hero->BattleSprite()->Width(),
+                       res->normalFont->CharHeight() * 7 / 8);
+       nameOffset += position + offset;
+       res->normalFont->DrawString(hero->Name(), screen, nameOffset, 5);
+
+       Vector<int> levelLabelOffset(nameOffset.X() + 6 * res->normalFont->CharWidth(), nameOffset.Y());
+       res->statusLabels->Draw(screen, levelLabelOffset, 0, 0);
+
+       Vector<int> levelOffset(levelLabelOffset.X() + 2 * res->normalFont->CharWidth(), levelLabelOffset.Y());
+       res->normalFont->DrawNumber(hero->Level(), screen, levelOffset, 2);
+
+       Vector<int> healthLabelOffset(nameOffset.X(), nameOffset.Y() + res->normalFont->CharHeight());
+       res->statusLabels->Draw(screen, healthLabelOffset, 0, 1);
+
+       Vector<int> healthOffset(nameOffset.X() + 3 * res->normalFont->CharWidth(), nameOffset.Y() + res->normalFont->CharHeight());
+       res->normalFont->DrawNumber(hero->Health(), screen, healthOffset, 3);
+
+       Vector<int> healthSeparatorOffset(healthOffset.X() + 3 * res->normalFont->CharWidth(), healthOffset.Y());
+       res->normalFont->DrawChar('/', screen, healthSeparatorOffset);
+
+       Vector<int> maxHealthOffset(healthSeparatorOffset.X() + res->normalFont->CharWidth(), healthOffset.Y());
+       res->normalFont->DrawNumber(hero->MaxHealth(), screen, maxHealthOffset, 3);
+
+       Vector<int> manaLabelOffset(healthLabelOffset.X(), healthLabelOffset.Y() + res->normalFont->CharHeight());
+       res->statusLabels->Draw(screen, manaLabelOffset, 0, 2);
+
+       Vector<int> manaOffset(healthOffset.X(), healthOffset.Y() + res->normalFont->CharHeight());
+       res->normalFont->DrawNumber(hero->Mana(), screen, manaOffset, 3);
+
+       Vector<int> manaSeparatorOffset(healthSeparatorOffset.X(), manaOffset.Y());
+       res->normalFont->DrawChar('/', screen, manaSeparatorOffset);
+
+       Vector<int> maxManaOffset(maxHealthOffset.X(), manaOffset.Y());
+       res->normalFont->DrawNumber(hero->MaxMana(), screen, maxManaOffset, 3);
+}
+
+}
diff --git a/src/menu/HeroStatus.h b/src/menu/HeroStatus.h
new file mode 100644 (file)
index 0000000..1b88da2
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * HeroStatus.h
+ *
+ *  Created on: Oct 21, 2012
+ *      Author: holy
+ */
+
+#ifndef MENU_HEROSTATUS_H_
+#define MENU_HEROSTATUS_H_
+
+#include "fwd.h"
+#include "../common/fwd.h"
+#include "../geometry/Vector.h"
+
+#include <SDL.h>
+
+namespace menu {
+
+class HeroStatus {
+
+public:
+       HeroStatus();
+       ~HeroStatus();
+
+public:
+       void SetResources(const Resources *r) { res = r; }
+       void SetHero(const common::Hero *h) { hero = h; }
+       void SetPosition(const geometry::Vector<int> &p) { position = p; }
+
+       int Width() const;
+       int Height() const;
+       geometry::Vector<int> Size() const { return geometry::Vector<int>(Width(), Height()); }
+
+       void Render(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
+
+private:
+       const Resources *res;
+       const common::Hero *hero;
+       geometry::Vector<int> position;
+
+};
+
+}
+
+#endif /* MENU_HEROSTATUS_H_ */
index 1243df95d4c8d39c18c601eebcbeb9d95ec14cb2..f230358b1de4c1e1c6fdd20ab61c6efb51ffb0ca 100644 (file)
@@ -11,7 +11,9 @@
 #include "../app/Application.h"
 #include "../app/Input.h"
 #include "../common/GameConfig.h"
+#include "../common/GameState.h"
 #include "../geometry/Vector.h"
+#include "../graphics/Font.h"
 #include "../graphics/Texture.h"
 
 using app::Input;
@@ -22,7 +24,13 @@ namespace menu {
 
 PartyMenu::PartyMenu(GameConfig *game)
 : game(game) {
-
+       for (int i(0); i < 4; ++i) {
+               status[i].SetHero(game->state->party[i]);
+               status[i].SetResources(game->menuResources);
+       }
+       status[1].SetPosition(Vector<int>(status[0].Width() + Res().normalFont->CharWidth(), 0));
+       status[2].SetPosition(Vector<int>(0, status[0].Height() + Res().normalFont->CharHeight()));
+       status[3].SetPosition(Vector<int>(status[0].Width() + Res().normalFont->CharWidth(), status[0].Height() + Res().normalFont->CharHeight()));
 }
 
 PartyMenu::~PartyMenu() {
@@ -65,6 +73,13 @@ void PartyMenu::UpdateWorld(float deltaT) {
 
 void PartyMenu::Render(SDL_Surface *screen) {
        Res().menubg->Render(screen, Vector<int>(), Vector<int>(screen->w, screen->h));
+       RenderHeros(screen, Vector<int>());
+}
+
+void PartyMenu::RenderHeros(SDL_Surface *screen, const geometry::Vector<int> &offset) const {
+       for (int i(0); i < 4; ++i) {
+               status[i].Render(screen, offset);
+       }
 }
 
 
index ee84239d9a19600c2d6fb313eb89f3aeaccc75e9..2172bfccc536e40bb339a052322857d21267f630 100644 (file)
@@ -8,9 +8,11 @@
 #ifndef MENU_PARTYMENU_H_
 #define MENU_PARTYMENU_H_
 
-#include "Resources.h"
+#include "fwd.h"
+#include "HeroStatus.h"
 #include "../app/State.h"
-#include "../common/GameConfig.h"
+#include "../common/fwd.h"
+#include "../geometry/Vector.h"
 
 namespace menu {
 
@@ -38,7 +40,10 @@ private:
 
        virtual void OnResize(int width, int height);
 
+       void RenderHeros(SDL_Surface *screen, const geometry::Vector<int> &offset) const;
+
 private:
+       HeroStatus status[4];
        common::GameConfig *game;
 
 };
index 8969eb8e8ba514c8ee7f4df91f3043c668177bb5..bc6f2041a3b8779b4674a8a0c48668a169681e25 100644 (file)
@@ -16,6 +16,10 @@ struct Resources {
 
        graphics::Texture *menubg;
 
+       graphics::Font *normalFont;
+
+       graphics::Sprite *statusLabels;
+
        Resources();
 
 };
index 642eae3ea25d2ee9fb8dc9d219dbcd029f80e0fc..888552541ef72055b9296f783b45c0aa343cdf36 100644 (file)
@@ -10,6 +10,7 @@
 
 namespace menu {
 
+class HeroStatus;
 class PartyMenu;
 struct Resources;
 
index 8a1532b71e4b679183ffd0079da7f2890df107b4..93e82cb0cf5023a0b9f084120f5b5b21403609d2 100644 (file)
Binary files a/test-data/normal-font.png and b/test-data/normal-font.png differ
diff --git a/test-data/status-labels.png b/test-data/status-labels.png
new file mode 100644 (file)
index 0000000..93fcebc
Binary files /dev/null and b/test-data/status-labels.png differ