mirror of
https://github.com/vcmi/vcmi.git
synced 2025-02-03 13:01:33 +02:00
Prefer composition over inheritance
This commit is contained in:
parent
00f3804604
commit
ab4fb2a228
@ -18,6 +18,7 @@
|
||||
#include "../CPlayerInterface.h"
|
||||
#include "../CGameInfo.h"
|
||||
#include "../widgets/TextControls.h"
|
||||
#include "../widgets/CGarrisonInt.h"
|
||||
#include "../windows/CCastleInterface.h"
|
||||
#include "../windows/InfoWindows.h"
|
||||
#include "../render/Canvas.h"
|
||||
@ -303,28 +304,30 @@ CHeroTooltip::CHeroTooltip(Point pos, const CGHeroInstance * hero):
|
||||
init(InfoAboutHero(hero, InfoAboutHero::EInfoLevel::DETAILED));
|
||||
}
|
||||
|
||||
CInteractableHeroTooltip::CInteractableHeroTooltip(Point pos, const CGHeroInstance * hero):
|
||||
CGarrisonInt(pos + Point(0, 73), 4, Point(0, 0), hero, nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS)
|
||||
CInteractableHeroTooltip::CInteractableHeroTooltip(Point pos, const CGHeroInstance * hero)
|
||||
{
|
||||
init(InfoAboutHero(hero, InfoAboutHero::EInfoLevel::DETAILED));
|
||||
|
||||
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
|
||||
garrison = std::make_shared<CGarrisonInt>(pos + Point(0, 73), 4, Point(0, 0), hero, nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS);
|
||||
}
|
||||
|
||||
void CInteractableHeroTooltip::init(const InfoAboutHero & hero)
|
||||
{
|
||||
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
|
||||
portrait = std::make_shared<CAnimImage>("PortraitsLarge", hero.portrait, 0, 3, 2-73);
|
||||
title = std::make_shared<CLabel>(66, 2-73, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, hero.name);
|
||||
portrait = std::make_shared<CAnimImage>("PortraitsLarge", hero.portrait, 0, 3, 2);
|
||||
title = std::make_shared<CLabel>(66, 2, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, hero.name);
|
||||
|
||||
if(hero.details)
|
||||
{
|
||||
for(size_t i = 0; i < hero.details->primskills.size(); i++)
|
||||
labels.push_back(std::make_shared<CLabel>(75 + 28 * (int)i, 58-73, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE,
|
||||
labels.push_back(std::make_shared<CLabel>(75 + 28 * (int)i, 58, FONT_SMALL, ETextAlignment::CENTER, Colors::WHITE,
|
||||
std::to_string(hero.details->primskills[i])));
|
||||
|
||||
labels.push_back(std::make_shared<CLabel>(158, 98-73, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, std::to_string(hero.details->mana)));
|
||||
labels.push_back(std::make_shared<CLabel>(158, 98, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE, std::to_string(hero.details->mana)));
|
||||
|
||||
morale = std::make_shared<CAnimImage>("IMRL22", hero.details->morale + 3, 0, 5, 74-73);
|
||||
luck = std::make_shared<CAnimImage>("ILCK22", hero.details->luck + 3, 0, 5, 91-73);
|
||||
morale = std::make_shared<CAnimImage>("IMRL22", hero.details->morale + 3, 0, 5, 74);
|
||||
luck = std::make_shared<CAnimImage>("ILCK22", hero.details->luck + 3, 0, 5, 91);
|
||||
}
|
||||
}
|
||||
|
||||
@ -383,9 +386,11 @@ CTownTooltip::CTownTooltip(Point pos, const CGTownInstance * town)
|
||||
}
|
||||
|
||||
CInteractableTownTooltip::CInteractableTownTooltip(Point pos, const CGTownInstance * town)
|
||||
: CGarrisonInt(pos + Point(0, 73), 4, Point(0, 0), town->getUpperArmy(), nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS)
|
||||
{
|
||||
init(InfoAboutTown(town, true));
|
||||
|
||||
OBJECT_CONSTRUCTION_CAPTURING(255-DISPOSE);
|
||||
garrison = std::make_shared<CGarrisonInt>(pos + Point(0, 73), 4, Point(0, 0), town->getUpperArmy(), nullptr, true, true, CGarrisonInt::ESlotsLayout::REVERSED_TWO_ROWS);
|
||||
}
|
||||
|
||||
void CInteractableTownTooltip::init(const InfoAboutTown & town)
|
||||
@ -395,37 +400,37 @@ void CInteractableTownTooltip::init(const InfoAboutTown & town)
|
||||
//order of icons in def: fort, citadel, castle, no fort
|
||||
size_t fortIndex = town.fortLevel ? town.fortLevel - 1 : 3;
|
||||
|
||||
fort = std::make_shared<CAnimImage>("ITMCLS", fortIndex, 0, 105, 31-73);
|
||||
fort = std::make_shared<CAnimImage>("ITMCLS", fortIndex, 0, 105, 31);
|
||||
|
||||
assert(town.tType);
|
||||
|
||||
size_t iconIndex = town.tType->clientInfo.icons[town.fortLevel > 0][town.built >= CGI->settings()->getInteger(EGameSettings::TOWNS_BUILDINGS_PER_TURN_CAP)];
|
||||
|
||||
build = std::make_shared<CAnimImage>("itpt", iconIndex, 0, 3, 2-73);
|
||||
title = std::make_shared<CLabel>(66, 2-73, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, town.name);
|
||||
build = std::make_shared<CAnimImage>("itpt", iconIndex, 0, 3, 2);
|
||||
title = std::make_shared<CLabel>(66, 2, FONT_SMALL, ETextAlignment::TOPLEFT, Colors::WHITE, town.name);
|
||||
|
||||
if(town.details)
|
||||
{
|
||||
hall = std::make_shared<CAnimImage>("ITMTLS", town.details->hallLevel, 0, 67, 31-73);
|
||||
hall = std::make_shared<CAnimImage>("ITMTLS", town.details->hallLevel, 0, 67, 31);
|
||||
|
||||
if(town.details->goldIncome)
|
||||
{
|
||||
income = std::make_shared<CLabel>(157, 58-73, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE,
|
||||
income = std::make_shared<CLabel>(157, 58, FONT_TINY, ETextAlignment::CENTER, Colors::WHITE,
|
||||
std::to_string(town.details->goldIncome));
|
||||
}
|
||||
if(town.details->garrisonedHero) //garrisoned hero icon
|
||||
garrisonedHero = std::make_shared<CPicture>("TOWNQKGH", 149, 76-73);
|
||||
garrisonedHero = std::make_shared<CPicture>("TOWNQKGH", 149, 76);
|
||||
|
||||
if(town.details->customRes)//silo is built
|
||||
{
|
||||
if(town.tType->primaryRes == EGameResID::WOOD_AND_ORE )// wood & ore
|
||||
{
|
||||
res1 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::WOOD), 0, 7, 75-73);
|
||||
res2 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::ORE), 0, 7, 88-73);
|
||||
res1 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::WOOD), 0, 7, 75);
|
||||
res2 = std::make_shared<CAnimImage>("SMALRES", GameResID(EGameResID::ORE), 0, 7, 88);
|
||||
}
|
||||
else
|
||||
{
|
||||
res1 = std::make_shared<CAnimImage>("SMALRES", town.tType->primaryRes, 0, 7, 81-73);
|
||||
res1 = std::make_shared<CAnimImage>("SMALRES", town.tType->primaryRes, 0, 7, 81);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -10,7 +10,6 @@
|
||||
#pragma once
|
||||
|
||||
#include "../gui/CIntObject.h"
|
||||
#include "CGarrisonInt.h"
|
||||
|
||||
VCMI_LIB_NAMESPACE_BEGIN
|
||||
|
||||
@ -22,6 +21,7 @@ class AFactionMember;
|
||||
VCMI_LIB_NAMESPACE_END
|
||||
|
||||
class CLabel;
|
||||
class CGarrisonInt;
|
||||
class CCreatureAnim;
|
||||
class CComponent;
|
||||
class CAnimImage;
|
||||
@ -82,13 +82,14 @@ public:
|
||||
};
|
||||
|
||||
/// Class for HD mod-like interactable infobox tooltip. Does not have any background!
|
||||
class CInteractableHeroTooltip : public CGarrisonInt
|
||||
class CInteractableHeroTooltip : public CIntObject
|
||||
{
|
||||
std::shared_ptr<CLabel> title;
|
||||
std::shared_ptr<CAnimImage> portrait;
|
||||
std::vector<std::shared_ptr<CLabel>> labels;
|
||||
std::shared_ptr<CAnimImage> morale;
|
||||
std::shared_ptr<CAnimImage> luck;
|
||||
std::shared_ptr<CGarrisonInt> garrison;
|
||||
|
||||
void init(const InfoAboutHero & hero);
|
||||
public:
|
||||
@ -115,7 +116,7 @@ public:
|
||||
};
|
||||
|
||||
/// Class for HD mod-like interactable infobox tooltip. Does not have any background!
|
||||
class CInteractableTownTooltip : public CGarrisonInt
|
||||
class CInteractableTownTooltip : public CIntObject
|
||||
{
|
||||
std::shared_ptr<CLabel> title;
|
||||
std::shared_ptr<CAnimImage> fort;
|
||||
@ -125,6 +126,7 @@ class CInteractableTownTooltip : public CGarrisonInt
|
||||
std::shared_ptr<CPicture> garrisonedHero;
|
||||
std::shared_ptr<CAnimImage> res1;
|
||||
std::shared_ptr<CAnimImage> res2;
|
||||
std::shared_ptr<CGarrisonInt> garrison;
|
||||
|
||||
void init(const InfoAboutTown & town);
|
||||
public:
|
||||
|
Loading…
x
Reference in New Issue
Block a user