r2mods/ilspy_dump/ror2_csproj/RoR2/Trajectory.cs

115 lines
3.4 KiB
C#

using System.Runtime.InteropServices;
using UnityEngine;
namespace RoR2;
[StructLayout(LayoutKind.Sequential, Size = 1)]
public struct Trajectory
{
private static float defaultGravity => Physics.gravity.y;
public static float CalculateApex(float initialSpeed)
{
return CalculateApex(initialSpeed, defaultGravity);
}
public static float CalculateApex(float initialSpeed, float gravity)
{
return initialSpeed * initialSpeed / (2f * (0f - gravity));
}
public static float CalculateGroundSpeed(float time, float distance)
{
return distance / time;
}
public static float CalculateGroundTravelTime(float hSpeed, float hDistance)
{
return hDistance / hSpeed;
}
public static float CalculateInitialYSpeed(float timeToTarget, float destinationYOffset)
{
return CalculateInitialYSpeed(timeToTarget, destinationYOffset, defaultGravity);
}
public static float CalculateInitialYSpeed(float timeToTarget, float destinationYOffset, float gravity)
{
return (destinationYOffset + 0.5f * (0f - gravity) * timeToTarget * timeToTarget) / timeToTarget;
}
public static float CalculateInitialYSpeedForHeight(float height)
{
return CalculateInitialYSpeedForHeight(height, defaultGravity);
}
public static float CalculateInitialYSpeedForHeight(float height, float gravity)
{
return Mathf.Sqrt(height * (2f * (0f - gravity)));
}
public static Vector3 CalculatePositionAtTime(Vector3 origin, Vector3 initialVelocity, float t)
{
return CalculatePositionAtTime(origin, initialVelocity, t, defaultGravity);
}
public static Vector3 CalculatePositionAtTime(Vector3 origin, Vector3 initialVelocity, float t, float gravity)
{
Vector3 result = origin + initialVelocity * t;
result.y += 0.5f * gravity * t * t;
return result;
}
public static float CalculatePositionYAtTime(float originY, float initialVelocityY, float t)
{
return CalculatePositionYAtTime(originY, initialVelocityY, t, defaultGravity);
}
public static float CalculatePositionYAtTime(float originY, float initialVelocityY, float t, float gravity)
{
return originY + initialVelocityY * t + 0.5f * gravity * t * t;
}
public static float CalculateInitialYSpeedForFlightDuration(float duration)
{
return CalculateInitialYSpeedForFlightDuration(duration, defaultGravity);
}
public static float CalculateInitialYSpeedForFlightDuration(float duration, float gravity)
{
return duration * gravity * -0.5f;
}
public static float CalculateFlightDuration(float vSpeed)
{
return CalculateFlightDuration(vSpeed, defaultGravity);
}
public static float CalculateFlightDuration(float vSpeed, float gravity)
{
return 2f * vSpeed / (0f - gravity);
}
public static float CalculateFlightDuration(float originY, float endY, float vSpeed)
{
return CalculateFlightDuration(originY, endY, vSpeed, defaultGravity);
}
public static float CalculateFlightDuration(float originY, float endY, float vSpeed, float gravity)
{
float num = endY - originY;
float num2 = Mathf.Sqrt(vSpeed * vSpeed - 4f * (0.5f * gravity) * (0f - num));
return (0f - vSpeed - num2) / gravity;
}
public static float CalculateGroundSpeedToClearDistance(float vSpeed, float distance)
{
return CalculateGroundSpeedToClearDistance(vSpeed, distance, defaultGravity);
}
public static float CalculateGroundSpeedToClearDistance(float vSpeed, float distance, float gravity)
{
return distance / CalculateFlightDuration(vSpeed, gravity);
}
}