Merge branch 'Tryibion-input-editors'

This commit is contained in:
Wojtek Figat
2023-09-12 14:21:39 +02:00
3 changed files with 205 additions and 41 deletions

View File

@@ -0,0 +1,122 @@
// Copyright (c) 2012-2023 Wojciech Figat. All rights reserved.
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 names = new List<LocalizedString>();
foreach (var mapping in Input.ActionMappings)
{
if (!names.Contains(mapping.Name))
names.Add(mapping.Name);
}
_dropdown.Items = names;
if (Values[0] is InputEvent inputEvent && names.Contains(inputEvent.Name))
_dropdown.SelectedItem = inputEvent.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 inputEvent && _dropdown.Items.Contains(inputEvent.Name))
_dropdown.SelectedItem = inputEvent.Name;
}
}
/// <inheritdoc />
protected override void Deinitialize()
{
if (_dropdown != null)
_dropdown.SelectedIndexChanged -= OnSelectedIndexChanged;
_dropdown = null;
}
}
/// <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 names = new List<LocalizedString>();
foreach (var mapping in Input.AxisMappings)
{
if (!names.Contains(mapping.Name))
names.Add(mapping.Name);
}
_dropdown.Items = names;
if (Values[0] is InputAxis inputAxis && names.Contains(inputAxis.Name))
_dropdown.SelectedItem = inputAxis.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 inputAxis && _dropdown.Items.Contains(inputAxis.Name))
_dropdown.SelectedItem = inputAxis.Name;
}
}
/// <inheritdoc />
protected override void Deinitialize()
{
if (_dropdown != null)
_dropdown.SelectedIndexChanged -= OnSelectedIndexChanged;
_dropdown = null;
}
}
}

View File

@@ -199,11 +199,11 @@ namespace FlaxEngine.GUI
// UI navigation
if (_canvas.ReceivesEvents)
{
UpdateNavigation(deltaTime, _canvas.NavigationInputActionUp, NavDirection.Up, ref _navigationHeldTimeUp, ref _navigationRateTimeUp);
UpdateNavigation(deltaTime, _canvas.NavigationInputActionDown, NavDirection.Down, ref _navigationHeldTimeDown, ref _navigationRateTimeDown);
UpdateNavigation(deltaTime, _canvas.NavigationInputActionLeft, NavDirection.Left, ref _navigationHeldTimeLeft, ref _navigationRateTimeLeft);
UpdateNavigation(deltaTime, _canvas.NavigationInputActionRight, NavDirection.Right, ref _navigationHeldTimeRight, ref _navigationRateTimeRight);
UpdateNavigation(deltaTime, _canvas.NavigationInputActionSubmit, ref _navigationHeldTimeSubmit, ref _navigationRateTimeSubmit, SubmitFocused);
UpdateNavigation(deltaTime, _canvas.NavigateUp.Name, NavDirection.Up, ref _navigationHeldTimeUp, ref _navigationRateTimeUp);
UpdateNavigation(deltaTime, _canvas.NavigateDown.Name, NavDirection.Down, ref _navigationHeldTimeDown, ref _navigationRateTimeDown);
UpdateNavigation(deltaTime, _canvas.NavigateLeft.Name, NavDirection.Left, ref _navigationHeldTimeLeft, ref _navigationRateTimeLeft);
UpdateNavigation(deltaTime, _canvas.NavigateRight.Name, NavDirection.Right, ref _navigationHeldTimeRight, ref _navigationRateTimeRight);
UpdateNavigation(deltaTime, _canvas.NavigateSubmit.Name, ref _navigationHeldTimeSubmit, ref _navigationRateTimeSubmit, SubmitFocused);
}
else
{

View File

@@ -263,39 +263,39 @@ namespace FlaxEngine
public float NavigationInputRepeatRate { get; set; } = 0.05f;
/// <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>
[EditorOrder(510), EditorDisplay("Navigation", "Navigate Up")]
[Tooltip("The name of the input action for performing UI navigation Up (from Input Settings).")]
public string NavigationInputActionUp { get; set; } = "NavigateUp";
[Tooltip("The input action for performing UI navigation Up (from Input Settings).")]
public InputEvent NavigateUp { get; set; } = new InputEvent("NavigateUp");
/// <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>
[EditorOrder(520), EditorDisplay("Navigation", "Navigate Down")]
[Tooltip("The name of the input action for performing UI navigation Down (from Input Settings).")]
public string NavigationInputActionDown { get; set; } = "NavigateDown";
[Tooltip("The input action for performing UI navigation Down (from Input Settings).")]
public InputEvent NavigateDown { get; set; } = new InputEvent("NavigateDown");
/// <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>
[EditorOrder(530), EditorDisplay("Navigation", "Navigate Left")]
[Tooltip("The name of the input action for performing UI navigation Left (from Input Settings).")]
public string NavigationInputActionLeft { get; set; } = "NavigateLeft";
[Tooltip("The input action for performing UI navigation Left (from Input Settings).")]
public InputEvent NavigateLeft { get; set; } = new InputEvent("NavigateLeft");
/// <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>
[EditorOrder(540), EditorDisplay("Navigation", "Navigate Right")]
[Tooltip("The name of the input action for performing UI navigation Right (from Input Settings).")]
public string NavigationInputActionRight { get; set; } = "NavigateRight";
[Tooltip("The input action for performing UI navigation Right (from Input Settings).")]
public InputEvent NavigateRight { get; set; } = new InputEvent("NavigateRight");
/// <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>
[EditorOrder(540), EditorDisplay("Navigation", "Navigate Submit")]
[Tooltip("The name of the input action for performing UI navigation Submit (from Input Settings).")]
public string NavigationInputActionSubmit { get; set; } = "NavigateSubmit";
[EditorOrder(550), EditorDisplay("Navigation", "Navigate Submit")]
[Tooltip("The input action for performing UI navigation Submit (from Input Settings).")]
public InputEvent NavigateSubmit { get; set; } = new InputEvent("NavigateSubmit");
#endregion
@@ -620,14 +620,36 @@ namespace FlaxEngine
jsonWriter.WriteValue(NavigationInputRepeatDelay);
jsonWriter.WritePropertyName("NavigationInputRepeatRate");
jsonWriter.WriteValue(NavigationInputRepeatRate);
jsonWriter.WritePropertyName("NavigationInputActionUp");
jsonWriter.WriteValue(NavigationInputActionUp);
jsonWriter.WritePropertyName("NavigationInputActionDown");
jsonWriter.WriteValue(NavigationInputActionDown);
jsonWriter.WritePropertyName("NavigationInputActionLeft");
jsonWriter.WriteValue(NavigationInputActionLeft);
jsonWriter.WritePropertyName("NavigationInputActionRight");
jsonWriter.WriteValue(NavigationInputActionRight);
jsonWriter.WritePropertyName("NavigateUp");
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("Name");
jsonWriter.WriteValue(NavigateUp.Name);
jsonWriter.WriteEndObject();
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();
}
@@ -713,25 +735,45 @@ namespace FlaxEngine
jsonWriter.WritePropertyName("NavigationInputRepeatRate");
jsonWriter.WriteValue(NavigationInputRepeatRate);
}
if (NavigationInputActionUp != other.NavigationInputActionUp)
if (NavigateUp.Name != other.NavigateUp.Name)
{
jsonWriter.WritePropertyName("NavigationInputActionUp");
jsonWriter.WriteValue(NavigationInputActionUp);
jsonWriter.WritePropertyName("NavigateUp");
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.WriteValue(NavigationInputActionDown);
jsonWriter.WritePropertyName("NavigateDown");
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.WriteValue(NavigationInputActionLeft);
jsonWriter.WritePropertyName("NavigateLeft");
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.WriteValue(NavigationInputActionRight);
jsonWriter.WritePropertyName("NavigateRight");
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();