123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #if UNITY_EDITOR && UNITY_INPUT_SYSTEM_PROJECT_WIDE_ACTIONS
- using System;
- using UnityEditor;
-
- namespace UnityEngine.InputSystem.Editor
- {
- internal readonly struct SerializedInputAction
- {
- public SerializedInputAction(SerializedProperty serializedProperty)
- {
- // TODO: check that the passed serialized property actually is an InputAction. Reflect over all
- // serialized fields and make sure they're present?
- wrappedProperty = serializedProperty ?? throw new ArgumentNullException(nameof(serializedProperty));
-
- id = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Id)).stringValue;
- name = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Name)).stringValue;
- expectedControlType = ReadExpectedControlType(serializedProperty);
- type = (InputActionType)serializedProperty.FindPropertyRelative(nameof(InputAction.m_Type)).intValue;
- interactions = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Interactions)).stringValue;
- processors = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Processors)).stringValue;
- propertyPath = wrappedProperty.propertyPath;
- initialStateCheck = ReadInitialStateCheck(serializedProperty);
- actionTypeTooltip = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Type)).GetTooltip();
- expectedControlTypeTooltip = serializedProperty.FindPropertyRelative(nameof(InputAction.m_ExpectedControlType)).GetTooltip();
- }
-
- public string id { get; }
- public string name { get; }
- public string expectedControlType { get; }
- public InputActionType type { get; }
- public string interactions { get; }
- public string processors { get; }
- public string propertyPath { get; }
- public bool initialStateCheck { get; }
- public string actionTypeTooltip { get; }
- public string expectedControlTypeTooltip { get; }
- public SerializedProperty wrappedProperty { get; }
-
- private static string ReadExpectedControlType(SerializedProperty serializedProperty)
- {
- var controlType = serializedProperty.FindPropertyRelative(nameof(InputAction.m_ExpectedControlType)).stringValue;
- if (!string.IsNullOrEmpty(controlType))
- return controlType;
-
- var actionType = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Type)).intValue;
- return actionType == (int)InputActionType.Button ? "Button" : null;
- }
-
- private static bool ReadInitialStateCheck(SerializedProperty serializedProperty)
- {
- var actionFlags = serializedProperty.FindPropertyRelative(nameof(InputAction.m_Flags));
- return (actionFlags.intValue & (int)InputAction.ActionFlags.WantsInitialStateCheck) != 0;
- }
-
- public bool Equals(SerializedInputAction other)
- {
- return name == other.name
- && expectedControlType == other.expectedControlType
- && type == other.type
- && interactions == other.interactions
- && processors == other.processors
- && initialStateCheck == other.initialStateCheck
- && actionTypeTooltip == other.actionTypeTooltip
- && expectedControlTypeTooltip == other.expectedControlTypeTooltip
- && propertyPath == other.propertyPath;
- }
-
- public override bool Equals(object obj)
- {
- return obj is SerializedInputAction other && Equals(other);
- }
-
- public override int GetHashCode()
- {
- var hashCode = new HashCode();
- hashCode.Add(name);
- hashCode.Add(expectedControlType);
- hashCode.Add((int)type);
- hashCode.Add(interactions);
- hashCode.Add(processors);
- hashCode.Add(initialStateCheck);
- hashCode.Add(actionTypeTooltip);
- hashCode.Add(expectedControlTypeTooltip);
- hashCode.Add(propertyPath);
- return hashCode.ToHashCode();
- }
- }
- }
-
- #endif
|