71 lines
2.0 KiB
C#
71 lines
2.0 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|