public void ProcessActiveEffects(Unit unit, ElapsedTime elapsedTime) { if (GameConfiguration.GameSpeed == GameSpeedTypes.Paused) { return; } var scaledTimePassed = (elapsedTime.DeltaTime.Milliseconds / 1000.0f) / GameConfiguration.GameSpeed; for (var i = unit.ActiveEffects.Count - 1; i >= 0; i--) { var activeBuff = unit.ActiveEffects[i]; activeBuff.ActiveTime += scaledTimePassed; activeBuff.TimeSinceTick += scaledTimePassed; if (activeBuff.ActiveTime >= activeBuff.Effect.Duration) { unit.ActiveEffects.RemoveAt(i); var effectExpiredEvent = new EffectExpiredEvent { ActiveEffect = activeBuff, Unit = unit }; EventSystem.Publish(effectExpiredEvent); } if (activeBuff.Effect.Frequency > 0 && activeBuff.TimeSinceTick >= activeBuff.Effect.Frequency) { activeBuff.TimeSinceTick -= activeBuff.Effect.Frequency; var tickCount = activeBuff.TicksSoFar(); var effectExpiredEvent = new EffectTickedEvent { ActiveEffect = activeBuff, Unit = unit, TickNumber = tickCount }; EventSystem.Publish(effectExpiredEvent); } } }
public void Execute(IEntity entity) { var effectableComponent = entity.GetComponent <EffectableComponent>(); var deltaTimeInMilliseconds = Time.deltaTime * 1000; for (var i = effectableComponent.ActiveEffects.Count - 1; i >= 0; i--) { var activeBuff = effectableComponent.ActiveEffects[i]; activeBuff.ActiveTime += deltaTimeInMilliseconds; activeBuff.TimeSinceTick += deltaTimeInMilliseconds; if (activeBuff.ActiveTime >= activeBuff.Effect.Duration) { effectableComponent.ActiveEffects.RemoveAt(i); var effectExpiredEvent = new EffectExpiredEvent { ActiveEffect = activeBuff, Entity = entity }; EventSystem.Publish(effectExpiredEvent); } if (activeBuff.Effect.Frequency > 0 && activeBuff.TimeSinceTick >= activeBuff.Effect.Frequency) { activeBuff.TimeSinceTick -= activeBuff.Effect.Frequency; var tickCount = activeBuff.TicksSoFar(); var effectExpiredEvent = new EffectTickedEvent { ActiveEffect = activeBuff, Entity = entity, TickNumber = tickCount }; EventSystem.Publish(effectExpiredEvent); } } }