1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-07-05 00:49:09 +02:00

Stack instance now stores non-serialized pointer to army

This commit is contained in:
Ivan Savenko
2025-04-30 22:10:06 +03:00
parent 313a1119ea
commit 1690913ba4
6 changed files with 27 additions and 16 deletions

View File

@ -820,32 +820,28 @@ ImagePath CStackInstance::bonusToGraphics(const std::shared_ptr<Bonus> & bonus)
CArmedInstance * CStackInstance::getArmy()
{
if (armyInstanceID.hasValue())
return dynamic_cast<CArmedInstance*>(cb->gameState().getObjInstance(armyInstanceID));
return nullptr;
return armyInstance;
}
const CArmedInstance * CStackInstance::getArmy() const
{
if (armyInstanceID.hasValue())
return dynamic_cast<const CArmedInstance*>(cb->getObjInstance(armyInstanceID));
return nullptr;
return armyInstance;
}
void CStackInstance::setArmy(const CArmedInstance * ArmyObj)
void CStackInstance::setArmy(CArmedInstance * ArmyObj)
{
auto oldArmy = getArmy();
if(oldArmy)
{
detachFrom(*oldArmy);
armyInstanceID = {};
armyInstance = nullptr;
}
if(ArmyObj)
{
attachTo(const_cast<CArmedInstance&>(*ArmyObj));
armyInstanceID = ArmyObj->id;
armyInstance = ArmyObj;
}
}
@ -907,12 +903,13 @@ TerrainId CStackInstance::getNativeTerrain() const
return getFactionID().toEntity(LIBRARY)->getNativeTerrain();
}
TerrainId CStackInstance::getCurrentTerrain() const
{
assert(getArmy() != nullptr);
return getArmy()->getCurrentTerrain();
}
CreatureID CStackInstance::getCreatureID() const
{
if(getType())