74 lines
2.7 KiB
C#
74 lines
2.7 KiB
C#
|
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
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|