using FishNet; using FishNet.Discovery; using FishNet.Managing.Scened; using System.Collections; using System.Collections.Generic; using System.Net; using TMPro; using UnityEngine; using UnityEngine.UI; public class NetworkMenuUI : MonoBehaviour { [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; 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; } private void OnStartPlaying() { statusText.text = "Starting host..."; StartCoroutine(HostAndSearchRoutine()); } private void OnReload() { //UnityEngine.SceneManagement.Scene currentScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene(); //UnityEngine.SceneManagement.SceneManager.LoadScene(currentScene.name); } private void OnJoinMultiplayer() { statusText.text = "Searching for servers..."; ClearServerList(); foundServers.Clear(); networkDiscovery.StartSearchingForServers(); } private void OnQuit() { Debug.Log("Quitting application"); Application.Quit(); } private void OnServerFound(IPEndPoint endPoint) { if (foundServers.Contains(endPoint)) return; foundServers.Add(endPoint); // Auto-join if started as host if (InstanceFinder.IsServer) { //networkDiscovery.StopAdvertisingServer(); networkDiscovery.StopSearchingForServers(); uiCamera.enabled = false; Debug.Log("Disabled placeholder audio source"); placeholderAudioListener.enabled = false; //coverImage.gameObject.SetActive(false); InstanceFinder.ClientManager.StartConnection(endPoint.Address.ToString()); statusText.text = $"Joined server: {endPoint.Address}"; 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