using UnityEngine; namespace Unity.VisualScripting { public static class MathfEx { public static float Wrap(float x, float m) { return (x % m + m) % m; } public static float NearestMultiple(float x, float f) { return Mathf.RoundToInt(x / f) * f; } public static float HigherMultiple(float x, float f) { return Mathf.CeilToInt(x / f) * f; } public static Vector2 Bezier(Vector2 s, Vector2 e, Vector2 st, Vector2 et, float t) { return (((-s + 3 * (st - et) + e) * t + (3 * (s + et) - 6 * st)) * t + 3 * (st - s)) * t + s; } public static Vector3 Bezier(Vector3 s, Vector3 e, Vector3 st, Vector3 et, float t) { return (((-s + 3 * (st - et) + e) * t + (3 * (s + et) - 6 * st)) * t + 3 * (st - s)) * t + s; } public static Matrix4x4 ScaleAroundPivot(Vector3 pivot, Vector3 scale) { return Matrix4x4.TRS(pivot, Quaternion.identity, scale) * Matrix4x4.TRS(-pivot, Quaternion.identity, Vector3.one); } public static Vector3 GetT(this Matrix4x4 trs) { return trs.GetColumn(3); } public static Quaternion GetR(this Matrix4x4 trs) { return Quaternion.LookRotation(trs.GetColumn(2), trs.GetColumn(1)); } public static Vector3 GetS(this Matrix4x4 trs) { return new Vector3(trs.GetColumn(0).magnitude, trs.GetColumn(1).magnitude, trs.GetColumn(2).magnitude); } } }