public DamageOverTimeModifier(ModifierInfo info, Entity casterEntity, Entity targetEntity,
                                      Environment environment, Skill parentSkill, SkillId skillId,
                                      CollectionOfInteractions modifierInteractionCollection) : base(info, casterEntity, targetEntity, environment, modifierInteractionCollection)
        {
            this.info        = (DamageOverTimeInfo)info;
            this.environment = environment;
            this.parentSkill = parentSkill;
            this.skillId     = skillId;
            bool           found;
            StatsComponent casterStats = casterEntity.GetComponent <StatsComponent>();

            casterAtk               = (int)casterStats.CharacterStats.FindStats(StatsType.RawAtk, out found).BakedFloatValue;
            timeUntilNextDamage     = this.info.DotModifierConfig.interval;
            targetHealthComponent   = targetEntity.GetComponent <HealthComponent>();
            targetMovementComponent = targetEntity.GetComponent <MovementComponent>();
            characterStats          = casterStats.CharacterStats;
            casterCleanupComponent  = casterEntity.GetComponent <CleanupComponent>();
        }
        protected override List <Lifetime> CreateLifetimes(ModifierInfo modifierInfo)
        {
            DamageOverTimeInfo doti = (DamageOverTimeInfo)modifierInfo;
            StatsComponent     casterStatsComponent = casterEntity.GetComponent <StatsComponent>();
            Stats casterBurnDurationUpScaleStats    =
                casterStatsComponent.CharacterStats.FindStats(StatsType.BurnDurationUpScale);
            StatsComponent targetStatsComponent             = targetEntity.GetComponent <StatsComponent>();
            Stats          targetBurnDurationDownScaleStats =
                targetStatsComponent.CharacterStats.FindStats(StatsType.BurnDurationDownScale);

            float duration = doti.DotModifierConfig.ShowDurationInSeconds();

            _1HpLifetime = new UnpredictableDurationLifetime();
            return(new List <Lifetime>(new Lifetime[] {
                new DurationBasedLifetime(
                    duration
                    * (1 + targetBurnDurationDownScaleStats.BakedFloatValue)
                    * (1 + casterBurnDurationUpScaleStats.BakedFloatValue)
                    ),
                _1HpLifetime
            }));
        }