diff options
Diffstat (limited to 'Thronefall_v1.0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs')
-rw-r--r-- | Thronefall_v1.0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/Thronefall_v1.0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs b/Thronefall_v1.0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs new file mode 100644 index 0000000..3213b71 --- /dev/null +++ b/Thronefall_v1.0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs @@ -0,0 +1,114 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Rewired.Demos; + +[AddComponentMenu("")] +public class FallbackJoystickIdentificationDemo : MonoBehaviour +{ + private const float windowWidth = 250f; + + private const float windowHeight = 250f; + + private const float inputDelay = 1f; + + private bool identifyRequired; + + private Queue<Joystick> joysticksToIdentify; + + private float nextInputAllowedTime; + + private GUIStyle style; + + private void Awake() + { + if (ReInput.unityJoystickIdentificationRequired) + { + ReInput.ControllerConnectedEvent += JoystickConnected; + ReInput.ControllerDisconnectedEvent += JoystickDisconnected; + IdentifyAllJoysticks(); + } + } + + private void JoystickConnected(ControllerStatusChangedEventArgs args) + { + IdentifyAllJoysticks(); + } + + private void JoystickDisconnected(ControllerStatusChangedEventArgs args) + { + IdentifyAllJoysticks(); + } + + public void IdentifyAllJoysticks() + { + Reset(); + if (ReInput.controllers.joystickCount != 0) + { + Joystick[] joysticks = ReInput.controllers.GetJoysticks(); + if (joysticks != null) + { + identifyRequired = true; + joysticksToIdentify = new Queue<Joystick>(joysticks); + SetInputDelay(); + } + } + } + + private void SetInputDelay() + { + nextInputAllowedTime = Time.time + 1f; + } + + private void OnGUI() + { + if (!identifyRequired) + { + return; + } + if (joysticksToIdentify == null || joysticksToIdentify.Count == 0) + { + Reset(); + return; + } + Rect screenRect = new Rect((float)Screen.width * 0.5f - 125f, (float)Screen.height * 0.5f - 125f, 250f, 250f); + GUILayout.Window(0, screenRect, DrawDialogWindow, "Joystick Identification Required"); + GUI.FocusWindow(0); + if (!(Time.time < nextInputAllowedTime) && ReInput.controllers.SetUnityJoystickIdFromAnyButtonOrAxisPress(joysticksToIdentify.Peek().id, 0.8f, positiveAxesOnly: false)) + { + joysticksToIdentify.Dequeue(); + SetInputDelay(); + if (joysticksToIdentify.Count == 0) + { + Reset(); + } + } + } + + private void DrawDialogWindow(int windowId) + { + if (identifyRequired) + { + if (style == null) + { + style = new GUIStyle(GUI.skin.label); + style.wordWrap = true; + } + GUILayout.Space(15f); + GUILayout.Label("A joystick has been attached or removed. You will need to identify each joystick by pressing a button on the controller listed below:", style); + Joystick joystick = joysticksToIdentify.Peek(); + GUILayout.Label("Press any button on \"" + joystick.name + "\" now.", style); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Skip")) + { + joysticksToIdentify.Dequeue(); + } + } + } + + private void Reset() + { + joysticksToIdentify = null; + identifyRequired = false; + } +} |