Exemplo n.º 1
0
        private void StepUnit(CombatUnit unit)
        {
            if (unit.Energy < unit.EnergyMax && unit.EnergyMax > 0)
            {
                unit.Energy = System.Math.Min(unit.Energy + 0.03516f, unit.EnergyMax);
            }

            if (unit.FramesUntilNextAttack > 0)
            {
                unit.FramesUntilNextAttack--;
            }
            if (unit.SecondaryAttackFrame == SimulationFrame && unit.AdditionalAttacksRemaining > 0)
            {
                unit.PerformAdditionalAttack(this);
            }

            Action action = unit.GetAction(this);

            if (!(action is Attack))
            {
                unit.AdditionalAttacksRemaining = 0;
            }
            action.Perform(this, unit);

            foreach (Buff buff in unit.Buffs)
            {
                buff.OnFrame(this, unit);
            }

            bool buffRemoved = false;

            for (int i = unit.Buffs.Count - 1; i >= 0; i--)
            {
                Buff buff = unit.Buffs[i];
                if (buff.ExpireFrame > SimulationFrame)
                {
                    continue;
                }
                buffRemoved = true;
                unit.Buffs.RemoveAt(i);
                if (buff is DamageProcessor)
                {
                    unit.DamageProcessors.Remove((DamageProcessor)buff);
                }
            }
            if (buffRemoved)
            {
                unit.RecalculateBuffs();
            }
        }