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:
		| @@ -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(); | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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); | ||||
| } | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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; | ||||
|   | ||||
| @@ -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 } | ||||
| 		}, | ||||
| 		{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user