Merge branch 'input-editors' of https://github.com/Tryibion/FlaxEngine into Tryibion-input-editors
This commit is contained in:
149
Source/Editor/CustomEditors/Editors/InputEditor.cs
Normal file
149
Source/Editor/CustomEditors/Editors/InputEditor.cs
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using FlaxEngine;
|
||||||
|
using FlaxEngine.GUI;
|
||||||
|
|
||||||
|
namespace FlaxEditor.CustomEditors.Editors
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Default implementation of the inspector used to edit input event properties.
|
||||||
|
/// </summary>
|
||||||
|
[CustomEditor(typeof(InputEvent)), DefaultEditor]
|
||||||
|
public class InputEventEditor : CustomEditor
|
||||||
|
{
|
||||||
|
private Dropdown _dropdown;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override DisplayStyle Style => DisplayStyle.Inline;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Initialize(LayoutElementsContainer layout)
|
||||||
|
{
|
||||||
|
var dropdownElement = layout.Custom<Dropdown>();
|
||||||
|
_dropdown = dropdownElement.CustomControl;
|
||||||
|
var eventNames = new List<LocalizedString>();
|
||||||
|
foreach (var mapping in Input.ActionMappings)
|
||||||
|
{
|
||||||
|
if (eventNames.Contains(mapping.Name))
|
||||||
|
continue;
|
||||||
|
eventNames.Add(mapping.Name);
|
||||||
|
}
|
||||||
|
_dropdown.Items = eventNames;
|
||||||
|
if (Values[0] is InputEvent value)
|
||||||
|
{
|
||||||
|
if (eventNames.Contains(value.Name))
|
||||||
|
{
|
||||||
|
_dropdown.SelectedItem = value.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_dropdown.SelectedIndexChanged += OnSelectedIndexChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSelectedIndexChanged(Dropdown dropdown)
|
||||||
|
{
|
||||||
|
SetValue(new InputEvent(dropdown.SelectedItem));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Refresh()
|
||||||
|
{
|
||||||
|
base.Refresh();
|
||||||
|
|
||||||
|
if (HasDifferentValues)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Values[0] is InputEvent eventValue)
|
||||||
|
{
|
||||||
|
if (_dropdown.Items.Contains(eventValue.Name) && string.Equals(_dropdown.SelectedItem, eventValue.Name, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
_dropdown.SelectedItem = eventValue.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Deinitialize()
|
||||||
|
{
|
||||||
|
if (_dropdown != null)
|
||||||
|
_dropdown.SelectedIndexChanged -= OnSelectedIndexChanged;
|
||||||
|
_dropdown = null;
|
||||||
|
base.Deinitialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Default implementation of the inspector used to edit input axis properties.
|
||||||
|
/// </summary>
|
||||||
|
[CustomEditor(typeof(InputAxis)), DefaultEditor]
|
||||||
|
public class InputAxisEditor : CustomEditor
|
||||||
|
{
|
||||||
|
private Dropdown _dropdown;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override DisplayStyle Style => DisplayStyle.Inline;
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Initialize(LayoutElementsContainer layout)
|
||||||
|
{
|
||||||
|
var dropdownElement = layout.Custom<Dropdown>();
|
||||||
|
_dropdown = dropdownElement.CustomControl;
|
||||||
|
var axisNames = new List<LocalizedString>();
|
||||||
|
foreach (var mapping in Input.AxisMappings)
|
||||||
|
{
|
||||||
|
if (axisNames.Contains(mapping.Name))
|
||||||
|
continue;
|
||||||
|
axisNames.Add(mapping.Name);
|
||||||
|
}
|
||||||
|
_dropdown.Items = axisNames;
|
||||||
|
if (Values[0] is InputAxis value)
|
||||||
|
{
|
||||||
|
if (axisNames.Contains(value.Name))
|
||||||
|
{
|
||||||
|
_dropdown.SelectedItem = value.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_dropdown.SelectedIndexChanged += OnSelectedIndexChanged;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnSelectedIndexChanged(Dropdown dropdown)
|
||||||
|
{
|
||||||
|
SetValue(new InputAxis(dropdown.SelectedItem));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
public override void Refresh()
|
||||||
|
{
|
||||||
|
base.Refresh();
|
||||||
|
|
||||||
|
if (HasDifferentValues)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (Values[0] is InputAxis axisValue)
|
||||||
|
{
|
||||||
|
if (_dropdown.Items.Contains(axisValue.Name) && string.Equals(_dropdown.SelectedItem, axisValue.Name, StringComparison.Ordinal))
|
||||||
|
{
|
||||||
|
_dropdown.SelectedItem = axisValue.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc />
|
||||||
|
protected override void Deinitialize()
|
||||||
|
{
|
||||||
|
if (_dropdown != null)
|
||||||
|
_dropdown.SelectedIndexChanged -= OnSelectedIndexChanged;
|
||||||
|
_dropdown = null;
|
||||||
|
base.Deinitialize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -199,11 +199,11 @@ namespace FlaxEngine.GUI
|
|||||||
// UI navigation
|
// UI navigation
|
||||||
if (_canvas.ReceivesEvents)
|
if (_canvas.ReceivesEvents)
|
||||||
{
|
{
|
||||||
UpdateNavigation(deltaTime, _canvas.NavigationInputActionUp, NavDirection.Up, ref _navigationHeldTimeUp, ref _navigationRateTimeUp);
|
UpdateNavigation(deltaTime, _canvas.NavigateUp.Name, NavDirection.Up, ref _navigationHeldTimeUp, ref _navigationRateTimeUp);
|
||||||
UpdateNavigation(deltaTime, _canvas.NavigationInputActionDown, NavDirection.Down, ref _navigationHeldTimeDown, ref _navigationRateTimeDown);
|
UpdateNavigation(deltaTime, _canvas.NavigateDown.Name, NavDirection.Down, ref _navigationHeldTimeDown, ref _navigationRateTimeDown);
|
||||||
UpdateNavigation(deltaTime, _canvas.NavigationInputActionLeft, NavDirection.Left, ref _navigationHeldTimeLeft, ref _navigationRateTimeLeft);
|
UpdateNavigation(deltaTime, _canvas.NavigateLeft.Name, NavDirection.Left, ref _navigationHeldTimeLeft, ref _navigationRateTimeLeft);
|
||||||
UpdateNavigation(deltaTime, _canvas.NavigationInputActionRight, NavDirection.Right, ref _navigationHeldTimeRight, ref _navigationRateTimeRight);
|
UpdateNavigation(deltaTime, _canvas.NavigateRight.Name, NavDirection.Right, ref _navigationHeldTimeRight, ref _navigationRateTimeRight);
|
||||||
UpdateNavigation(deltaTime, _canvas.NavigationInputActionSubmit, ref _navigationHeldTimeSubmit, ref _navigationRateTimeSubmit, SubmitFocused);
|
UpdateNavigation(deltaTime, _canvas.NavigateSubmit.Name, ref _navigationHeldTimeSubmit, ref _navigationRateTimeSubmit, SubmitFocused);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -263,39 +263,39 @@ namespace FlaxEngine
|
|||||||
public float NavigationInputRepeatRate { get; set; } = 0.05f;
|
public float NavigationInputRepeatRate { get; set; } = 0.05f;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the input action for performing UI navigation Up (from Input Settings).
|
/// The input action for performing UI navigation Up (from Input Settings).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[EditorOrder(510), EditorDisplay("Navigation", "Navigate Up")]
|
[EditorOrder(510), EditorDisplay("Navigation", "Navigate Up")]
|
||||||
[Tooltip("The name of the input action for performing UI navigation Up (from Input Settings).")]
|
[Tooltip("The input action for performing UI navigation Up (from Input Settings).")]
|
||||||
public string NavigationInputActionUp { get; set; } = "NavigateUp";
|
public InputEvent NavigateUp { get; set; } = new InputEvent("NavigateUp");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the input action for performing UI navigation Down (from Input Settings).
|
/// The input action for performing UI navigation Down (from Input Settings).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[EditorOrder(520), EditorDisplay("Navigation", "Navigate Down")]
|
[EditorOrder(520), EditorDisplay("Navigation", "Navigate Down")]
|
||||||
[Tooltip("The name of the input action for performing UI navigation Down (from Input Settings).")]
|
[Tooltip("The input action for performing UI navigation Down (from Input Settings).")]
|
||||||
public string NavigationInputActionDown { get; set; } = "NavigateDown";
|
public InputEvent NavigateDown { get; set; } = new InputEvent("NavigateDown");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the input action for performing UI navigation Left (from Input Settings).
|
/// The input action for performing UI navigation Left (from Input Settings).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[EditorOrder(530), EditorDisplay("Navigation", "Navigate Left")]
|
[EditorOrder(530), EditorDisplay("Navigation", "Navigate Left")]
|
||||||
[Tooltip("The name of the input action for performing UI navigation Left (from Input Settings).")]
|
[Tooltip("The input action for performing UI navigation Left (from Input Settings).")]
|
||||||
public string NavigationInputActionLeft { get; set; } = "NavigateLeft";
|
public InputEvent NavigateLeft { get; set; } = new InputEvent("NavigateLeft");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the input action for performing UI navigation Right (from Input Settings).
|
/// The input action for performing UI navigation Right (from Input Settings).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[EditorOrder(540), EditorDisplay("Navigation", "Navigate Right")]
|
[EditorOrder(540), EditorDisplay("Navigation", "Navigate Right")]
|
||||||
[Tooltip("The name of the input action for performing UI navigation Right (from Input Settings).")]
|
[Tooltip("The input action for performing UI navigation Right (from Input Settings).")]
|
||||||
public string NavigationInputActionRight { get; set; } = "NavigateRight";
|
public InputEvent NavigateRight { get; set; } = new InputEvent("NavigateRight");
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The name of the input action for performing UI navigation Submit (from Input Settings).
|
/// The input action for performing UI navigation Submit (from Input Settings).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[EditorOrder(540), EditorDisplay("Navigation", "Navigate Submit")]
|
[EditorOrder(550), EditorDisplay("Navigation", "Navigate Submit")]
|
||||||
[Tooltip("The name of the input action for performing UI navigation Submit (from Input Settings).")]
|
[Tooltip("The input action for performing UI navigation Submit (from Input Settings).")]
|
||||||
public string NavigationInputActionSubmit { get; set; } = "NavigateSubmit";
|
public InputEvent NavigateSubmit { get; set; } = new InputEvent("NavigateSubmit");
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
@@ -620,14 +620,36 @@ namespace FlaxEngine
|
|||||||
jsonWriter.WriteValue(NavigationInputRepeatDelay);
|
jsonWriter.WriteValue(NavigationInputRepeatDelay);
|
||||||
jsonWriter.WritePropertyName("NavigationInputRepeatRate");
|
jsonWriter.WritePropertyName("NavigationInputRepeatRate");
|
||||||
jsonWriter.WriteValue(NavigationInputRepeatRate);
|
jsonWriter.WriteValue(NavigationInputRepeatRate);
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionUp");
|
|
||||||
jsonWriter.WriteValue(NavigationInputActionUp);
|
jsonWriter.WritePropertyName("NavigateUp");
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionDown");
|
jsonWriter.WriteStartObject();
|
||||||
jsonWriter.WriteValue(NavigationInputActionDown);
|
jsonWriter.WritePropertyName("Name");
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionLeft");
|
jsonWriter.WriteValue(NavigateUp.Name);
|
||||||
jsonWriter.WriteValue(NavigationInputActionLeft);
|
jsonWriter.WriteEndObject();
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionRight");
|
|
||||||
jsonWriter.WriteValue(NavigationInputActionRight);
|
jsonWriter.WritePropertyName("NavigateDown");
|
||||||
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateDown.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
|
|
||||||
|
jsonWriter.WritePropertyName("NavigateLeft");
|
||||||
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateLeft.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
|
|
||||||
|
jsonWriter.WritePropertyName("NavigateRight");
|
||||||
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateRight.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
|
|
||||||
|
jsonWriter.WritePropertyName("NavigateSubmit");
|
||||||
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateSubmit.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
|
|
||||||
jsonWriter.WriteEndObject();
|
jsonWriter.WriteEndObject();
|
||||||
}
|
}
|
||||||
@@ -713,27 +735,47 @@ namespace FlaxEngine
|
|||||||
jsonWriter.WritePropertyName("NavigationInputRepeatRate");
|
jsonWriter.WritePropertyName("NavigationInputRepeatRate");
|
||||||
jsonWriter.WriteValue(NavigationInputRepeatRate);
|
jsonWriter.WriteValue(NavigationInputRepeatRate);
|
||||||
}
|
}
|
||||||
if (NavigationInputActionUp != other.NavigationInputActionUp)
|
if (NavigateUp.Name != other.NavigateUp.Name)
|
||||||
{
|
{
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionUp");
|
jsonWriter.WritePropertyName("NavigateUp");
|
||||||
jsonWriter.WriteValue(NavigationInputActionUp);
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateUp.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
}
|
}
|
||||||
if (NavigationInputActionDown != other.NavigationInputActionDown)
|
if (NavigateDown.Name != other.NavigateDown.Name)
|
||||||
{
|
{
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionDown");
|
jsonWriter.WritePropertyName("NavigateDown");
|
||||||
jsonWriter.WriteValue(NavigationInputActionDown);
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateDown.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
}
|
}
|
||||||
if (NavigationInputActionLeft != other.NavigationInputActionLeft)
|
if (NavigateLeft.Name != other.NavigateLeft.Name)
|
||||||
{
|
{
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionLeft");
|
jsonWriter.WritePropertyName("NavigateLeft");
|
||||||
jsonWriter.WriteValue(NavigationInputActionLeft);
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateLeft.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
}
|
}
|
||||||
if (NavigationInputActionRight != other.NavigationInputActionRight)
|
if (NavigateRight.Name != other.NavigateRight.Name)
|
||||||
{
|
{
|
||||||
jsonWriter.WritePropertyName("NavigationInputActionRight");
|
jsonWriter.WritePropertyName("NavigateRight");
|
||||||
jsonWriter.WriteValue(NavigationInputActionRight);
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateRight.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
}
|
}
|
||||||
|
if (NavigateSubmit.Name != other.NavigateSubmit.Name)
|
||||||
|
{
|
||||||
|
jsonWriter.WritePropertyName("NavigateSubmit");
|
||||||
|
jsonWriter.WriteStartObject();
|
||||||
|
jsonWriter.WritePropertyName("Name");
|
||||||
|
jsonWriter.WriteValue(NavigateSubmit.Name);
|
||||||
|
jsonWriter.WriteEndObject();
|
||||||
|
}
|
||||||
|
|
||||||
jsonWriter.WriteEndObject();
|
jsonWriter.WriteEndObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user