mirror of
https://github.com/vcmi/vcmi.git
synced 2025-01-02 00:10:22 +02:00
Implement missing functions, fixes linking errors
This commit is contained in:
parent
910ad50417
commit
77facf9387
@ -11,6 +11,7 @@
|
|||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#include "Nullkiller.h"
|
#include "Nullkiller.h"
|
||||||
|
#include "../../../lib/bonuses/BonusSubtypes.h"
|
||||||
#include "../../../lib/mapObjectConstructors/AObjectTypeHandler.h"
|
#include "../../../lib/mapObjectConstructors/AObjectTypeHandler.h"
|
||||||
#include "../../../lib/mapObjectConstructors/CObjectClassesHandler.h"
|
#include "../../../lib/mapObjectConstructors/CObjectClassesHandler.h"
|
||||||
#include "../../../lib/mapObjectConstructors/CBankInstanceConstructor.h"
|
#include "../../../lib/mapObjectConstructors/CBankInstanceConstructor.h"
|
||||||
|
@ -898,7 +898,7 @@ void BattleActionsController::tryActivateStackSpellcasting(const CStack *casterS
|
|||||||
for(const auto & bonus : *bl)
|
for(const auto & bonus : *bl)
|
||||||
{
|
{
|
||||||
if (bonus->additionalInfo[0] <= 0)
|
if (bonus->additionalInfo[0] <= 0)
|
||||||
creatureSpells.push_back(SpellID(bonus->subtype).toSpell());
|
creatureSpells.push_back(bonus->subtype.as<SpellID>().toSpell());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "../../lib/spells/ISpellMechanics.h"
|
#include "../../lib/spells/ISpellMechanics.h"
|
||||||
#include "../../lib/battle/BattleAction.h"
|
#include "../../lib/battle/BattleAction.h"
|
||||||
#include "../../lib/battle/BattleHex.h"
|
#include "../../lib/battle/BattleHex.h"
|
||||||
|
#include "../../lib/bonuses/BonusSubtypes.h"
|
||||||
#include "../../lib/CStack.h"
|
#include "../../lib/CStack.h"
|
||||||
#include "../../lib/CondSh.h"
|
#include "../../lib/CondSh.h"
|
||||||
#include "../../lib/TextOperations.h"
|
#include "../../lib/TextOperations.h"
|
||||||
@ -534,7 +535,7 @@ void BattleStacksController::stackMoved(const CStack *stack, std::vector<BattleH
|
|||||||
addNewAnim(new MovementStartAnimation(owner, stack));
|
addNewAnim(new MovementStartAnimation(owner, stack));
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!stack->hasBonus(Selector::typeSubtype(BonusType::FLYING, 1)))
|
if (!stack->hasBonus(Selector::typeSubtype(BonusType::FLYING, BonusSubtypes::movementFlying)))
|
||||||
{
|
{
|
||||||
owner.addToAnimationStage(EAnimationEvents::MOVEMENT, [&]()
|
owner.addToAnimationStage(EAnimationEvents::MOVEMENT, [&]()
|
||||||
{
|
{
|
||||||
|
@ -579,7 +579,7 @@ void CKingdomInterface::generateMinesList(const std::vector<const CGObjectInstan
|
|||||||
std::vector<const CGHeroInstance*> heroes = LOCPLINT->cb->getHeroesInfo(true);
|
std::vector<const CGHeroInstance*> heroes = LOCPLINT->cb->getHeroesInfo(true);
|
||||||
for(auto & heroe : heroes)
|
for(auto & heroe : heroes)
|
||||||
{
|
{
|
||||||
totalIncome += heroe->valOfBonuses(Selector::typeSubtype(BonusType::GENERATE_RESOURCE, GameResID(EGameResID::GOLD)));
|
totalIncome += heroe->valOfBonuses(Selector::typeSubtype(BonusType::GENERATE_RESOURCE, TBonusSubtype(GameResID(EGameResID::GOLD))));
|
||||||
}
|
}
|
||||||
|
|
||||||
//Add town income of all towns
|
//Add town income of all towns
|
||||||
|
@ -31,6 +31,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
|
|||||||
${MAIN_LIB_DIR}/bonuses/BonusList.cpp
|
${MAIN_LIB_DIR}/bonuses/BonusList.cpp
|
||||||
${MAIN_LIB_DIR}/bonuses/BonusParams.cpp
|
${MAIN_LIB_DIR}/bonuses/BonusParams.cpp
|
||||||
${MAIN_LIB_DIR}/bonuses/BonusSelector.cpp
|
${MAIN_LIB_DIR}/bonuses/BonusSelector.cpp
|
||||||
|
${MAIN_LIB_DIR}/bonuses/BonusSubtypes.cpp
|
||||||
${MAIN_LIB_DIR}/bonuses/CBonusProxy.cpp
|
${MAIN_LIB_DIR}/bonuses/CBonusProxy.cpp
|
||||||
${MAIN_LIB_DIR}/bonuses/CBonusSystemNode.cpp
|
${MAIN_LIB_DIR}/bonuses/CBonusSystemNode.cpp
|
||||||
${MAIN_LIB_DIR}/bonuses/IBonusBearer.cpp
|
${MAIN_LIB_DIR}/bonuses/IBonusBearer.cpp
|
||||||
@ -42,6 +43,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
|
|||||||
${MAIN_LIB_DIR}/campaign/CampaignState.cpp
|
${MAIN_LIB_DIR}/campaign/CampaignState.cpp
|
||||||
|
|
||||||
${MAIN_LIB_DIR}/constants/EntityIdentifiers.cpp
|
${MAIN_LIB_DIR}/constants/EntityIdentifiers.cpp
|
||||||
|
${MAIN_LIB_DIR}/constants/MetaIdentifier.cpp
|
||||||
|
|
||||||
${MAIN_LIB_DIR}/events/ApplyDamage.cpp
|
${MAIN_LIB_DIR}/events/ApplyDamage.cpp
|
||||||
${MAIN_LIB_DIR}/events/GameResumed.cpp
|
${MAIN_LIB_DIR}/events/GameResumed.cpp
|
||||||
@ -357,6 +359,7 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
|
|||||||
${MAIN_LIB_DIR}/bonuses/BonusList.h
|
${MAIN_LIB_DIR}/bonuses/BonusList.h
|
||||||
${MAIN_LIB_DIR}/bonuses/BonusParams.h
|
${MAIN_LIB_DIR}/bonuses/BonusParams.h
|
||||||
${MAIN_LIB_DIR}/bonuses/BonusSelector.h
|
${MAIN_LIB_DIR}/bonuses/BonusSelector.h
|
||||||
|
${MAIN_LIB_DIR}/bonuses/BonusSubtypes.h
|
||||||
${MAIN_LIB_DIR}/bonuses/CBonusProxy.h
|
${MAIN_LIB_DIR}/bonuses/CBonusProxy.h
|
||||||
${MAIN_LIB_DIR}/bonuses/CBonusSystemNode.h
|
${MAIN_LIB_DIR}/bonuses/CBonusSystemNode.h
|
||||||
${MAIN_LIB_DIR}/bonuses/IBonusBearer.h
|
${MAIN_LIB_DIR}/bonuses/IBonusBearer.h
|
||||||
@ -371,6 +374,8 @@ macro(add_main_lib TARGET_NAME LIBRARY_TYPE)
|
|||||||
|
|
||||||
${MAIN_LIB_DIR}/constants/EntityIdentifiers.h
|
${MAIN_LIB_DIR}/constants/EntityIdentifiers.h
|
||||||
${MAIN_LIB_DIR}/constants/Enumerations.h
|
${MAIN_LIB_DIR}/constants/Enumerations.h
|
||||||
|
${MAIN_LIB_DIR}/constants/IdentifierBase.h
|
||||||
|
${MAIN_LIB_DIR}/constants/MetaIdentifier.h
|
||||||
${MAIN_LIB_DIR}/constants/NumericConstants.h
|
${MAIN_LIB_DIR}/constants/NumericConstants.h
|
||||||
${MAIN_LIB_DIR}/constants/StringConstants.h
|
${MAIN_LIB_DIR}/constants/StringConstants.h
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "bonuses/BonusList.h"
|
#include "bonuses/BonusList.h"
|
||||||
#include "bonuses/Bonus.h"
|
#include "bonuses/Bonus.h"
|
||||||
#include "bonuses/IBonusBearer.h"
|
#include "bonuses/IBonusBearer.h"
|
||||||
|
#include "bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
#include <vcmi/Creature.h>
|
#include <vcmi/Creature.h>
|
||||||
#include <vcmi/Faction.h>
|
#include <vcmi/Faction.h>
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "CCreatureHandler.h"
|
#include "CCreatureHandler.h"
|
||||||
#include "CGeneralTextHandler.h"
|
#include "CGeneralTextHandler.h"
|
||||||
#include "spells/CSpellHandler.h"
|
#include "spells/CSpellHandler.h"
|
||||||
|
#include "bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
template class std::vector<VCMI_LIB_WRAP_NAMESPACE(CBonusType)>;
|
template class std::vector<VCMI_LIB_WRAP_NAMESPACE(CBonusType)>;
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include "constants/StringConstants.h"
|
#include "constants/StringConstants.h"
|
||||||
#include "bonuses/Limiters.h"
|
#include "bonuses/Limiters.h"
|
||||||
#include "bonuses/Updaters.h"
|
#include "bonuses/Updaters.h"
|
||||||
|
#include "bonuses/BonusSubtypes.h"
|
||||||
#include "serializer/JsonDeserializer.h"
|
#include "serializer/JsonDeserializer.h"
|
||||||
#include "serializer/JsonUpdater.h"
|
#include "serializer/JsonUpdater.h"
|
||||||
#include "mapObjectConstructors/AObjectTypeHandler.h"
|
#include "mapObjectConstructors/AObjectTypeHandler.h"
|
||||||
@ -291,6 +292,11 @@ CCreature::CCreature()
|
|||||||
fightValue = AIValue = growth = hordeGrowth = ammMin = ammMax = 0;
|
fightValue = AIValue = growth = hordeGrowth = ammMin = ammMax = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CCreature::addBonus(int val, BonusType type)
|
||||||
|
{
|
||||||
|
addBonus(val, type, TBonusSubtype::NONE);
|
||||||
|
}
|
||||||
|
|
||||||
void CCreature::addBonus(int val, BonusType type, TBonusSubtype subtype)
|
void CCreature::addBonus(int val, BonusType type, TBonusSubtype subtype)
|
||||||
{
|
{
|
||||||
auto selector = Selector::typeSubtype(type, subtype).And(Selector::source(BonusSource::CREATURE_ABILITY, getIndex()));
|
auto selector = Selector::typeSubtype(type, subtype).And(Selector::source(BonusSource::CREATURE_ABILITY, getIndex()));
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "CGeneralTextHandler.h"
|
#include "CGeneralTextHandler.h"
|
||||||
#include "StartInfo.h" // for StartInfo
|
#include "StartInfo.h" // for StartInfo
|
||||||
#include "battle/BattleInfo.h" // for BattleInfo
|
#include "battle/BattleInfo.h" // for BattleInfo
|
||||||
|
#include "bonuses/BonusSubtypes.h"
|
||||||
#include "NetPacks.h" // for InfoWindow
|
#include "NetPacks.h" // for InfoWindow
|
||||||
#include "GameSettings.h"
|
#include "GameSettings.h"
|
||||||
#include "TerrainHandler.h"
|
#include "TerrainHandler.h"
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include "CGeneralTextHandler.h"
|
#include "CGeneralTextHandler.h"
|
||||||
#include "battle/BattleInfo.h"
|
#include "battle/BattleInfo.h"
|
||||||
|
#include "bonuses/BonusSubtypes.h"
|
||||||
#include "spells/CSpellHandler.h"
|
#include "spells/CSpellHandler.h"
|
||||||
#include "NetPacks.h"
|
#include "NetPacks.h"
|
||||||
|
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "filesystem/Filesystem.h"
|
#include "filesystem/Filesystem.h"
|
||||||
#include "bonuses/Bonus.h"
|
#include "bonuses/Bonus.h"
|
||||||
#include "bonuses/Propagators.h"
|
#include "bonuses/Propagators.h"
|
||||||
|
#include "bonuses/BonusSubtypes.h"
|
||||||
#include "ResourceSet.h"
|
#include "ResourceSet.h"
|
||||||
#include "mapObjectConstructors/AObjectTypeHandler.h"
|
#include "mapObjectConstructors/AObjectTypeHandler.h"
|
||||||
#include "mapObjectConstructors/CObjectClassesHandler.h"
|
#include "mapObjectConstructors/CObjectClassesHandler.h"
|
||||||
@ -544,6 +545,11 @@ void CTownHandler::addBonusesForVanilaBuilding(CBuilding * building) const
|
|||||||
building->addNewBonus(b, building->buildingBonuses);
|
building->addNewBonus(b, building->buildingBonuses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Bonus> CTownHandler::createBonus(CBuilding * build, BonusType type, int val) const
|
||||||
|
{
|
||||||
|
return createBonus(build, type, val, TBonusSubtype::NONE, emptyPropagator());
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Bonus> CTownHandler::createBonus(CBuilding * build, BonusType type, int val, TBonusSubtype subtype) const
|
std::shared_ptr<Bonus> CTownHandler::createBonus(CBuilding * build, BonusType type, int val, TBonusSubtype subtype) const
|
||||||
{
|
{
|
||||||
return createBonus(build, type, val, subtype, emptyPropagator());
|
return createBonus(build, type, val, subtype, emptyPropagator());
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
#include "../NetPacks.h"
|
#include "../NetPacks.h"
|
||||||
#include "../CCreatureHandler.h"
|
#include "../CCreatureHandler.h"
|
||||||
|
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
#include "../serializer/JsonDeserializer.h"
|
#include "../serializer/JsonDeserializer.h"
|
||||||
#include "../serializer/JsonSerializer.h"
|
#include "../serializer/JsonSerializer.h"
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "Unit.h"
|
#include "Unit.h"
|
||||||
|
|
||||||
#include "../bonuses/Bonus.h"
|
#include "../bonuses/Bonus.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
#include "../mapObjects/CGTownInstance.h"
|
#include "../mapObjects/CGTownInstance.h"
|
||||||
#include "../spells/CSpellHandler.h"
|
#include "../spells/CSpellHandler.h"
|
||||||
#include "../GameSettings.h"
|
#include "../GameSettings.h"
|
||||||
|
@ -183,6 +183,18 @@ JsonNode Bonus::toJsonNode() const
|
|||||||
return root;
|
return root;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bonus::Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, ui32 ID)
|
||||||
|
: Bonus(Duration, Type, Src, Val, ID, TBonusSubtype::NONE, std::string())
|
||||||
|
{}
|
||||||
|
|
||||||
|
Bonus::Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, ui32 ID, std::string Desc)
|
||||||
|
: Bonus(Duration, Type, Src, Val, ID, TBonusSubtype::NONE, Desc)
|
||||||
|
{}
|
||||||
|
|
||||||
|
Bonus::Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, ui32 ID, TBonusSubtype Subtype)
|
||||||
|
: Bonus(Duration, Type, Src, Val, ID, Subtype, std::string())
|
||||||
|
{}
|
||||||
|
|
||||||
Bonus::Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, ui32 ID, TBonusSubtype Subtype, std::string Desc):
|
Bonus::Bonus(BonusDuration::Type Duration, BonusType Type, BonusSource Src, si32 Val, ui32 ID, TBonusSubtype Subtype, std::string Desc):
|
||||||
duration(Duration),
|
duration(Duration),
|
||||||
type(Type),
|
type(Type),
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "BonusEnum.h"
|
#include "BonusEnum.h"
|
||||||
#include "../constants/EntityIdentifiers.h"
|
#include "../constants/MetaIdentifier.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@ -30,50 +30,6 @@ using TLimiterPtr = std::shared_ptr<ILimiter>;
|
|||||||
using TPropagatorPtr = std::shared_ptr<IPropagator>;
|
using TPropagatorPtr = std::shared_ptr<IPropagator>;
|
||||||
using TUpdaterPtr = std::shared_ptr<IUpdater>;
|
using TUpdaterPtr = std::shared_ptr<IUpdater>;
|
||||||
|
|
||||||
namespace BonusSubtypes
|
|
||||||
{
|
|
||||||
|
|
||||||
static const TBonusSubtype creatureDamageBoth; // 0
|
|
||||||
static const TBonusSubtype creatureDamageMin; // 1
|
|
||||||
static const TBonusSubtype creatureDamageMax; // 2
|
|
||||||
|
|
||||||
static const TBonusSubtype damageTypeAll; // -1
|
|
||||||
static const TBonusSubtype damageTypeMelee; // 0
|
|
||||||
static const TBonusSubtype damageTypeRanged; // 1
|
|
||||||
|
|
||||||
static const TBonusSubtype heroMovementLand; // 1
|
|
||||||
static const TBonusSubtype heroMovementSea; // 0
|
|
||||||
|
|
||||||
static const TBonusSubtype heroMovementPenalty; // 2
|
|
||||||
static const TBonusSubtype heroMovementFull; // 1
|
|
||||||
|
|
||||||
static const TBonusSubtype deathStareGorgon; // 0
|
|
||||||
static const TBonusSubtype deathStareCommander;
|
|
||||||
|
|
||||||
static const TBonusSubtype rebirthRegular; // 0
|
|
||||||
static const TBonusSubtype rebirthSpecial; // 1
|
|
||||||
|
|
||||||
static const TBonusSubtype visionsMonsters; // 0
|
|
||||||
static const TBonusSubtype visionsHeroes; // 1
|
|
||||||
static const TBonusSubtype visionsTowns; // 2
|
|
||||||
|
|
||||||
static const TBonusSubtype immunityBattleWide; // 0
|
|
||||||
static const TBonusSubtype immunityEnemyHero; // 1
|
|
||||||
|
|
||||||
static const TBonusSubtype transmutationPerHealth; // 0
|
|
||||||
static const TBonusSubtype transmutationPerUnit; // 1
|
|
||||||
|
|
||||||
static const TBonusSubtype destructionKillPercentage; // 0
|
|
||||||
static const TBonusSubtype destructionKillAmount; // 1
|
|
||||||
|
|
||||||
static const TBonusSubtype soulStealPermanent; // 0
|
|
||||||
static const TBonusSubtype soulStealBattle; // 1
|
|
||||||
|
|
||||||
TBonusSubtype spellLevel(int level);
|
|
||||||
TBonusSubtype creatureLevel(int level);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
class DLL_LINKAGE CAddInfo : public std::vector<si32>
|
class DLL_LINKAGE CAddInfo : public std::vector<si32>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "BonusEnum.h"
|
#include "BonusEnum.h"
|
||||||
#include "BonusParams.h"
|
#include "BonusParams.h"
|
||||||
#include "BonusSelector.h"
|
#include "BonusSelector.h"
|
||||||
|
#include "BonusSubtypes.h"
|
||||||
|
|
||||||
#include "../ResourceSet.h"
|
#include "../ResourceSet.h"
|
||||||
|
|
||||||
|
56
lib/bonuses/BonusSubtypes.cpp
Normal file
56
lib/bonuses/BonusSubtypes.cpp
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Bonus.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 "BonusSubtypes.h"
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
const TBonusSubtype BonusSubtypes::creatureDamageBoth("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::creatureDamageMin("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::creatureDamageMax("", "", 2);
|
||||||
|
const TBonusSubtype BonusSubtypes::damageTypeAll("", "", -1);
|
||||||
|
const TBonusSubtype BonusSubtypes::damageTypeMelee("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::damageTypeRanged("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::heroMovementLand("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::heroMovementSea("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::heroMovementPenalty("", "", 2);
|
||||||
|
const TBonusSubtype BonusSubtypes::heroMovementFull("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::deathStareGorgon("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::deathStareCommander("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::rebirthRegular("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::rebirthSpecial("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::visionsMonsters("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::visionsHeroes("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::visionsTowns("", "", 2);
|
||||||
|
const TBonusSubtype BonusSubtypes::immunityBattleWide("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::immunityEnemyHero("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::transmutationPerHealth("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::transmutationPerUnit("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::destructionKillPercentage("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::destructionKillAmount("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::soulStealPermanent("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::soulStealBattle("", "", 1);
|
||||||
|
const TBonusSubtype BonusSubtypes::movementFlying("", "", 0);
|
||||||
|
const TBonusSubtype BonusSubtypes::movementTeleporting("", "", 1);
|
||||||
|
|
||||||
|
TBonusSubtype BonusSubtypes::spellLevel(int level)
|
||||||
|
{
|
||||||
|
assert(0); //todo
|
||||||
|
return TBonusSubtype();
|
||||||
|
}
|
||||||
|
|
||||||
|
TBonusSubtype BonusSubtypes::creatureLevel(int level)
|
||||||
|
{
|
||||||
|
assert(0); //todo
|
||||||
|
return TBonusSubtype();
|
||||||
|
}
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_END
|
64
lib/bonuses/BonusSubtypes.h
Normal file
64
lib/bonuses/BonusSubtypes.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* BonusSubtypes.h, 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
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../constants/MetaIdentifier.h"
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
using TBonusSubtype = MetaIdentifier;
|
||||||
|
|
||||||
|
class DLL_LINKAGE BonusSubtypes
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const TBonusSubtype creatureDamageBoth; // 0
|
||||||
|
static const TBonusSubtype creatureDamageMin; // 1
|
||||||
|
static const TBonusSubtype creatureDamageMax; // 2
|
||||||
|
|
||||||
|
static const TBonusSubtype damageTypeAll; // -1
|
||||||
|
static const TBonusSubtype damageTypeMelee; // 0
|
||||||
|
static const TBonusSubtype damageTypeRanged; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype heroMovementLand; // 1
|
||||||
|
static const TBonusSubtype heroMovementSea; // 0
|
||||||
|
|
||||||
|
static const TBonusSubtype heroMovementPenalty; // 2
|
||||||
|
static const TBonusSubtype heroMovementFull; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype deathStareGorgon; // 0
|
||||||
|
static const TBonusSubtype deathStareCommander;
|
||||||
|
|
||||||
|
static const TBonusSubtype rebirthRegular; // 0
|
||||||
|
static const TBonusSubtype rebirthSpecial; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype visionsMonsters; // 0
|
||||||
|
static const TBonusSubtype visionsHeroes; // 1
|
||||||
|
static const TBonusSubtype visionsTowns; // 2
|
||||||
|
|
||||||
|
static const TBonusSubtype immunityBattleWide; // 0
|
||||||
|
static const TBonusSubtype immunityEnemyHero; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype transmutationPerHealth; // 0
|
||||||
|
static const TBonusSubtype transmutationPerUnit; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype destructionKillPercentage; // 0
|
||||||
|
static const TBonusSubtype destructionKillAmount; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype soulStealPermanent; // 0
|
||||||
|
static const TBonusSubtype soulStealBattle; // 1
|
||||||
|
|
||||||
|
static const TBonusSubtype movementFlying; // 0
|
||||||
|
static const TBonusSubtype movementTeleporting; // 1
|
||||||
|
|
||||||
|
static TBonusSubtype spellLevel(int level);
|
||||||
|
static TBonusSubtype creatureLevel(int level);
|
||||||
|
};
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_END
|
@ -80,6 +80,15 @@ const FactionID FactionID::FORTRESS(7);
|
|||||||
const FactionID FactionID::CONFLUX(8);
|
const FactionID FactionID::CONFLUX(8);
|
||||||
const FactionID FactionID::NEUTRAL(9);
|
const FactionID FactionID::NEUTRAL(9);
|
||||||
|
|
||||||
|
const PrimarySkill PrimarySkill::NONE(-1);
|
||||||
|
const PrimarySkill PrimarySkill::ATTACK(0);
|
||||||
|
const PrimarySkill PrimarySkill::DEFENSE(1);
|
||||||
|
const PrimarySkill PrimarySkill::SPELL_POWER(2);
|
||||||
|
const PrimarySkill PrimarySkill::KNOWLEDGE(3);
|
||||||
|
const PrimarySkill PrimarySkill::BEGIN(0);
|
||||||
|
const PrimarySkill PrimarySkill::END(4);
|
||||||
|
const PrimarySkill PrimarySkill::EXPERIENCE(4);
|
||||||
|
|
||||||
const BoatId BoatId::NONE(-1);
|
const BoatId BoatId::NONE(-1);
|
||||||
const BoatId BoatId::NECROPOLIS(0);
|
const BoatId BoatId::NECROPOLIS(0);
|
||||||
const BoatId BoatId::CASTLE(1);
|
const BoatId BoatId::CASTLE(1);
|
||||||
@ -273,6 +282,21 @@ std::string PlayerColor::entityType()
|
|||||||
return "playerColor";
|
return "playerColor";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
si32 PrimarySkill::decode(const std::string& identifier)
|
||||||
|
{
|
||||||
|
return *VLC->identifiers()->getIdentifier(ModScope::scopeGame(), entityType(), identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string PrimarySkill::encode(const si32 index)
|
||||||
|
{
|
||||||
|
return NPrimarySkill::names[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string PrimarySkill::entityType()
|
||||||
|
{
|
||||||
|
return "primarySkill";
|
||||||
|
}
|
||||||
|
|
||||||
si32 FactionID::decode(const std::string & identifier)
|
si32 FactionID::decode(const std::string & identifier)
|
||||||
{
|
{
|
||||||
auto rawId = VLC->identifiers()->getIdentifier(ModScope::scopeGame(), entityType(), identifier);
|
auto rawId = VLC->identifiers()->getIdentifier(ModScope::scopeGame(), entityType(), identifier);
|
||||||
@ -323,6 +347,36 @@ const ObstacleInfo * Obstacle::getInfo() const
|
|||||||
return VLC->obstacles()->getById(*this);
|
return VLC->obstacles()->getById(*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
si32 SpellSchool::decode(const std::string & identifier)
|
||||||
|
{
|
||||||
|
return *VLC->identifiers()->getIdentifier(ModScope::scopeGame(), entityType(), identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SpellSchool::encode(const si32 index)
|
||||||
|
{
|
||||||
|
return SpellConfig::SCHOOL[index].jsonName;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string SpellSchool::entityType()
|
||||||
|
{
|
||||||
|
return "spellSchool";
|
||||||
|
}
|
||||||
|
|
||||||
|
si32 GameResID::decode(const std::string & identifier)
|
||||||
|
{
|
||||||
|
return *VLC->identifiers()->getIdentifier(ModScope::scopeGame(), entityType(), identifier);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string GameResID::encode(const si32 index)
|
||||||
|
{
|
||||||
|
return GameConstants::RESOURCE_NAMES[index];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string GameResID::entityType()
|
||||||
|
{
|
||||||
|
return "resource";
|
||||||
|
}
|
||||||
|
|
||||||
std::string GameResID::entityType()
|
std::string GameResID::entityType()
|
||||||
{
|
{
|
||||||
return "resource";
|
return "resource";
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "NumericConstants.h"
|
#include "NumericConstants.h"
|
||||||
|
#include "IdentifierBase.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
@ -35,62 +36,6 @@ class CNonConstInfoCallback;
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
class IdentifierBase
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
constexpr IdentifierBase():
|
|
||||||
num(-1)
|
|
||||||
{}
|
|
||||||
|
|
||||||
explicit constexpr IdentifierBase(int32_t value):
|
|
||||||
num(value)
|
|
||||||
{}
|
|
||||||
|
|
||||||
~IdentifierBase() = default;
|
|
||||||
public:
|
|
||||||
int32_t num;
|
|
||||||
|
|
||||||
constexpr int32_t getNum() const
|
|
||||||
{
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr void setNum(int32_t value)
|
|
||||||
{
|
|
||||||
num = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct hash
|
|
||||||
{
|
|
||||||
size_t operator()(const IdentifierBase & id) const
|
|
||||||
{
|
|
||||||
return std::hash<int>()(id.num);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
template <typename Handler> void serialize(Handler &h, const int version)
|
|
||||||
{
|
|
||||||
h & num;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr void advance(int change)
|
|
||||||
{
|
|
||||||
num += change;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr operator int32_t () const
|
|
||||||
{
|
|
||||||
return num;
|
|
||||||
}
|
|
||||||
|
|
||||||
friend std::ostream& operator<<(std::ostream& os, const IdentifierBase& dt)
|
|
||||||
{
|
|
||||||
return os << dt.num;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// Note: use template to force different type, blocking any Identifier<A> <=> Identifier<B> comparisons
|
// Note: use template to force different type, blocking any Identifier<A> <=> Identifier<B> comparisons
|
||||||
template<typename FinalClass>
|
template<typename FinalClass>
|
||||||
class Identifier : public IdentifierBase
|
class Identifier : public IdentifierBase
|
||||||
@ -739,18 +684,18 @@ public:
|
|||||||
DLL_LINKAGE const Creature * toCreature(const CreatureService * creatures) const;
|
DLL_LINKAGE const Creature * toCreature(const CreatureService * creatures) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CreatureID : public IdentifierWithEnum<CreatureID, CreatureIDBase>
|
class DLL_LINKAGE CreatureID : public IdentifierWithEnum<CreatureID, CreatureIDBase>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using IdentifierWithEnum<CreatureID, CreatureIDBase>::IdentifierWithEnum;
|
using IdentifierWithEnum<CreatureID, CreatureIDBase>::IdentifierWithEnum;
|
||||||
|
|
||||||
///json serialization helpers
|
///json serialization helpers
|
||||||
DLL_LINKAGE static si32 decode(const std::string & identifier);
|
static si32 decode(const std::string & identifier);
|
||||||
DLL_LINKAGE static std::string encode(const si32 index);
|
static std::string encode(const si32 index);
|
||||||
static std::string entityType();
|
static std::string entityType();
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpellIDBase : public IdentifierBase
|
class DLL_LINKAGE SpellIDBase : public IdentifierBase
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
enum Type
|
enum Type
|
||||||
@ -853,18 +798,18 @@ public:
|
|||||||
AFTER_LAST = 82
|
AFTER_LAST = 82
|
||||||
};
|
};
|
||||||
|
|
||||||
DLL_LINKAGE const CSpell * toSpell() const; //deprecated
|
const CSpell * toSpell() const; //deprecated
|
||||||
DLL_LINKAGE const spells::Spell * toSpell(const spells::Service * service) const;
|
const spells::Spell * toSpell(const spells::Service * service) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SpellID : public IdentifierWithEnum<SpellID, SpellIDBase>
|
class DLL_LINKAGE SpellID : public IdentifierWithEnum<SpellID, SpellIDBase>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using IdentifierWithEnum<SpellID, SpellIDBase>::IdentifierWithEnum;
|
using IdentifierWithEnum<SpellID, SpellIDBase>::IdentifierWithEnum;
|
||||||
|
|
||||||
///json serialization helpers
|
///json serialization helpers
|
||||||
DLL_LINKAGE static si32 decode(const std::string & identifier);
|
static si32 decode(const std::string & identifier);
|
||||||
DLL_LINKAGE static std::string encode(const si32 index);
|
static std::string encode(const si32 index);
|
||||||
static std::string entityType();
|
static std::string entityType();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -941,8 +886,8 @@ public:
|
|||||||
static const SpellSchool WATER;
|
static const SpellSchool WATER;
|
||||||
static const SpellSchool EARTH;
|
static const SpellSchool EARTH;
|
||||||
|
|
||||||
DLL_LINKAGE static si32 decode(const std::string & identifier);
|
static si32 decode(const std::string & identifier);
|
||||||
DLL_LINKAGE static std::string encode(const si32 index);
|
static std::string encode(const si32 index);
|
||||||
static std::string entityType();
|
static std::string entityType();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -966,13 +911,13 @@ public:
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
class GameResID : public IdentifierWithEnum<GameResID, GameResIDBase>
|
class DLL_LINKAGE GameResID : public IdentifierWithEnum<GameResID, GameResIDBase>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using IdentifierWithEnum<GameResID, GameResIDBase>::IdentifierWithEnum;
|
using IdentifierWithEnum<GameResID, GameResIDBase>::IdentifierWithEnum;
|
||||||
|
|
||||||
DLL_LINKAGE static si32 decode(const std::string & identifier);
|
static si32 decode(const std::string & identifier);
|
||||||
DLL_LINKAGE static std::string encode(const si32 index);
|
static std::string encode(const si32 index);
|
||||||
static std::string entityType();
|
static std::string entityType();
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -984,85 +929,4 @@ using River = RiverId;
|
|||||||
using Road = RoadId;
|
using Road = RoadId;
|
||||||
using ETerrainId = TerrainId;
|
using ETerrainId = TerrainId;
|
||||||
|
|
||||||
/// This class represents field that may contain value of multiple different identifer types
|
|
||||||
class MetaIdentifier
|
|
||||||
{
|
|
||||||
std::string entityType;
|
|
||||||
std::string stringForm;
|
|
||||||
int32_t integerForm;
|
|
||||||
|
|
||||||
void onDeserialized();
|
|
||||||
public:
|
|
||||||
|
|
||||||
static const MetaIdentifier NONE;
|
|
||||||
|
|
||||||
MetaIdentifier():
|
|
||||||
integerForm(-1)
|
|
||||||
{}
|
|
||||||
|
|
||||||
explicit MetaIdentifier(const std::string & entityType, const std::string & identifier)
|
|
||||||
: entityType(entityType)
|
|
||||||
, stringForm(identifier)
|
|
||||||
, integerForm(-1)
|
|
||||||
{
|
|
||||||
onDeserialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
explicit MetaIdentifier(const std::string & entityType, const std::string & identifier, int32_t value)
|
|
||||||
: entityType(entityType)
|
|
||||||
, stringForm(identifier)
|
|
||||||
, integerForm(value)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename IdentifierType>
|
|
||||||
explicit MetaIdentifier(const IdentifierType & identifier )
|
|
||||||
: entityType(IdentifierType::entityType())
|
|
||||||
, integerForm(identifier.getNum())
|
|
||||||
, stringForm(IdentifierType::encode(identifier.getNum()))
|
|
||||||
{
|
|
||||||
static_assert(std::is_base_of<IdentifierBase, IdentifierType>::value, "MetaIdentifier can only be constructed from Identifer class");
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t getNum() const
|
|
||||||
{
|
|
||||||
return integerForm;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string toString() const
|
|
||||||
{
|
|
||||||
return stringForm;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename IdentifierType>
|
|
||||||
IdentifierType as() const
|
|
||||||
{
|
|
||||||
IdentifierType result(integerForm);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename Handler> void serialize(Handler &h, const int version)
|
|
||||||
{
|
|
||||||
h & stringForm;
|
|
||||||
|
|
||||||
if (!h.saving)
|
|
||||||
onDeserialized();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator == (const MetaIdentifier & other) const
|
|
||||||
{
|
|
||||||
assert( (stringForm == other.stringForm) ? (integerForm == other.integerForm) : true );
|
|
||||||
|
|
||||||
return stringForm == other.stringForm;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator != (const MetaIdentifier & other) const
|
|
||||||
{
|
|
||||||
return !(*this == other);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator < (const MetaIdentifier & other) const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_END
|
VCMI_LIB_NAMESPACE_END
|
||||||
|
64
lib/constants/IdentifierBase.h
Normal file
64
lib/constants/IdentifierBase.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
/*
|
||||||
|
* IdentifierBase.h, 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
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
class IdentifierBase
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
constexpr IdentifierBase():
|
||||||
|
num(-1)
|
||||||
|
{}
|
||||||
|
|
||||||
|
explicit constexpr IdentifierBase(int32_t value):
|
||||||
|
num(value)
|
||||||
|
{}
|
||||||
|
|
||||||
|
~IdentifierBase() = default;
|
||||||
|
public:
|
||||||
|
int32_t num;
|
||||||
|
|
||||||
|
constexpr int32_t getNum() const
|
||||||
|
{
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr void setNum(int32_t value)
|
||||||
|
{
|
||||||
|
num = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct hash
|
||||||
|
{
|
||||||
|
size_t operator()(const IdentifierBase & id) const
|
||||||
|
{
|
||||||
|
return std::hash<int>()(id.num);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename Handler> void serialize(Handler &h, const int version)
|
||||||
|
{
|
||||||
|
h & num;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr void advance(int change)
|
||||||
|
{
|
||||||
|
num += change;
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr operator int32_t () const
|
||||||
|
{
|
||||||
|
return num;
|
||||||
|
}
|
||||||
|
|
||||||
|
friend std::ostream& operator<<(std::ostream& os, const IdentifierBase& dt)
|
||||||
|
{
|
||||||
|
return os << dt.num;
|
||||||
|
}
|
||||||
|
};
|
69
lib/constants/MetaIdentifier.cpp
Normal file
69
lib/constants/MetaIdentifier.cpp
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* EntityIdentifiers.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 "MetaIdentifier.h"
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
const MetaIdentifier MetaIdentifier::NONE("", "", -1);
|
||||||
|
|
||||||
|
MetaIdentifier::MetaIdentifier():
|
||||||
|
integerForm(-1)
|
||||||
|
{}
|
||||||
|
|
||||||
|
MetaIdentifier::MetaIdentifier(const std::string & entityType, const std::string & identifier)
|
||||||
|
: entityType(entityType)
|
||||||
|
, stringForm(identifier)
|
||||||
|
, integerForm(-1)
|
||||||
|
{
|
||||||
|
onDeserialized();
|
||||||
|
}
|
||||||
|
|
||||||
|
MetaIdentifier::MetaIdentifier(const std::string & entityType, const std::string & identifier, int32_t value)
|
||||||
|
: entityType(entityType)
|
||||||
|
, stringForm(identifier)
|
||||||
|
, integerForm(value)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MetaIdentifier::operator == (const MetaIdentifier & other) const
|
||||||
|
{
|
||||||
|
assert( (stringForm == other.stringForm) ? (integerForm == other.integerForm) : true );
|
||||||
|
|
||||||
|
return stringForm == other.stringForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MetaIdentifier::operator != (const MetaIdentifier & other) const
|
||||||
|
{
|
||||||
|
return !(*this == other);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MetaIdentifier::operator < (const MetaIdentifier & other) const
|
||||||
|
{
|
||||||
|
assert(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t MetaIdentifier::getNum() const
|
||||||
|
{
|
||||||
|
return integerForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string MetaIdentifier::toString() const
|
||||||
|
{
|
||||||
|
return stringForm;
|
||||||
|
}
|
||||||
|
|
||||||
|
void MetaIdentifier::onDeserialized()
|
||||||
|
{
|
||||||
|
assert(0); //TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_END
|
65
lib/constants/MetaIdentifier.h
Normal file
65
lib/constants/MetaIdentifier.h
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*
|
||||||
|
* MetaIdentifier.h, 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
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "IdentifierBase.h"
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
/// This class represents field that may contain value of multiple different identifer types
|
||||||
|
class DLL_LINKAGE MetaIdentifier
|
||||||
|
{
|
||||||
|
std::string entityType;
|
||||||
|
std::string stringForm;
|
||||||
|
int32_t integerForm;
|
||||||
|
|
||||||
|
void onDeserialized();
|
||||||
|
public:
|
||||||
|
|
||||||
|
static const MetaIdentifier NONE;
|
||||||
|
|
||||||
|
MetaIdentifier();
|
||||||
|
MetaIdentifier(const std::string & entityType, const std::string & identifier);
|
||||||
|
MetaIdentifier(const std::string & entityType, const std::string & identifier, int32_t value);
|
||||||
|
|
||||||
|
template<typename IdentifierType>
|
||||||
|
explicit MetaIdentifier(const IdentifierType & identifier )
|
||||||
|
: entityType(IdentifierType::entityType())
|
||||||
|
, integerForm(identifier.getNum())
|
||||||
|
, stringForm(IdentifierType::encode(identifier.getNum()))
|
||||||
|
{
|
||||||
|
static_assert(std::is_base_of<IdentifierBase, IdentifierType>::value, "MetaIdentifier can only be constructed from Identifer class");
|
||||||
|
}
|
||||||
|
|
||||||
|
int32_t getNum() const;
|
||||||
|
std::string toString() const;
|
||||||
|
|
||||||
|
template<typename IdentifierType>
|
||||||
|
IdentifierType as() const
|
||||||
|
{
|
||||||
|
static_assert(std::is_base_of<IdentifierBase, IdentifierType>::value, "MetaIdentifier can only be converted to Identifer class");
|
||||||
|
IdentifierType result(integerForm);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename Handler> void serialize(Handler &h, const int version)
|
||||||
|
{
|
||||||
|
h & stringForm;
|
||||||
|
|
||||||
|
if (!h.saving)
|
||||||
|
onDeserialized();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator == (const MetaIdentifier & other) const;
|
||||||
|
bool operator != (const MetaIdentifier & other) const;
|
||||||
|
bool operator < (const MetaIdentifier & other) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
VCMI_LIB_NAMESPACE_END
|
@ -16,6 +16,7 @@
|
|||||||
#include "../CConfigHandler.h"
|
#include "../CConfigHandler.h"
|
||||||
#include "../GameSettings.h"
|
#include "../GameSettings.h"
|
||||||
#include "../IGameCallback.h"
|
#include "../IGameCallback.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
#include "../serializer/JsonSerializeFormat.h"
|
#include "../serializer/JsonSerializeFormat.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
@ -37,6 +37,7 @@
|
|||||||
#include "../modding/ModScope.h"
|
#include "../modding/ModScope.h"
|
||||||
#include "../constants/StringConstants.h"
|
#include "../constants/StringConstants.h"
|
||||||
#include "../battle/Unit.h"
|
#include "../battle/Unit.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "../NetPacks.h"
|
#include "../NetPacks.h"
|
||||||
#include "../IGameCallback.h"
|
#include "../IGameCallback.h"
|
||||||
#include "../gameState/CGameState.h"
|
#include "../gameState/CGameState.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "CGTownBuilding.h"
|
#include "CGTownBuilding.h"
|
||||||
#include "../spells/CSpellHandler.h"
|
#include "../spells/CSpellHandler.h"
|
||||||
#include "../bonuses/Bonus.h"
|
#include "../bonuses/Bonus.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
#include "../battle/IBattleInfoCallback.h"
|
#include "../battle/IBattleInfoCallback.h"
|
||||||
#include "../NetPacks.h"
|
#include "../NetPacks.h"
|
||||||
#include "../CConfigHandler.h"
|
#include "../CConfigHandler.h"
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "../mapObjectConstructors/AObjectTypeHandler.h"
|
#include "../mapObjectConstructors/AObjectTypeHandler.h"
|
||||||
#include "../mapObjectConstructors/CObjectClassesHandler.h"
|
#include "../mapObjectConstructors/CObjectClassesHandler.h"
|
||||||
#include "../modding/ModScope.h"
|
#include "../modding/ModScope.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
VCMI_LIB_NAMESPACE_BEGIN
|
VCMI_LIB_NAMESPACE_BEGIN
|
||||||
|
|
||||||
|
@ -71,6 +71,11 @@ bool TurnInfo::isLayerAvailable(const EPathfindingLayer & layer) const
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TurnInfo::hasBonusOfType(BonusType type) const
|
||||||
|
{
|
||||||
|
return hasBonusOfType(type, TBonusSubtype::NONE);
|
||||||
|
}
|
||||||
|
|
||||||
bool TurnInfo::hasBonusOfType(BonusType type, TBonusSubtype subtype) const
|
bool TurnInfo::hasBonusOfType(BonusType type, TBonusSubtype subtype) const
|
||||||
{
|
{
|
||||||
switch(type)
|
switch(type)
|
||||||
@ -89,6 +94,11 @@ bool TurnInfo::hasBonusOfType(BonusType type, TBonusSubtype subtype) const
|
|||||||
bonuses->getFirst(Selector::type()(type).And(Selector::subtype()(subtype))));
|
bonuses->getFirst(Selector::type()(type).And(Selector::subtype()(subtype))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int TurnInfo::valOfBonuses(BonusType type) const
|
||||||
|
{
|
||||||
|
return valOfBonuses(type, TBonusSubtype::NONE);
|
||||||
|
}
|
||||||
|
|
||||||
int TurnInfo::valOfBonuses(BonusType type, TBonusSubtype subtype) const
|
int TurnInfo::valOfBonuses(BonusType type, TBonusSubtype subtype) const
|
||||||
{
|
{
|
||||||
switch(type)
|
switch(type)
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "../battle/Unit.h"
|
#include "../battle/Unit.h"
|
||||||
#include "../bonuses/BonusParams.h"
|
#include "../bonuses/BonusParams.h"
|
||||||
#include "../bonuses/BonusList.h"
|
#include "../bonuses/BonusList.h"
|
||||||
|
#include "../bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
#include "../modding/IdentifierStorage.h"
|
#include "../modding/IdentifierStorage.h"
|
||||||
#include "../modding/ModUtility.h"
|
#include "../modding/ModUtility.h"
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "../../lib/battle/CBattleInfoCallback.h"
|
#include "../../lib/battle/CBattleInfoCallback.h"
|
||||||
#include "../../lib/battle/IBattleState.h"
|
#include "../../lib/battle/IBattleState.h"
|
||||||
#include "../../lib/battle/BattleAction.h"
|
#include "../../lib/battle/BattleAction.h"
|
||||||
|
#include "../../lib/bonuses/BonusSubtypes.h"
|
||||||
#include "../../lib/gameState/CGameState.h"
|
#include "../../lib/gameState/CGameState.h"
|
||||||
#include "../../lib/NetPacks.h"
|
#include "../../lib/NetPacks.h"
|
||||||
#include "../../lib/spells/AbilityCaster.h"
|
#include "../../lib/spells/AbilityCaster.h"
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "../../lib/serializer/Connection.h"
|
#include "../../lib/serializer/Connection.h"
|
||||||
#include "../../lib/CGeneralTextHandler.h"
|
#include "../../lib/CGeneralTextHandler.h"
|
||||||
#include "../../lib/CHeroHandler.h"
|
#include "../../lib/CHeroHandler.h"
|
||||||
|
#include "../../lib/bonuses/BonusSubtypes.h"
|
||||||
#include "../../lib/modding/IdentifierStorage.h"
|
#include "../../lib/modding/IdentifierStorage.h"
|
||||||
#include "../../lib/CPlayerState.h"
|
#include "../../lib/CPlayerState.h"
|
||||||
#include "../../lib/GameConstants.h"
|
#include "../../lib/GameConstants.h"
|
||||||
@ -23,8 +24,8 @@
|
|||||||
#include "../../lib/StartInfo.h"
|
#include "../../lib/StartInfo.h"
|
||||||
#include "../../lib/gameState/CGameState.h"
|
#include "../../lib/gameState/CGameState.h"
|
||||||
#include "../../lib/mapObjects/CGTownInstance.h"
|
#include "../../lib/mapObjects/CGTownInstance.h"
|
||||||
#include "../lib/modding/IdentifierStorage.h"
|
#include "../../lib/modding/IdentifierStorage.h"
|
||||||
#include "../lib/modding/ModScope.h"
|
#include "../../lib/modding/ModScope.h"
|
||||||
|
|
||||||
PlayerMessageProcessor::PlayerMessageProcessor()
|
PlayerMessageProcessor::PlayerMessageProcessor()
|
||||||
:gameHandler(nullptr)
|
:gameHandler(nullptr)
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "mock/mock_BonusBearer.h"
|
#include "mock/mock_BonusBearer.h"
|
||||||
#include "mock/mock_UnitInfo.h"
|
#include "mock/mock_UnitInfo.h"
|
||||||
#include "mock/mock_UnitEnvironment.h"
|
#include "mock/mock_UnitEnvironment.h"
|
||||||
|
#include "../../lib/bonuses/BonusSubtypes.h"
|
||||||
#include "../../lib/battle/CUnitState.h"
|
#include "../../lib/battle/CUnitState.h"
|
||||||
#include "../../lib/CCreatureHandler.h"
|
#include "../../lib/CCreatureHandler.h"
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "StdInc.h"
|
#include "StdInc.h"
|
||||||
|
|
||||||
#include "TargetConditionItemFixture.h"
|
#include "TargetConditionItemFixture.h"
|
||||||
|
#include "../../../lib/bonuses/BonusSubtypes.h"
|
||||||
|
|
||||||
//FIXME: Orb of vulnerability mechanics is not such trivial (mantis issue 1791)
|
//FIXME: Orb of vulnerability mechanics is not such trivial (mantis issue 1791)
|
||||||
//TODO: NEGATE_ALL_NATURAL_IMMUNITIES special cases: dispel, chain lightning
|
//TODO: NEGATE_ALL_NATURAL_IMMUNITIES special cases: dispel, chain lightning
|
||||||
|
Loading…
Reference in New Issue
Block a user