encompass-cs/encompass-cs/TimeManager.cs

81 lines
2.7 KiB
C#
Raw Permalink Normal View History

using System.Collections.Generic;
namespace Encompass
{
internal class TimeManager
{
2020-03-20 07:09:57 +00:00
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
{
2020-03-20 07:09:57 +00:00
if (_timeDilationDatas.Count == 0) { return 1; }
2019-12-17 04:40:15 +00:00
var average = 0.0;
2020-03-20 07:09:57 +00:00
foreach (var data in _timeDilationDatas)
2019-12-17 04:40:15 +00:00
{
average += data.Factor;
}
2020-03-20 07:09:57 +00:00
return average / _timeDilationDatas.Count;
}
}
public bool TimeDilationActive
{
2020-03-20 07:09:57 +00:00
get => _timeDilationDatas.Count != 0;
}
public void Update(double dt)
{
2020-03-20 07:09:57 +00:00
for (var i = _timeDilationDatas.Count - 1; i >= 0; i--)
{
2020-03-20 07:09:57 +00:00
var data = _timeDilationDatas[i];
2020-03-20 07:09:57 +00:00
data.ElapsedTime += dt;
2020-03-20 07:09:57 +00:00
if (data.ElapsedTime > data.EaseInTime + data.ActiveTime + data.EaseOutTime)
{
2020-03-20 07:09:57 +00:00
_timeDilationDatas.RemoveAt(i);
}
else
{
2020-03-20 07:09:57 +00:00
_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)
{
2020-03-20 07:09:57 +00:00
_timeDilationDatas.Add(new TimeDilationData
(
factor,
easeInTime,
easeInFunction,
activeTime,
easeOutTime,
easeOutFunction
));
}
}
}