Untitled

 avatar
unknown
csharp
a month ago
946 B
5
Indexable
    public class PoisonEffect : GameEffect
    {
        public int Ticks = 10;
        public float Frequency = 1f;
        public float Damage = 1f;

        private float _timer;
        
        public bool Expired => Ticks <= 0;

        public static float GetPoisonDamage(GameEntity gameEntity) => gameEntity.EffectsReadonly.OfType<PoisonEffect>().Sum(pe => pe.RemainingDamage());

        public float RemainingDamage()
        {
            return Ticks * Damage;
        }

        public override void OnUpdateOwner()
        {
            _timer += Time.deltaTime;

            if (_timer > Frequency)
            {
                Entity.CmdDamageEntity(Damage, false, null, true, DamageType.DoT);
                _timer = 0f;
                
                Ticks--;
                
                if (Ticks <= 0)
                {
                    Entity.CmdRemoveEffect(this);
                }
            }
        }
    }