mirror of
https://github.com/ConjureETS/Unity_Utils.git
synced 2026-03-23 20:40:58 +00:00
112 lines
3.4 KiB
C#
112 lines
3.4 KiB
C#
using System.Collections.Generic;
|
|
using Canvases.Components;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
using UnityEngine.InputSystem.Utilities;
|
|
using Utilities;
|
|
using Utilities.Extensions;
|
|
|
|
namespace Canvases.Menu.Rebind
|
|
{
|
|
public class RebindUI : MonoBehaviour
|
|
{
|
|
[SerializeField] private ImageUIComponent background;
|
|
[SerializeField] private GameObject rebindMenuContent;
|
|
[SerializeField] private TextUIComponent currentControlScheme;
|
|
[SerializeField] private ButtonUIComponent resetAllButton;
|
|
[SerializeField] private RectTransform scrollRectContent;
|
|
[SerializeField] private TextUIComponent rebindOverlayText;
|
|
[SerializeField] private RebindActionUI rebindPrefab;
|
|
[SerializeField] private ButtonUIComponent applyButton;
|
|
|
|
private PlayerInputAction playerInputActionRef;
|
|
|
|
private RebindActionUI firstButton;
|
|
|
|
private readonly List<RebindActionUI> rebindUIs = new List<RebindActionUI>();
|
|
private bool isInitialized;
|
|
|
|
private void Start()
|
|
{
|
|
// Bind to OnInputDeviceChanged
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
applyButton.OnClick += OnApplyPressed;
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
applyButton.OnClick -= OnApplyPressed;
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
// Unbind to OnInputDeviceChanged
|
|
}
|
|
|
|
private void OnApplyPressed()
|
|
{
|
|
// Save changes
|
|
// Hide
|
|
}
|
|
|
|
|
|
private void OnResetAll()
|
|
{
|
|
playerInputActionRef.RemoveAllBindingOverrides();
|
|
UpdateAllRebindUI();
|
|
// UpdateBindings
|
|
}
|
|
|
|
private void AddBindingsButton(string deviceName)
|
|
{
|
|
currentControlScheme.Text = $"< {deviceName.ToUpper()} >";
|
|
ReadOnlyArray<InputAction> inputActions = playerInputActionRef.Player.Get().actions;
|
|
bool first = true;
|
|
foreach (var inputAction in inputActions)
|
|
{
|
|
foreach (var mainBinding in BindingsIconsUtil.GetRelevantMainBindings(inputAction, deviceName))
|
|
{
|
|
SpawnButton(inputAction, mainBinding, first);
|
|
first = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void SpawnButton(InputAction inputAction, int mainBindingIndex, bool first)
|
|
{
|
|
RebindActionUI actionButton = Instantiate(rebindPrefab, scrollRectContent);
|
|
rebindUIs.Add(actionButton);
|
|
actionButton.name = $"Rebind UI for {inputAction.name}";
|
|
actionButton.Initialize(mainBindingIndex, inputAction, rebindOverlayText, OnUpdateBindingUIEvent);
|
|
if (first)
|
|
{
|
|
firstButton = actionButton;
|
|
}
|
|
}
|
|
|
|
private void OnUpdateBindingUIEvent(string deviceLayoutName, string mainControlPath)
|
|
{
|
|
UpdateAllRebindUI();
|
|
// UpdateBindings
|
|
}
|
|
|
|
private void UpdateAllRebindUI()
|
|
{
|
|
foreach (RebindActionUI rebindActionUI in rebindUIs)
|
|
{
|
|
rebindActionUI.UpdateBindingDisplay(false);
|
|
}
|
|
}
|
|
|
|
private void OnInputDeviceChanged(string newDevice)
|
|
{
|
|
rebindUIs.Clear();
|
|
scrollRectContent.DestroyChildren();
|
|
AddBindingsButton(newDevice);
|
|
}
|
|
|
|
}
|
|
} |