Added new extension "byte.Lerp". Added new extension "Log" for "TraceLogLevel". Constructors on Color no longer just truncate the float value, but also round it (+ 0.5f). New static method on Color, "Color.Lerp". Added static method "FromHSV" to Color. Added new getter method "GetHSV" on Color. Added index security on the FilePathList indexer. Merged Rectangle extensions with the type itself as read-only methods. Merged Image extensions with the type itself. Merged Texture2D extensions with the type itself. New file "Raymath.Utils" with some useful methods taken from Unity. Added "MoveTowards" extensions to RaylibExtensions. Added "TranslateLocal" and "TranslateGlobal" to Transform. Added "Load", "Export", "ExportAsCode", "Format", "Crop", and "Unload" shortcut methods to Wave. Added "IsValid" property to Wave, Texture2D, Sound, Shader, RenderTexture2D, Music, Image, Model, Material, Font, and AudioStream. Added "IsPlaying" and "IsProcessed" properties to AudioStream. Added "Load", "Play", "Stop", "Pause", "Resume", "SetBufferSizeDefault", "SetPan", "SetPitch", "SetVolume", and "Unload" shortcut methods to AudioStream. Added "Load", "Export", and "Unload" methods to AutomationEventList. Added "Default" property to Font. Added "Load", "GetMaterial", "GetTexture", "SetTexture", "SetShader", and "Unload" methods to material. Added "Draw", "DrawInstanced", "Export", "ExportAsCode", "Upload", and "Unload" methods to Mesh. Added "Load", "LoadFromMesh", "Unload", and a lot of "Draw" overloads. Added "Load", "Play", "Pause", "Stop", "SetPan", "SetPitch", "SetVolume", "Seek", and "Unload" methods to Music. Added "Load" and "Unload" methods to RenderTexture2D. Added "Load", "LoadFromMemory", "GetLocationAttrib", "SetValue", "SetTexture", "SetMatrix", and "Unload" methods to Shader. Removed unnecessary "partial" declarations.
98 lines
3.2 KiB
C#
98 lines
3.2 KiB
C#
using System;
|
|
|
|
namespace Raylib_cs;
|
|
|
|
public static partial class Raymath
|
|
{
|
|
public static float Clamp01(float value) => Clamp(value, 0.0f, 1.0f);
|
|
|
|
/// <summary>
|
|
/// Loops the value, so that it is never larger than length and never smaller than 0
|
|
/// </summary>
|
|
public static float Repeat(float value, float length)
|
|
{
|
|
return Clamp(value - MathF.Floor(value / length) * length, 0f, length);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Same as Lerp but makes sure the values interpolate correctly when they wrap around
|
|
/// 360 degrees.
|
|
/// </summary>
|
|
/// <param name="a">The start angle. A float expressed in degrees.</param>
|
|
/// <param name="b">The end angle. A float expressed in degrees.</param>
|
|
/// <param name="t">The interpolation value between the start and end angles.
|
|
/// This value is clamped to the range [0, 1].</param>
|
|
/// <returns>Returns the interpolated float result between angle a and angle b,
|
|
/// based on the interpolation value t.</returns>
|
|
public static float LerpAngle(float a, float b, float t)
|
|
{
|
|
float num = Repeat(b - a, 360f);
|
|
if (num > 180f)
|
|
{
|
|
num -= 360f;
|
|
}
|
|
|
|
return a + num * Clamp01(t);
|
|
}
|
|
|
|
public static int Sign(float value) => MathF.Sign(value);
|
|
|
|
/// <summary>
|
|
/// Returns a value that increments and decrements between zero and the
|
|
/// length. It follows the triangle wave formula where the bottom is set to zero
|
|
/// and the peak is set to length.
|
|
/// </summary>
|
|
public static float PingPong(float t, float length)
|
|
{
|
|
t = Repeat(t, length * 2f);
|
|
return length - MathF.Abs(t - length);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Moves a value current towards target.
|
|
/// </summary>
|
|
/// <param name="current">The current value.</param>
|
|
/// <param name="target">The value to move towards.</param>
|
|
/// <param name="maxDelta">The maximum change applied to the current value.</param>
|
|
public static float MoveTowards(float current, float target, float maxDelta)
|
|
{
|
|
if (MathF.Abs(target - current) <= maxDelta)
|
|
{
|
|
return target;
|
|
}
|
|
|
|
return current + Sign(target - current) * maxDelta;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Calculates the shortest difference between two angles.
|
|
/// </summary>
|
|
/// <param name="current">The current angle in degrees.</param>
|
|
/// <param name="target">The target angle in degrees.</param>
|
|
/// <returns>A value between -179 and 180, in degrees.</returns>
|
|
public static float DeltaAngle(float current, float target)
|
|
{
|
|
float num = Repeat(target - current, 360f);
|
|
if (num > 180f)
|
|
{
|
|
num -= 360f;
|
|
}
|
|
|
|
return num;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Same as MoveTowards but makes sure the values interpolate correctly when they wrap around 360 degrees.
|
|
/// </summary>
|
|
public static float MoveTowardsAngle(float current, float target, float maxDelta)
|
|
{
|
|
float num = DeltaAngle(current, target);
|
|
if (0f - maxDelta < num && num < maxDelta)
|
|
{
|
|
return target;
|
|
}
|
|
|
|
target = current + num;
|
|
return MoveTowards(current, target, maxDelta);
|
|
}
|
|
}
|