// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using Microsoft.MixedReality.Toolkit.Utilities; using System; using System.Collections; using UnityEngine; namespace Microsoft.MixedReality.Toolkit.Input { /// /// An Input Action for mapping an action to an Input Sources Button, Joystick, Sensor, etc. /// [Serializable] public struct MixedRealityInputAction : IEqualityComparer { /// /// Constructor. /// public MixedRealityInputAction(uint id, string description, AxisType axisConstraint = AxisType.None) { this.id = id; this.description = description; this.axisConstraint = axisConstraint; } public static MixedRealityInputAction None { get; } = new MixedRealityInputAction(0, "None"); /// /// The Unique Id of this Input Action. /// public uint Id => id; [SerializeField] private uint id; /// /// A short description of the Input Action. /// public string Description => description; [SerializeField] private string description; /// /// The Axis constraint for the Input Action /// public AxisType AxisConstraint => axisConstraint; [SerializeField] private AxisType axisConstraint; public static bool operator ==(MixedRealityInputAction left, MixedRealityInputAction right) { return left.Equals(right); } public static bool operator !=(MixedRealityInputAction left, MixedRealityInputAction right) { return !left.Equals(right); } #region IEqualityComparer Implementation bool IEqualityComparer.Equals(object left, object right) { if (ReferenceEquals(null, left) || ReferenceEquals(null, right)) { return false; } if (!(left is MixedRealityInputAction) || !(right is MixedRealityInputAction)) { return false; } return ((MixedRealityInputAction)left).Equals((MixedRealityInputAction)right); } public bool Equals(MixedRealityInputAction other) { return Id == other.Id && AxisConstraint == other.AxisConstraint; } public override bool Equals(object obj) { if (ReferenceEquals(null, obj)) { return false; } return obj is MixedRealityInputAction action && Equals(action); } int IEqualityComparer.GetHashCode(object obj) { return obj is MixedRealityInputAction action ? action.GetHashCode() : 0; } public override int GetHashCode() { return $"{Id}.{AxisConstraint}".GetHashCode(); } #endregion IEqualityComparer Implementation } }