using System.Collections.Generic; namespace UnityEngine.InputSystem.Utilities { /// <summary> /// Compare two <see cref="Vector2"/> by magnitude. /// </summary> /// <example> /// <code> /// </code> /// public class CompositeWithVector2Part : InputBindingComposite<Vector2> /// { /// [InputControl(layout = "Vector2")] /// public int part; /// /// public override Vector2 ReadValue(ref InputBindingCompositeContext context) /// { /// // Return the Vector3 with the greatest magnitude. /// return context.ReadValue<Vector2, Vector2MagnitudeComparer>(part); /// } /// } /// </example> public struct Vector2MagnitudeComparer : IComparer<Vector2> { public int Compare(Vector2 x, Vector2 y) { var lenx = x.sqrMagnitude; var leny = y.sqrMagnitude; if (lenx < leny) return -1; if (lenx > leny) return 1; return 0; } } /// <summary> /// Compare two <see cref="Vector3"/> by magnitude. /// </summary> /// <example> /// <code> /// </code> /// public class CompositeWithVector3Part : InputBindingComposite<Vector3> /// { /// [InputControl(layout = "Vector3")] /// public int part; /// /// public override Vector3 ReadValue(ref InputBindingCompositeContext context) /// { /// // Return the Vector3 with the greatest magnitude. /// return context.ReadValue<Vector3, Vector2MagnitudeComparer>(part); /// } /// } /// </example> public struct Vector3MagnitudeComparer : IComparer<Vector3> { public int Compare(Vector3 x, Vector3 y) { var lenx = x.sqrMagnitude; var leny = y.sqrMagnitude; if (lenx < leny) return -1; if (lenx > leny) return 1; return 0; } } }