MP-TD/Assets/Scripts/Common/InputDeltaUtilities.cs

46 lines
1.4 KiB
C#

using Unity.Mathematics;
public static class InputDeltaUtilities
{
public const float InputWrapAroundValue = 2000f;
public static void AddInputDelta(ref float input, float addedDelta)
{
input = math.fmod(input + addedDelta, InputWrapAroundValue);
}
public static void AddInputDelta(ref float2 input, float2 addedDelta)
{
input = math.fmod(input + addedDelta, InputWrapAroundValue);
}
public static float GetInputDelta(float currentValue, float previousValue)
{
float delta = currentValue - previousValue;
// When delta is very large, consider that the input has wrapped around
if(math.abs(delta) > (InputWrapAroundValue * 0.5f))
{
delta += (math.sign(previousValue - currentValue) * InputWrapAroundValue);
}
return delta;
}
public static float2 GetInputDelta(float2 currentValue, float2 previousValue)
{
float2 delta = currentValue - previousValue;
// When delta is very large, consider that the input has wrapped around
if(math.abs(delta.x) > (InputWrapAroundValue * 0.5f))
{
delta.x += (math.sign(previousValue.x - currentValue.x) * InputWrapAroundValue);
}
if(math.abs(delta.y) > (InputWrapAroundValue * 0.5f))
{
delta.y += (math.sign(previousValue.y - currentValue.y) * InputWrapAroundValue);
}
return delta;
}
}