using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Rewired.Demos; [AddComponentMenu("")] public class SimpleCombinedKeyboardMouseRemapping : MonoBehaviour { private class Row { public InputAction action; public AxisRange actionRange; public Button button; public Text text; } private struct TargetMapping { public ControllerMap controllerMap; public int actionElementMapId; } private const string category = "Default"; private const string layout = "Default"; private const string uiCategory = "UI"; private InputMapper inputMapper_keyboard = new InputMapper(); private InputMapper inputMapper_mouse = new InputMapper(); public GameObject buttonPrefab; public GameObject textPrefab; public RectTransform fieldGroupTransform; public RectTransform actionGroupTransform; public Text controllerNameUIText; public Text statusUIText; private List rows = new List(); private TargetMapping _replaceTargetMapping; private Player player => ReInput.players.GetPlayer(0); private void OnEnable() { if (ReInput.isReady) { inputMapper_keyboard.options.timeout = 5f; inputMapper_mouse.options.timeout = 5f; inputMapper_mouse.options.ignoreMouseXAxis = true; inputMapper_mouse.options.ignoreMouseYAxis = true; inputMapper_keyboard.options.allowButtonsOnFullAxisAssignment = false; inputMapper_mouse.options.allowButtonsOnFullAxisAssignment = false; inputMapper_keyboard.InputMappedEvent += OnInputMapped; inputMapper_keyboard.StoppedEvent += OnStopped; inputMapper_mouse.InputMappedEvent += OnInputMapped; inputMapper_mouse.StoppedEvent += OnStopped; InitializeUI(); } } private void OnDisable() { inputMapper_keyboard.Stop(); inputMapper_mouse.Stop(); inputMapper_keyboard.RemoveAllEventListeners(); inputMapper_mouse.RemoveAllEventListeners(); } private void RedrawUI() { controllerNameUIText.text = "Keyboard/Mouse"; for (int i = 0; i < rows.Count; i++) { Row row = rows[i]; InputAction action = rows[i].action; string text = string.Empty; int actionElementMapId = -1; for (int j = 0; j < 2; j++) { ControllerType controllerType = ((j != 0) ? ControllerType.Mouse : ControllerType.Keyboard); foreach (ActionElementMap item in player.controllers.maps.GetMap(controllerType, 0, "Default", "Default").ElementMapsWithAction(action.id)) { if (item.ShowInField(row.actionRange)) { text = item.elementIdentifierName; actionElementMapId = item.id; break; } } if (actionElementMapId >= 0) { break; } } row.text.text = text; row.button.onClick.RemoveAllListeners(); int index = i; row.button.onClick.AddListener(delegate { OnInputFieldClicked(index, actionElementMapId); }); } } private void ClearUI() { controllerNameUIText.text = string.Empty; for (int i = 0; i < rows.Count; i++) { rows[i].text.text = string.Empty; } } private void InitializeUI() { foreach (Transform item in actionGroupTransform) { Object.Destroy(item.gameObject); } foreach (Transform item2 in fieldGroupTransform) { Object.Destroy(item2.gameObject); } foreach (InputAction item3 in ReInput.mapping.ActionsInCategory("Default")) { if (item3.type == InputActionType.Axis) { CreateUIRow(item3, AxisRange.Full, item3.descriptiveName); CreateUIRow(item3, AxisRange.Positive, (!string.IsNullOrEmpty(item3.positiveDescriptiveName)) ? item3.positiveDescriptiveName : (item3.descriptiveName + " +")); CreateUIRow(item3, AxisRange.Negative, (!string.IsNullOrEmpty(item3.negativeDescriptiveName)) ? item3.negativeDescriptiveName : (item3.descriptiveName + " -")); } else if (item3.type == InputActionType.Button) { CreateUIRow(item3, AxisRange.Positive, item3.descriptiveName); } } RedrawUI(); } private void CreateUIRow(InputAction action, AxisRange actionRange, string label) { GameObject obj = Object.Instantiate(textPrefab); obj.transform.SetParent(actionGroupTransform); obj.transform.SetAsLastSibling(); obj.GetComponent().text = label; GameObject gameObject = Object.Instantiate(buttonPrefab); gameObject.transform.SetParent(fieldGroupTransform); gameObject.transform.SetAsLastSibling(); rows.Add(new Row { action = action, actionRange = actionRange, button = gameObject.GetComponent