From 59b5c46a32b6c5b9ba65aefb19e9aa95445b4e0f Mon Sep 17 00:00:00 2001 From: Laserlicht <13953785+Laserlicht@users.noreply.github.com> Date: Sun, 17 Sep 2023 13:22:39 +0200 Subject: [PATCH] right side draft --- client/windows/CHeroOverview.cpp | 52 +++++++++++++++++++++++++++++--- client/windows/CHeroOverview.h | 19 ++++++++++-- 2 files changed, 64 insertions(+), 7 deletions(-) diff --git a/client/windows/CHeroOverview.cpp b/client/windows/CHeroOverview.cpp index 56b39d3bb..3b089fe99 100644 --- a/client/windows/CHeroOverview.cpp +++ b/client/windows/CHeroOverview.cpp @@ -22,14 +22,17 @@ #include "../widgets/TextControls.h" #include "../../lib/CGeneralTextHandler.h" +#include "../../lib/CCreatureHandler.h" #include "../../lib/CHeroHandler.h" CHeroOverview::CHeroOverview(const HeroTypeID & h) - : CWindowObject(BORDERED | RCLICK_POPUP), /*hero { h },*/ heroIndex { h.getNum() } + : CWindowObject(BORDERED | RCLICK_POPUP), hero { h } { OBJ_CONSTRUCTION_CAPTURING_ALL_NO_DISPOSE; - genHeroWindow(); + heroIndex = hero.getNum(); + + genHeroWindow(); center(); } @@ -84,6 +87,15 @@ void CHeroOverview::genHeader() canvas.drawColorBlended(Rect(borderOffset, 7 * borderOffset + yOffset + 64 + 20 + 44 + 20 + 130 + 44, 284, 85), ColorRGBA(0, 0, 0, alpha)); canvas.drawBorder(Rect(borderOffset - 1, 7 * borderOffset + yOffset + 64 + 20 + 44 + 20 + 130 + 44 - 1, 284 + 2, 85 + 2), borderColor); + // army title + canvas.drawColorBlended(Rect(302, borderOffset + yOffset, 292, 30), ColorRGBA(0, 0, 0, alpha)); + + // army + for(int i = 0; i < 6; i++) + { + int space = (292 - 6 * 32) / 5; + canvas.drawColorBlended(Rect(302 + i * (32 + space), 2 * borderOffset + yOffset + 30, 32, 32), ColorRGBA(0, 0, 0, alpha)); + } std::shared_ptr backgroundShapesImg = GH.renderHandler().createImage(canvas.getInternalSurface()); backgroundShapes = std::make_shared(backgroundShapesImg, pos); @@ -91,7 +103,7 @@ void CHeroOverview::genHeader() labelTitle = std::make_shared(pos.w / 2 + 8, 21, FONT_MEDIUM, ETextAlignment::CENTER, Colors::YELLOW, CGI->generaltexth->allTexts[77]); // hero image - image = std::make_shared(AnimationPath::builtin("PortraitsLarge"), (*CGI->heroh)[heroIndex]->imageIndex, 0, borderOffset, borderOffset + yOffset); + imageHero = std::make_shared(AnimationPath::builtin("PortraitsLarge"), (*CGI->heroh)[heroIndex]->imageIndex, 0, borderOffset, borderOffset + yOffset); // hero name labelHeroName = std::make_shared(64 + borderOffset + 110, borderOffset + yOffset + 20, FONT_MEDIUM, ETextAlignment::CENTER, Colors::YELLOW, (*CGI->heroh)[heroIndex]->getNameTranslated()); @@ -121,10 +133,42 @@ void CHeroOverview::genHeader() // speciality description labelSpecialityDescription = std::make_shared(Rect(2 * borderOffset, 8 * borderOffset + yOffset + 64 + 20 + 44 + 20 + 130 + 44 - 1, 284 - borderOffset, 85 - borderOffset), FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, (*CGI->heroh)[heroIndex]->getSpecialtyDescriptionTranslated()); + + // army title + labelArmyTitle = std::make_shared(302 + borderOffset, 2 * borderOffset + yOffset + 2, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, "TODO: Starting Army"); + + // army + int i = 0; + for(auto & army : (*CGI->heroh)[heroIndex]->initialArmy) + { + if((*CGI->creh)[army.creature]->warMachine == ArtifactID::NONE) + { + imageArmy.push_back(std::make_shared(AnimationPath::builtin("CPRSMALL"), (*CGI->creh)[army.creature]->getIconIndex(), 0, 300 + 5 + i * 32, 30 + 100)); // size 32x32 + labelArmyNames.push_back(std::make_shared(300 + 5 + i * 32 + 16, 30 + 40 + 100, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, (*CGI->creh)[army.creature]->getNameSingularTranslated())); + labelArmyCount.push_back(std::make_shared(300 + 5 + i * 32 + 16, 30 + 60 + 100, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, (army.minAmount == army.maxAmount) ? std::to_string(army.minAmount) : std::to_string(army.minAmount) + "-" + std::to_string(army.maxAmount))); + i++; + } + } + + + // war machine title + labelWarMachineTitle = std::make_shared(300 + 5, 5 + 5 + 100 + 100, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::YELLOW, "war m"); + + // war machine + i = 0; + for(auto & army : (*CGI->heroh)[heroIndex]->initialArmy) + { + if((*CGI->creh)[army.creature]->warMachine != ArtifactID::NONE) + { + imageWarMachine.push_back(std::make_shared(AnimationPath::builtin("CPRSMALL"), (*CGI->creh)[army.creature]->getIconIndex(), 0, 300 + 5 + i * 32, 30 + 100 + 100)); // size 32x32 + labelWarMachineNames.push_back(std::make_shared(300 + 5 + i * 32 + 16, 30 + 40 + 100 + 100, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE, (*CGI->creh)[army.creature]->getNameSingularTranslated())); + i++; + } + } } void CHeroOverview::genHeroWindow() { - pos = Rect(0, 0, 450, 450 + 35); + pos = Rect(0, 0, 600, 450 + 35); genHeader(); } \ No newline at end of file diff --git a/client/windows/CHeroOverview.h b/client/windows/CHeroOverview.h index 0e12c090a..2d464cb87 100644 --- a/client/windows/CHeroOverview.h +++ b/client/windows/CHeroOverview.h @@ -20,14 +20,13 @@ class CTextBox; class CHeroOverview : public CWindowObject { - //const HeroTypeID & hero; + const HeroTypeID & hero; int heroIndex; std::shared_ptr backgroundTexture; std::shared_ptr backgroundShapes; std::shared_ptr labelTitle; - std::shared_ptr image; - + std::shared_ptr imageHero; std::shared_ptr labelHeroName; std::shared_ptr labelHeroBiography; std::shared_ptr labelHeroClass; @@ -39,6 +38,20 @@ class CHeroOverview : public CWindowObject std::shared_ptr labelSpecialityName; std::shared_ptr labelSpecialityDescription; + std::shared_ptr labelArmyTitle; + std::vector> imageArmy; + std::vector> labelArmyCount; + std::vector> labelArmyNames; + + std::shared_ptr labelWarMachineTitle; + std::vector> imageWarMachine; + std::vector> labelWarMachineNames; + + std::shared_ptr labelSpellBookTitle; + std::shared_ptr imageSpellBook; + std::vector> imageSpells; + std::vector> labelSpellsNames; + void genHeader(); void genHeroWindow();