using System; using System.Collections.Generic; using Reset.Core.Tools; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Users; namespace Reset{ public static class GameManager{ public static GameObject UI; public static GameObject Camera; public static GameObject Input; public static SessionManager Session; private static GameObject player; public static GameObject Player{ get{ return player; } set{ player = value; } } [RuntimeInitializeOnLoadMethod] static void Reset(){ player = null; } [RuntimeInitializeOnLoadMethod] static void PopulateSceneReferences(){ try { UI = GameObject.Find("UICanvas"); Camera = GameObject.Find("CameraGroup"); Input = GameObject.Find("InputManager"); } catch (Exception e) { Console.WriteLine(e); throw; } } public static void AttachControllerToPlayer(InputDevice device){ if (!Player) { throw new Exception(message: "There is no player to attach this new input device to."); } InputUser playerUser = Player.GetComponent().user; playerUser = InputUser.PerformPairingWithDevice(device, playerUser, InputUserPairingOptions.UnpairCurrentDevicesFromUser); } public static GameObject FindNewPlayer(){ var allPlayers = GameObject.FindGameObjectsWithTag("Player"); for (int i = 0; i < allPlayers.Length; i++) { if (allPlayers[i].GetComponent() && allPlayers[i].GetComponent().IsLocalPlayer) { return allPlayers[i]; } } return null; } public static void RequestNewController(){ try { GameObject.Find("Input Selector").GetComponent().AwaitNewInput(); } catch (Exception e) { Debug.LogError($"Can't request a new controller: {e.Message}"); } } public static void ClearCurrentController(){ InputUser playerUser = Player.GetComponent().user; playerUser.UnpairDevices(); } } }