70 lines
2.1 KiB
C#
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--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|