1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-10-31 00:07:39 +02:00

Merge pull request #6164 from Laserlicht/resbar

Resourcebar in adventuremap
This commit is contained in:
Ivan Savenko
2025-10-04 15:01:56 +03:00
committed by GitHub
6 changed files with 86 additions and 20 deletions

View File

@@ -46,18 +46,19 @@ AdventureMapWidget::AdventureMapWidget( std::shared_ptr<AdventureMapShortcuts> s
pos.w = ENGINE->screenDimensions().x;
pos.h = ENGINE->screenDimensions().y;
REGISTER_BUILDER("adventureInfobar", &AdventureMapWidget::buildInfobox );
REGISTER_BUILDER("adventureMapImage", &AdventureMapWidget::buildMapImage );
REGISTER_BUILDER("adventureMapButton", &AdventureMapWidget::buildMapButton );
REGISTER_BUILDER("adventureMapContainer", &AdventureMapWidget::buildMapContainer );
REGISTER_BUILDER("adventureMapGameArea", &AdventureMapWidget::buildMapGameArea );
REGISTER_BUILDER("adventureMapHeroList", &AdventureMapWidget::buildMapHeroList );
REGISTER_BUILDER("adventureMapIcon", &AdventureMapWidget::buildMapIcon );
REGISTER_BUILDER("adventureMapTownList", &AdventureMapWidget::buildMapTownList );
REGISTER_BUILDER("adventureMinimap", &AdventureMapWidget::buildMinimap );
REGISTER_BUILDER("adventureResourceDateBar", &AdventureMapWidget::buildResourceDateBar );
REGISTER_BUILDER("adventureStatusBar", &AdventureMapWidget::buildStatusBar );
REGISTER_BUILDER("adventurePlayerTexture", &AdventureMapWidget::buildTexturePlayerColored);
REGISTER_BUILDER("adventureInfobar", &AdventureMapWidget::buildInfobox );
REGISTER_BUILDER("adventureMapImage", &AdventureMapWidget::buildMapImage );
REGISTER_BUILDER("adventureMapButton", &AdventureMapWidget::buildMapButton );
REGISTER_BUILDER("adventureMapContainer", &AdventureMapWidget::buildMapContainer );
REGISTER_BUILDER("adventureMapGameArea", &AdventureMapWidget::buildMapGameArea );
REGISTER_BUILDER("adventureMapHeroList", &AdventureMapWidget::buildMapHeroList );
REGISTER_BUILDER("adventureMapIcon", &AdventureMapWidget::buildMapIcon );
REGISTER_BUILDER("adventureMapTownList", &AdventureMapWidget::buildMapTownList );
REGISTER_BUILDER("adventureMinimap", &AdventureMapWidget::buildMinimap );
REGISTER_BUILDER("adventureResourceDateBar", &AdventureMapWidget::buildResourceDateBar );
REGISTER_BUILDER("adventureStatusBar", &AdventureMapWidget::buildStatusBar );
REGISTER_BUILDER("adventurePlayerTexture", &AdventureMapWidget::buildTexturePlayerColored);
REGISTER_BUILDER("adventureResourceAdditional", &AdventureMapWidget::buildResourceAdditional );
for (const auto & entry : shortcuts->getShortcuts())
addShortcut(entry.shortcut, entry.callback);
@@ -296,7 +297,7 @@ std::shared_ptr<CIntObject> AdventureMapWidget::buildResourceDateBar(const JsonN
auto result = std::make_shared<CResDataBar>(image, area.topLeft());
for (auto & i : LIBRARY->resourceTypeHandler->getAllObjects())
for (const auto & i : LIBRARY->resourceTypeHandler->getAllObjects())
{
const auto & node = input[i.toResource()->getJsonKey()];
@@ -328,6 +329,45 @@ std::shared_ptr<CIntObject> AdventureMapWidget::buildTexturePlayerColored(const
return std::make_shared<FilledTexturePlayerColored>(area);
}
std::shared_ptr<CIntObject> AdventureMapWidget::buildResourceAdditional(const JsonNode & input)
{
OBJECT_CONSTRUCTION;
logGlobal->debug("Building widget ResourceAdditional");
Rect area = readTargetArea(input["area"]);
auto obj = std::make_shared<CIntObject>();
int remainingSpace = area.w;
int resElementSize = 84;
int fitOffset = 2;
for(const auto & resource : LIBRARY->resourceTypeHandler->getAllObjects())
{
if(resource.getNum() < GameConstants::RESOURCE_QUANTITY)
continue;
if(remainingSpace < resElementSize)
break;
auto res = std::make_shared<CResDataBar>(ImagePath::builtin("ResBarElement"), area.topRight() + Point(remainingSpace - area.w - resElementSize + fitOffset, 0));
res->setResourcePosition(resource, Point(35, 3));
addWidget("", res);
obj->addChild(res.get());
auto resIcon = std::make_shared<CAnimImage>(AnimationPath::builtin("SMALRES"), GameResID(resource), 0, res->pos.x + 4, res->pos.y + 2);
addWidget("", resIcon);
obj->addChild(resIcon.get());
remainingSpace -= resElementSize;
}
area.w = remainingSpace + fitOffset;
auto texture = std::make_shared<FilledTexturePlayerColored>(area);
addWidget("", texture);
obj->addChild(texture.get());
return obj;
}
std::shared_ptr<CHeroList> AdventureMapWidget::getHeroList()
{
return heroList;
@@ -381,11 +421,14 @@ void AdventureMapWidget::setPlayerChildren(CIntObject * widget, const PlayerColo
if(container)
setPlayerChildren(container, player);
if (textureColored)
if(textureColored)
textureColored->setPlayerColor(player);
if (textureIndexed)
if(textureIndexed)
textureIndexed->setPlayerColor(player);
if(entry)
setPlayerChildren(entry, player);
}
redraw();

View File

@@ -55,6 +55,7 @@ class AdventureMapWidget : public InterfaceObjectConfigurable
std::shared_ptr<CIntObject> buildResourceDateBar(const JsonNode & input);
std::shared_ptr<CIntObject> buildStatusBar(const JsonNode & input);
std::shared_ptr<CIntObject> buildTexturePlayerColored(const JsonNode &);
std::shared_ptr<CIntObject> buildResourceAdditional(const JsonNode &);
void setPlayerChildren(CIntObject * widget, const PlayerColor & player);
void updateActiveStateChildren(CIntObject * widget);

View File

@@ -98,9 +98,12 @@ void CResDataBar::setPlayerColor(PlayerColor player)
void CResDataBar::showPopupWindow(const Point & cursorPosition)
{
if((cursorPosition.x - pos.x) > 600)
return;
std::vector<std::shared_ptr<CComponent>> comp;
for (auto & i : LIBRARY->resourceTypeHandler->getAllObjects())
comp.push_back(std::make_shared<CComponent>(ComponentType::RESOURCE, i, GAME->interface()->cb->getResourceAmount(i)));
comp.push_back(std::make_shared<CComponent>(ComponentType::RESOURCE, GameResID(i), GAME->interface()->cb->getResourceAmount(i)));
CRClickPopup::createAndPush(LIBRARY->generaltexth->translate("core.genrltxt.270"), comp);
}

View File

@@ -51,6 +51,11 @@ void AssetGenerator::initialize()
imageFiles[ImagePath::builtin("CampaignBackground8.png")] = [this]() { return createCampaignBackground(8); };
imageFiles[ImagePath::builtin("SpelTabNone.png")] = [this](){ return createSpellTabNone();};
for (PlayerColor color(-1); color < PlayerColor::PLAYER_LIMIT; ++color)
{
std::string name = "ResBarElement" + (color == -1 ? "" : "-" + color.toString());
imageFiles[ImagePath::builtin(name)] = [this, color](){ return createResBarElement(std::max(PlayerColor(0), color));};
}
imageFiles[ImagePath::builtin("stackWindow/info-panel-0.png")] = [this](){ return createCreatureInfoPanel(2);};
imageFiles[ImagePath::builtin("stackWindow/info-panel-1.png")] = [this](){ return createCreatureInfoPanel(3);};
@@ -334,6 +339,20 @@ AssetGenerator::CanvasPtr AssetGenerator::createCampaignBackground(int selection
return image;
}
AssetGenerator::CanvasPtr AssetGenerator::createResBarElement(const PlayerColor & player) const
{
auto locator = ImageLocator(ImagePath::builtin("ARESBAR"), EImageBlitMode::COLORKEY);
std::shared_ptr<IImage> img = ENGINE->renderHandler().loadImage(locator);
img->playerColored(player);
auto image = ENGINE->renderHandler().createImage(Point(84, 22), CanvasScalingPolicy::IGNORE);
Canvas canvas = image->getCanvas();
canvas.draw(img, Point(0, 0), Rect(2, 0, 84, 22));
canvas.draw(img, Point(4, 0), Rect(29, 0, 22, 22));
return image;
}
AssetGenerator::CanvasPtr AssetGenerator::createSpellTabNone() const
{
auto img1 = ENGINE->renderHandler().loadAnimation(AnimationPath::builtin("SPELTAB"), EImageBlitMode::COLORKEY)->getImage(0);

View File

@@ -55,6 +55,7 @@ private:
CanvasPtr createCombatUnitNumberWindow(float multR, float multG, float multB) const;
CanvasPtr createCampaignBackground(int selection) const;
CanvasPtr createSpellTabNone() const;
CanvasPtr createResBarElement(const PlayerColor & player) const;
CanvasPtr createChroniclesCampaignImages(int chronicle) const;
CanvasPtr createPaletteShiftedImage(const AnimationPath & source, const std::vector<PaletteAnimation> & animation, int frameIndex, int paletteShiftCounter) const;
CanvasPtr createAdventureMapButtonClear(const PlayerColor & player, bool small) const;

View File

@@ -467,9 +467,8 @@
},
// Resource & Data bar
{
"type": "adventurePlayerTexture",
"name" : "backgroundLeftOfResourceDateBar",
"image" : "DiBoxBck.pcx",
"type": "adventureResourceAdditional",
"name" : "resourceAdditional",
"area" : { "left": 3, "bottom" : 4, "right" : 797, "height" : 21 }
},
{