encompass-cs/encompass-cs/TimeManager.cs

77 lines
2.6 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using System.Linq;
namespace Encompass
{
internal class TimeManager
{
private readonly List<TimeDilationData> timeDilationDatas = new List<TimeDilationData>(32);
private double Linear(double t, double b, double c, double d)
{
return (c * t / d) + b;
}
public double TimeDilationFactor
{
get
{
return timeDilationDatas.Count == 0 ? 1 : timeDilationDatas.Select(data => data.Factor).Average();
}
}
public bool TimeDilationActive
{
get => timeDilationDatas.Count != 0;
}
public void Update(double dt)
{
for (var i = timeDilationDatas.Count - 1; i >= 0; i--)
{
var data = timeDilationDatas[i];
data.elapsedTime += dt;
if (data.elapsedTime > data.easeInTime + data.activeTime + data.easeOutTime)
{
timeDilationDatas.RemoveAt(i);
}
else
{
timeDilationDatas[i] = data;
}
}
}
public void ActivateTimeDilation(double factor, double easeInTime, double activeTime, double easeOutTime)
{
ActivateTimeDilation(factor, easeInTime, Linear, activeTime, easeOutTime, Linear);
}
public void ActivateTimeDilation(double factor, double easeInTime, System.Func<double, double, double, double, double> easeInFunction, double activeTime, double easeOutTime)
{
ActivateTimeDilation(factor, easeInTime, easeInFunction, activeTime, easeOutTime, Linear);
}
public void ActivateTimeDilation(double factor, double easeInTime, double activeTime, double easeOutTime, System.Func<double, double, double, double, double> easeOutFunction)
{
ActivateTimeDilation(factor, easeInTime, Linear, activeTime, easeOutTime, easeOutFunction);
}
public void ActivateTimeDilation(double factor, double easeInTime, System.Func<double, double, double, double, double> easeInFunction, double activeTime, double easeOutTime, System.Func<double, double, double, double, double> easeOutFunction)
{
timeDilationDatas.Add(new TimeDilationData
{
elapsedTime = 0,
easeInTime = easeInTime,
easeInFunction = easeInFunction,
activeTime = activeTime,
easeOutTime = easeOutTime,
easeOutFunction = easeOutFunction,
factor = factor
});
}
}
}