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

Move rest of commonly-accessed UnitState queries to bonus cache

This commit is contained in:
Ivan Savenko
2024-12-25 21:25:06 +00:00
parent 05397e2aaf
commit 157d6d30c8
9 changed files with 55 additions and 24 deletions

View File

@ -526,9 +526,16 @@ bool CUnitState::isCaster() const
return casts.total() > 0;//do not check specific cast abilities here
}
bool CUnitState::canShootBlocked() const
{
return bonusCache.cache.getBonusValue(UnitBonusValuesProxy::HAS_FREE_SHOOTING);
}
bool CUnitState::canShoot() const
{
return shots.canUse(1);
return
shots.canUse(1) &&
bonusCache.cache.getBonusValue(UnitBonusValuesProxy::FORGETFULL) <= 1; //advanced+ level
}
bool CUnitState::isShooter() const
@ -563,6 +570,11 @@ int64_t CUnitState::getTotalHealth() const
return health.total();
}
int64_t CUnitState::getMaxHealth() const
{
return std::max(1, bonusCache.cache.getBonusValue(UnitBonusValuesProxy::STACK_HEALTH));
}
BattleHex CUnitState::getPosition() const
{
return position;
@ -686,6 +698,11 @@ BattlePhases::Type CUnitState::battleQueuePhase(int turn) const
}
}
bool CUnitState::isHypnotized() const
{
return bonusCache.cache.getBonusValue(UnitBonusValuesProxy::HYPNOTIZED);
}
int CUnitState::getTotalAttacks(bool ranged) const
{
return 1 + (ranged ?
@ -943,6 +960,10 @@ const UnitBonusValuesProxy::SelectorsArray * CUnitState::generateBonusSelectors(
defence.And(selectorRanged),//DEFENCE_MELEE,
defence.And(selectorRanged),//DEFENCE_RANGED,
Selector::type()(BonusType::IN_FRENZY),//IN_FRENZY,
Selector::type()(BonusType::FORGETFULL),//FORGETFULL,
Selector::type()(BonusType::HYPNOTIZED),//HYPNOTIZED,
Selector::type()(BonusType::FREE_SHOOTING).Or(Selector::type()(BonusType::SIEGE_WEAPON)),//HAS_FREE_SHOOTING,
Selector::type()(BonusType::STACK_HEALTH),//STACK_HEALTH,
};
return &selectors;