void Flash::update() { for (auto it = m_damageNumbers.begin(); it != m_damageNumbers.end();) { it->color.a = 255 - (2 * it->life); it->life++; if (it->life == 32) { it = m_damageNumbers.erase(it); } else { ++it; } } if (isFlashing()) { m_ticks++; if (m_ticks >= m_speed) { m_currentFlash++; m_ticks = 0; } } if (isFading()) { m_fadeCounter -= m_fadeSpeed; } if (activeEffect()) { if (!m_activeEffect->complete()) { m_activeEffect->update(); } else { delete m_activeEffect; m_activeEffect = 0; } } }
FGAEffectHandle FGAActiveEffectContainer::AddActiveEffect(FGAEffectSpec& EffectIn, const FGAEffectContext& Ctx) { FGAEffectHandle handle = FGAEffectHandle::GenerateHandle(); TSharedPtr<FGAActiveDuration> tempPeriodic = MakeShareable(new FGAActiveDuration(Ctx, EffectIn, handle)); tempPeriodic->ActivateEffect(); FGAActiveEffect activeEffect(handle, EffectIn, Ctx.Target->GetWorld()->GetTimeSeconds(), EffectIn.UIData, EffectIn.EffectCue); activeEffect.Duration = EffectIn.EffectDuration.Duration; activeEffect.Period = EffectIn.EffectDuration.Period; RepActiveEffects.Add(activeEffect); ActiveEffects.Add(handle, tempPeriodic); return handle; }