Skip to content

Commit ddc99ca

Browse files
CHANGE: Removed aliased values in Gamepad enum. (ISXB-543) (#1983)
* ISXB-543 Implemented custom drawer base for enums as well as on specific to gamepad buttons. Also removed aliased values in GamepadButton enum * Removed custom enum drawer. * Added changes to changelog. * Re-added aliased enums into GamepadButton for compatibility with existing projects. Added custom aliased enum drawer base and custom enum drawer for GamepadButton to hide aliased values. * Ran the formatter on commit changes. * Revert "ISXB-543 Implemented custom drawer base for enums as well as on specific to gamepad buttons. Also removed aliased values in GamepadButton enum" This reverts commit 110e5c6. # Conflicts: # Packages/com.unity.inputsystem/InputSystem/Editor/PropertyDrawers/AliasedEnumPropertyDrawer.cs.meta # Packages/com.unity.inputsystem/InputSystem/Editor/PropertyDrawers/GpadButtonPropertyDrawer.cs.meta * Reworked GpadButtonPropertyDrawer according to feedback. Removed general AliasedEnumPropertyDrawer script. * Fixed GamepadButtonPropertyDrawer issues based on PR feedback. -Renamed GpadButtonPropertyDrawer to GamepadButtonPropertyDrawer. -Fixed nullref issue caused by m_EnumDisplayNames being reset when entering/exiting play mode. -Simplified code for setting up enum list. -Updated CHANGELOG.md * Moved changelog entry for ISXB-543 into correct version and added link to jira. * Changed jira link in changelog for ISXB-543 to public issue tracker.
1 parent 7f5528b commit ddc99ca

3 files changed

Lines changed: 99 additions & 0 deletions

File tree

Packages/com.unity.inputsystem/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ however, it has to be formatted properly to pass verification tests.
1616

1717
### Changed
1818
- Renamed editor Resources directories to PackageResources to fix package validation warnings.
19+
- Changed representation of GamepadButton enum values in Inspector to display aliased enum values as a single item to avoid confusion around selection and aliased value display when multiple enum items map to the same numerical value. [ISXB-543](https://issuetracker.unity3d.com/product/unity/issues/guid/ISXB-543)
1920

2021
## [1.11.0] - 2024-09-10
2122

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#if UNITY_EDITOR
2+
3+
using System;
4+
using System.Collections.Generic;
5+
using System.Linq;
6+
using UnityEngine.InputSystem.LowLevel;
7+
using UnityEditor;
8+
using UnityEngine.UIElements;
9+
10+
namespace UnityEngine.InputSystem.Editor
11+
{
12+
/// <summary>
13+
/// Property drawer for <see cref = "GamepadButton" />
14+
/// </summary >
15+
[CustomPropertyDrawer(typeof(GamepadButton))]
16+
internal class GamepadButtonPropertyDrawer : PropertyDrawer
17+
{
18+
public override VisualElement CreatePropertyGUI(SerializedProperty property)
19+
{
20+
CreateEnumList();
21+
return base.CreatePropertyGUI(property);
22+
}
23+
24+
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
25+
{
26+
EditorGUI.BeginProperty(position, label, property);
27+
28+
if (m_EnumDisplayNames == null)
29+
{
30+
CreateEnumList();
31+
}
32+
33+
if (property.propertyType == SerializedPropertyType.Enum)
34+
{
35+
property.intValue = EditorGUI.Popup(position, label.text, property.intValue, m_EnumDisplayNames);
36+
}
37+
38+
EditorGUI.EndProperty();
39+
}
40+
41+
private void CreateEnumList()
42+
{
43+
var enumNamesAndValues = new Dictionary<string, int>();
44+
var enumDisplayNames = Enum.GetNames(typeof(GamepadButton));
45+
var enumValues = Enum.GetValues(typeof(GamepadButton)).Cast<GamepadButton>().ToArray();
46+
47+
for (var i = 0; i < enumDisplayNames.Length; ++i)
48+
{
49+
string enumName;
50+
switch (enumDisplayNames[i])
51+
{
52+
case nameof(GamepadButton.Y):
53+
case nameof(GamepadButton.Triangle):
54+
case nameof(GamepadButton.A):
55+
case nameof(GamepadButton.Cross):
56+
case nameof(GamepadButton.B):
57+
case nameof(GamepadButton.Circle):
58+
case nameof(GamepadButton.X):
59+
case nameof(GamepadButton.Square):
60+
continue;
61+
case nameof(GamepadButton.North):
62+
enumName = "North, Y, Triangle, X";
63+
break;
64+
case nameof(GamepadButton.South):
65+
enumName = "South, A, Cross, B";
66+
break;
67+
case nameof(GamepadButton.East):
68+
enumName = "East, B, Circle, A";
69+
break;
70+
case nameof(GamepadButton.West):
71+
enumName = "West, X, Square, Y";
72+
break;
73+
default:
74+
enumName = enumDisplayNames[i];
75+
break;
76+
}
77+
enumNamesAndValues.Add(enumName, (int)enumValues.GetValue(i));
78+
}
79+
var sortedEntries = enumNamesAndValues.OrderBy(x => x.Value);
80+
81+
m_EnumDisplayNames = sortedEntries.Select(x => x.Key).ToArray();
82+
}
83+
84+
private string[] m_EnumDisplayNames;
85+
}
86+
}
87+
#endif // UNITY_EDITOR

Packages/com.unity.inputsystem/InputSystem/Editor/PropertyDrawers/GamepadButtonPropertyDrawer.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)