| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | /* * ImageLocator.cpp, part of VCMI engine * * Authors: listed in file AUTHORS in main folder * * License: GNU General Public License v2.0 or later * Full text of license available in license.txt file, in main folder * */#include "StdInc.h"#include "ImageLocator.h"#include "../gui/CGuiHandler.h"#include "IScreenHandler.h"#include "../../lib/json/JsonNode.h"ImageLocator::ImageLocator(const JsonNode & config)	: image(ImagePath::fromJson(config["file"]))	, defFile(AnimationPath::fromJson(config["defFile"]))	, defFrame(config["defFrame"].Integer())	, defGroup(config["defGroup"].Integer())	, verticalFlip(config["verticalFlip"].Bool())	, horizontalFlip(config["horizontalFlip"].Bool()){}ImageLocator::ImageLocator(const ImagePath & path)	: image(path){}ImageLocator::ImageLocator(const AnimationPath & path, int frame, int group)	: defFile(path)	, defFrame(frame)	, defGroup(group){}bool ImageLocator::operator<(const ImageLocator & other) const{	if(image != other.image)		return image < other.image;	if(defFile != other.defFile)		return defFile < other.defFile;	if(defGroup != other.defGroup)		return defGroup < other.defGroup;	if(defFrame != other.defFrame)		return defFrame < other.defFrame;	if(verticalFlip != other.verticalFlip)		return verticalFlip < other.verticalFlip;	if(horizontalFlip != other.horizontalFlip)		return horizontalFlip < other.horizontalFlip;	if(scalingFactor != other.scalingFactor)		return scalingFactor < other.scalingFactor;	if(playerColored != other.playerColored)		return playerColored < other.playerColored;	if(layer != other.layer)		return layer < other.layer;	return false;}bool ImageLocator::empty() const{	return !image.has_value() && !defFile.has_value();}ImageLocator ImageLocator::copyFile() const{	ImageLocator result;	result.scalingFactor = 1;	result.image = image;	result.defFile = defFile;	result.defFrame = defFrame;	result.defGroup = defGroup;	return result;}ImageLocator ImageLocator::copyFileTransform() const{	ImageLocator result = copyFile();	result.horizontalFlip = horizontalFlip;	result.verticalFlip = verticalFlip;	return result;}ImageLocator ImageLocator::copyFileTransformScale() const{	return *this; // full copy}std::string ImageLocator::toString() const{	std::string result;	if (empty())		return "invalid";	if (image)	{		result += image->getOriginalName();		assert(!result.empty());	}	if (defFile)	{		result += defFile->getOriginalName();		assert(!result.empty());		result += "-" + std::to_string(defGroup);		result += "-" + std::to_string(defFrame);	}	if (verticalFlip)		result += "-vflip";	if (horizontalFlip)		result += "-hflip";	if (scalingFactor > 1)		result += "-scale" + std::to_string(scalingFactor);	if (playerColored.isValidPlayer())		result += "-player" + playerColored.toString();	if (layer != EImageLayer::ALL)		result += "-layer" + std::to_string(static_cast<int>(layer));	return result;}
 |