From c5f145786f4c6d2fe4bea831dfc16e52228920a5 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Sun, 19 May 2024 16:05:01 +0800 Subject: * move --- .../FallbackJoystickIdentificationDemo.cs | 114 +++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 Thronefall_1_0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs (limited to 'Thronefall_1_0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs') diff --git a/Thronefall_1_0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs b/Thronefall_1_0/Rewired/Rewired.Demos/FallbackJoystickIdentificationDemo.cs new file mode 100644 index 0000000..3213b71 --- /dev/null +++ b/Thronefall_1_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 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(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; + } +} -- cgit v1.1-26-g67d0