| 709 | } |
| 710 | |
| 711 | bool StatusController::addUniqueEffect( |
| 712 | UniqueStatusEffect const& effect, Maybe<float> duration, Maybe<EntityId> sourceEntityId) { |
| 713 | auto statusEffectDatabase = Root::singleton().statusEffectDatabase(); |
| 714 | if (statusEffectDatabase->isUniqueEffect(effect)) { |
| 715 | auto effectConfig = statusEffectDatabase->uniqueEffectConfig(effect); |
| 716 | if ((duration && statPositive("statusImmunity")) || (effectConfig.blockingStat && statPositive(*effectConfig.blockingStat))) |
| 717 | return false; |
| 718 | |
| 719 | auto& uniqueEffect = m_uniqueEffects[effect]; |
| 720 | uniqueEffect.effectConfig = effectConfig; |
| 721 | uniqueEffect.script.setScripts(uniqueEffect.effectConfig.scripts); |
| 722 | uniqueEffect.script.setUpdateDelta(uniqueEffect.effectConfig.scriptDelta); |
| 723 | |
| 724 | uniqueEffect.metadataId = |
| 725 | m_uniqueEffectMetadata.addNetElement(make_shared<UniqueEffectMetadata>(effect, duration, sourceEntityId)); |
| 726 | |
| 727 | uniqueEffect.animatorId = UniqueEffectMetadataGroup::NullElementId; |
| 728 | if (uniqueEffect.effectConfig.animationConfig) |
| 729 | uniqueEffect.animatorId = |
| 730 | m_effectAnimators.addNetElement(make_shared<EffectAnimator>(uniqueEffect.effectConfig.animationConfig)); |
| 731 | |
| 732 | if (m_parentEntity) |
| 733 | initUniqueEffectScript(uniqueEffect); |
| 734 | |
| 735 | return true; |
| 736 | } else { |
| 737 | Logger::warn("Unique status effect '{}' not found in status effect database", effect); |
| 738 | return false; |
| 739 | } |
| 740 | } |
| 741 | |
| 742 | void StatusController::removeUniqueEffect(UniqueStatusEffect const& effect) { |
| 743 | auto& uniqueEffect = m_uniqueEffects[effect]; |
nothing calls this directly
no test coverage detected