Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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);
                }
            }
        }