| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | 
							- /*
 
-  * BonusEnum.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 "BonusEnum.h"
 
- #include "../json/JsonUtils.h"
 
- VCMI_LIB_NAMESPACE_BEGIN
 
- #define BONUS_VALUE(x) { #x, BonusValueType::x },
 
- 	const std::map<std::string, BonusValueType> bonusValueMap = { BONUS_VALUE_LIST };
 
- #undef BONUS_VALUE
 
- #define BONUS_SOURCE(x) { #x, BonusSource::x },
 
- 	const std::map<std::string, BonusSource> bonusSourceMap = { BONUS_SOURCE_LIST };
 
- #undef BONUS_SOURCE
 
- #define BONUS_ITEM(x) { #x, BonusDuration::x },
 
- const std::map<std::string, BonusDuration::Type> bonusDurationMap =
 
- {
 
- 	BONUS_ITEM(PERMANENT)
 
- 	BONUS_ITEM(ONE_BATTLE)
 
- 	BONUS_ITEM(ONE_DAY)
 
- 	BONUS_ITEM(ONE_WEEK)
 
- 	BONUS_ITEM(N_TURNS)
 
- 	BONUS_ITEM(N_DAYS)
 
- 	BONUS_ITEM(UNTIL_BEING_ATTACKED)
 
- 	BONUS_ITEM(UNTIL_ATTACK)
 
- 	BONUS_ITEM(STACK_GETS_TURN)
 
- 	BONUS_ITEM(COMMANDER_KILLED)
 
- 	BONUS_ITEM(UNTIL_OWN_ATTACK)
 
- 	{ "UNITL_BEING_ATTACKED", BonusDuration::UNTIL_BEING_ATTACKED }//typo, but used in some mods
 
- };
 
- #undef BONUS_ITEM
 
- #define BONUS_ITEM(x) { #x, BonusLimitEffect::x },
 
- const std::map<std::string, BonusLimitEffect> bonusLimitEffect =
 
- {
 
- 	BONUS_ITEM(NO_LIMIT)
 
- 	BONUS_ITEM(ONLY_DISTANCE_FIGHT)
 
- 	BONUS_ITEM(ONLY_MELEE_FIGHT)
 
- };
 
- #undef BONUS_ITEM
 
- namespace BonusDuration
 
- {
 
- 	JsonNode toJson(const Type & duration)
 
- 	{
 
- 		std::vector<std::string> durationNames;
 
- 		for(size_t durBit = 0; durBit < Size; durBit++)
 
- 		{
 
- 			Type value = duration & (1 << durBit);
 
- 			if(value)
 
- 				durationNames.push_back(vstd::findKey(bonusDurationMap, value));
 
- 		}
 
- 		if(durationNames.size() == 1)
 
- 		{
 
- 			return JsonNode(durationNames[0]);
 
- 		}
 
- 		else
 
- 		{
 
- 			JsonNode node;
 
- 			for(const std::string & dur : durationNames)
 
- 				node.Vector().emplace_back(dur);
 
- 			return node;
 
- 		}
 
- 	}
 
- }
 
- VCMI_LIB_NAMESPACE_END
 
 
  |