using System.Collections.Generic; using Gameplay.Level; using Gameplay.Unit; namespace Gameplay.Common { public class DelayMoraleDamage { public GameUnit owner; public List delayDamages; public List delayTimes; public DelayMoraleDamage(GameUnit owner) { this.owner = owner; delayDamages = new List(); delayTimes = new List(); } public void AddSecondsDamage(int totalDamage, int totalSeconds) { var currentTime = LevelManager.Instance.CurrentLevel.LevelTime; if (totalDamage <= totalSeconds) { totalSeconds = totalDamage; // 每秒扣1点 for (int i = 0; i < totalSeconds; i++) { _PostDelayDamage(1, currentTime + i + 1); } } else { var div = totalDamage / totalSeconds; var remainValue = totalDamage; // 前面每秒扣div点 for (int i = 0; i < totalSeconds - 1; i++) { _PostDelayDamage(div, currentTime + i + 1); remainValue -= div; } // 最后一秒扣剩余的 _PostDelayDamage(remainValue, currentTime + totalSeconds); } } private void _PostDelayDamage(int damage, float delayTime) { delayDamages.Add(damage); delayTimes.Add(delayTime); } public void LogicUpdate(float dt) { var levelTime = LevelManager.Instance.CurrentLevel.LevelTime; for (int i = 0; i < delayTimes.Count; i++) { var time = delayTimes[i]; if (levelTime > time) { owner.DamageMoraleImd(owner, delayDamages[i]); delayDamages.RemoveAt(i); delayTimes.RemoveAt(i); i--; } } } } }