diff options
author | WasabiRaptor <ketchupraptor@gmail.com> | 2024-03-09 16:26:13 -0500 |
---|---|---|
committer | WasabiRaptor <ketchupraptor@gmail.com> | 2024-03-09 16:26:13 -0500 |
commit | 21f9ab763ef3ef2ed7f2389b1451715dc11c1af4 (patch) | |
tree | a859d85db8ae0f9ac8fa662bc2215518cfdb6523 /source/game/StarStatusController.cpp | |
parent | dc7706184094e653dbb46310195e88604c007854 (diff) |
remove missing persistent effects
Diffstat (limited to 'source/game/StarStatusController.cpp')
-rw-r--r-- | source/game/StarStatusController.cpp | 41 |
1 files changed, 24 insertions, 17 deletions
diff --git a/source/game/StarStatusController.cpp b/source/game/StarStatusController.cpp index fcf9924..6c22a08 100644 --- a/source/game/StarStatusController.cpp +++ b/source/game/StarStatusController.cpp @@ -650,22 +650,26 @@ void StatusController::updateAnimators(float dt) { void StatusController::updatePersistentUniqueEffects() { Set<UniqueStatusEffect> activePersistentUniqueEffects; - for (auto const& categoryPair : m_persistentEffects) - activePersistentUniqueEffects.addAll(categoryPair.second.uniqueEffects); - - for (auto const& uniqueEffectName : activePersistentUniqueEffects) { - // It is important to note here that if a unique effect exists, it *may* - // not come from a persistent effect, it *may* be from an ephemeral effect. - // Here, when a persistent effect overrides an ephemeral effect, it is - // clearing the duration making it into a solely persistent effect. This - // means that by applying a persistent effect and then clearing it, you can - // remove an ephemeral effect. - if (auto existingEffect = m_uniqueEffects.ptr(uniqueEffectName)) - m_uniqueEffectMetadata.getNetElement(existingEffect->metadataId)->duration.reset(); - else - addUniqueEffect(uniqueEffectName, {}, {}); + for (auto & categoryPair : m_persistentEffects) { + for (auto & uniqueEffectName : categoryPair.second.uniqueEffects) { + // It is important to note here that if a unique effect exists, it *may* + // not come from a persistent effect, it *may* be from an ephemeral effect. + // Here, when a persistent effect overrides an ephemeral effect, it is + // clearing the duration making it into a solely persistent effect. This + // means that by applying a persistent effect and then clearing it, you can + // remove an ephemeral effect. + if (auto existingEffect = m_uniqueEffects.ptr(uniqueEffectName)) { + m_uniqueEffectMetadata.getNetElement(existingEffect->metadataId)->duration.reset(); + activePersistentUniqueEffects.add(uniqueEffectName); + } + // we want to make sure the effect it's applying actually exists + // if not then it should be removed from the list + else if (addUniqueEffect(uniqueEffectName, {}, {})) + activePersistentUniqueEffects.add(uniqueEffectName); + else + categoryPair.second.uniqueEffects.remove(uniqueEffectName); + } } - // Again, here we are using "durationless" to mean "persistent" for (auto const& key : m_uniqueEffects.keys()) { auto metadata = m_uniqueEffectMetadata.getNetElement(m_uniqueEffects[key].metadataId); @@ -678,13 +682,13 @@ float StatusController::defaultUniqueEffectDuration(UniqueStatusEffect const& ef return Root::singleton().statusEffectDatabase()->uniqueEffectConfig(effect).defaultDuration; } -void StatusController::addUniqueEffect( +bool StatusController::addUniqueEffect( UniqueStatusEffect const& effect, Maybe<float> duration, Maybe<EntityId> sourceEntityId) { auto statusEffectDatabase = Root::singleton().statusEffectDatabase(); if (statusEffectDatabase->isUniqueEffect(effect)) { auto effectConfig = statusEffectDatabase->uniqueEffectConfig(effect); if ((duration && statPositive("statusImmunity")) || (effectConfig.blockingStat && statPositive(*effectConfig.blockingStat))) - return; + return false; auto& uniqueEffect = m_uniqueEffects[effect]; uniqueEffect.effectConfig = effectConfig; @@ -701,8 +705,11 @@ void StatusController::addUniqueEffect( if (m_parentEntity) initUniqueEffectScript(uniqueEffect); + + return true; } else { Logger::warn("Unique status effect '{}' not found in status effect database", effect); + return false } } |