NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Common/DelayMoraleDamage.cs

70 lines
2.1 KiB
C#

using System.Collections.Generic;
using Gameplay.Level;
using Gameplay.Unit;
namespace Gameplay.Common
{
public class DelayMoraleDamage
{
public GameUnit owner;
public List<int> delayDamages;
public List<float> delayTimes;
public DelayMoraleDamage(GameUnit owner)
{
this.owner = owner;
delayDamages = new List<int>();
delayTimes = new List<float>();
}
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--;
}
}
}
}
}