encompass-cs/encompass-cs/TimeManager.cs

74 lines
2.7 KiB
C#
Raw Normal View History

namespace Encompass
{
internal class TimeManager
{
private TimeDilationData timeDilationData = new TimeDilationData { factor = 1 };
private bool newTimeDilationData = false;
private TimeDilationData nextFrameTimeDilationData = new TimeDilationData { factor = 1 };
private double Linear(double t, double b, double c, double d)
{
return c * t / d + b;
}
private int minPriority = int.MaxValue;
public double TimeDilationFactor
{
get
{
return timeDilationData.Factor;
}
}
public bool TimeDilationActive
{
get => TimeDilationFactor != 1;
}
public void Update(double dt)
{
if (newTimeDilationData)
{
timeDilationData = nextFrameTimeDilationData;
}
timeDilationData.elapsedTime += dt;
newTimeDilationData = false;
minPriority = int.MaxValue;
}
public void ActivateTimeDilation(double factor, double easeInTime, double activeTime, double easeOutTime, int priority)
{
ActivateTimeDilation(factor, easeInTime, Linear, activeTime, easeOutTime, Linear, priority);
}
public void ActivateTimeDilation(double factor, double easeInTime, System.Func<double, double, double, double, double> easeInFunction, double activeTime, double easeOutTime, int priority)
{
ActivateTimeDilation(factor, easeInTime, easeInFunction, activeTime, easeOutTime, Linear, priority);
}
public void ActivateTimeDilation(double factor, double easeInTime, double activeTime, double easeOutTime, System.Func<double, double, double, double, double> easeOutFunction, int priority)
{
ActivateTimeDilation(factor, easeInTime, Linear, activeTime, easeOutTime, easeOutFunction, priority);
}
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, int priority)
{
if (priority <= minPriority)
{
newTimeDilationData = true;
nextFrameTimeDilationData = new TimeDilationData
{
elapsedTime = 0,
easeInTime = easeInTime,
easeInFunction = easeInFunction,
activeTime = activeTime,
easeOutTime = easeOutTime,
easeOutFunction = easeOutFunction,
factor = factor
};
}
}
}
}