diff --git a/Assets/Fish-Networking-Discovery-main/NetworkDiscoveryCanvasUI.cs b/Assets/Fish-Networking-Discovery-main/NetworkDiscoveryCanvasUI.cs index 10582956..ffcb2350 100644 --- a/Assets/Fish-Networking-Discovery-main/NetworkDiscoveryCanvasUI.cs +++ b/Assets/Fish-Networking-Discovery-main/NetworkDiscoveryCanvasUI.cs @@ -1,39 +1,83 @@ +using _PROJECT.NewHandPresence; using FishNet; using FishNet.Discovery; +using FishNet.Managing.Scened; +using FishNet.Object; using System.Collections; +using System.Collections.Concurrent; using System.Collections.Generic; using System.Net; using TMPro; +using Unity.XR.CoreUtils; using UnityEngine; using UnityEngine.UI; public class NetworkMenuUI : MonoBehaviour { + + + private ConcurrentQueue mainThreadQueue = new(); [Header("UI References")] + public Toggle VRToggle; + public Button startPlayingButton; + public Button reloadButton; public Button joinMultiplayerButton; public Transform serverListContainer; public GameObject serverListItemPrefab; public TMP_Text statusText; + public Button quitButton; [Header("Networking")] public NetworkDiscovery networkDiscovery; - public Camera uiCamera; // Optional, disable if connecting - public Image coverImage; + public Camera uiCamera; + public AudioListener placeholderAudioListener; + private bool _useVR; + + //public Image coverImage; private readonly List foundServers = new(); private void Start() { + if (networkDiscovery == null) networkDiscovery = FindObjectOfType(); + _useVR = PlayerPrefs.GetInt("UseVR", 0) == 1; + VRToggle.isOn = _useVR; + + // React to UI toggle changes + VRToggle.onValueChanged.AddListener((isOn) => + { + _useVR = isOn; + PlayerPrefs.SetInt("UseVR", _useVR ? 1 : 0); + PlayerPrefs.Save(); + Debug.Log($"UseVR set to {_useVR}"); + }); + startPlayingButton.onClick.AddListener(OnStartPlaying); + reloadButton.onClick.AddListener(OnReload); joinMultiplayerButton.onClick.AddListener(OnJoinMultiplayer); + quitButton.onClick.AddListener(OnQuit); - networkDiscovery.ServerFoundCallback += OnServerFound; + networkDiscovery.ServerFoundCallback += (endPoint) => + { + Debug.Log("Found a server"); + // Only queue the endpoint for main-thread processing + mainThreadQueue.Enqueue(() => + { + StartCoroutine(ProcessServerFound(endPoint)); + }); + }; + } + private void Update() + { + while (mainThreadQueue.TryDequeue(out var action)) + { + action.Invoke(); // safely runs on main thread + } } - private void OnStartPlaying() { statusText.text = "Starting host..."; @@ -41,47 +85,106 @@ public class NetworkMenuUI : MonoBehaviour } - private void OnJoinMultiplayer() + private void OnReload() { - statusText.text = "Searching for servers..."; - ClearServerList(); - foundServers.Clear(); - networkDiscovery.StartSearchingForServers(); - } - - private void OnServerFound(IPEndPoint endPoint) - { - if (foundServers.Contains(endPoint)) return; - foundServers.Add(endPoint); - - // Auto-join if started as host - if (InstanceFinder.IsServer) + /*if (!InstanceFinder.IsClient) { - //networkDiscovery.StopAdvertisingServer(); - networkDiscovery.StopSearchingForServers(); - - uiCamera.enabled = false; - coverImage.gameObject.SetActive(false); - - InstanceFinder.ClientManager.StartConnection("192.168.42.212"); - statusText.text = $"Joined server: {endPoint.Address}"; + Debug.LogWarning("Reload can only be called from a client!"); return; } - // Display in UI for manual joining - GameObject item = Instantiate(serverListItemPrefab, serverListContainer); - TMP_Text label = item.GetComponentInChildren(); - label.text = endPoint.Address.ToString(); - - Button btn = item.GetComponent