using System.Collections; using System.Collections.Generic; using System.Linq; using Obvious.Soap; using Photon.Realtime; using UnityEngine; using UnityEngine.UI; public class MultiplayerAddectiveScene : Singleton { public Image mainContentMaskImage; public Camera mCamera; public PlayerHeader playerHeader; public GameObject left_MapScreen; public GameObject left_RoomCreationSettings; public Image left_MapScreenImage; public Text left_LocationNameText; public InputField left_RoomName; public Text left_Error; public Dropdown left_TimeOfDayDropDown; public Dropdown left_WeatherDropDown; public GameObject right_RoomListHeader; public GameObject right_RoomList; public GameObject right_ConnectingIndicator; public Button right_ConnectToServerBtn; public Dropdown right_DropdownLanguages; public ScrollRect right_RoomsScrollRect; public GameObject roomRow_Template; public GameObject right_NoRoomsIndicator; public IntVariable currentMapSelectionIndex; private List roomRows = new List(); private Dictionary friendsInfoAll = new Dictionary(); private string newRoomCreator_inputName = ""; private bool newRoomCreator_privateRoomToggle; private bool friendsOnlyToggle; private bool friendsInfoUpdateComplete; private Coroutine enterLocationCoroutine; public static bool IsFocused { get { if (Singleton.Instance != null) { return Singleton.Instance.left_RoomName.isFocused; } return false; } } private void MultiplayerManager_On_FriendsInfoUpdate() { friendsInfoUpdateComplete = true; } public void OnConnectToServerBtnClick() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.Disconnected) { MultiplayerManager.Instance.Connect(); Refresh(); } } public void OnNewRoomCreator_Name(string text) { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InLobby) { newRoomCreator_inputName = text; left_Error.text = ""; } } public void OnNewRoomCreator_Private() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InLobby) { newRoomCreator_privateRoomToggle = !newRoomCreator_privateRoomToggle; } } public void OnNewRoomCreator_Create() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InLobby) { if (newRoomCreator_inputName == null || newRoomCreator_inputName.Length < 4) { left_Error.text = LanguageManager.Instance.GetText("ERROR_ROOM_NAME_TOO_SHORT"); return; } if (newRoomCreator_inputName.Length > 20) { left_Error.text = LanguageManager.Instance.GetText("ERROR_ROOM_NAME_TOO_LONG"); return; } if (char.IsDigit(newRoomCreator_inputName[0])) { left_Error.text = LanguageManager.Instance.GetText("ERROR_ROOM_NAME_START_WITH_NUMBER"); return; } if (MultiplayerManager.Instance.ActiveRooms.Exists((MultiplayerManager.RoomInfoData element) => element.name == newRoomCreator_inputName)) { left_Error.text = LanguageManager.Instance.GetText("ERROR_ROOM_NAME_DUPLICATE"); return; } left_Error.text = ""; MultiplayerManager.Instance.CreateRoom(newRoomCreator_inputName, 10, currentMapSelectionIndex, LanguageManager.Instance.languagesList.IndexOf(LanguageManager.Instance.currentLanguage), left_TimeOfDayDropDown.value, left_WeatherDropDown.value, !newRoomCreator_privateRoomToggle); newRoomCreator_inputName = ""; Refresh(); } } public void OnRoomFilter_DropdownLanguages() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InLobby) { Refresh(); } } public void OnRoomFilter_Private() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InLobby) { friendsOnlyToggle = !friendsOnlyToggle; Refresh(); } } public void OnRoomList_Join(Button button) { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InLobby) { MultiplayerManager.Instance.JoinRoom(button.transform.parent.name); Refresh(); } } private void Start() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.Disconnected) { OnConnectToServerBtnClick(); } else { Refresh(); } StartCoroutine(FriendsFindCoroutine()); } private void OnDestroy() { if (MultiplayerManager.Instance.CurrentState == MultiplayerManager.State.InRoom) { MultiplayerManager.Instance.LeaveRoom(); } } private void OnEnable() { MultiplayerManager.On_ConnectedToMaster += Refresh; MultiplayerManager.On_Disconnected += Refresh; MultiplayerManager.On_JoinedLobby += Refresh; MultiplayerManager.On_JoinedRoom += Refresh; MultiplayerManager.On_LeftRoom += Refresh; MultiplayerManager.On_CreateRoomFailed += Refresh; MultiplayerManager.On_JoinRoomFailed += Refresh; MultiplayerManager.On_RoomListUpdate += Refresh; MultiplayerManager.On_FriendsInfoUpdate += MultiplayerManager_On_FriendsInfoUpdate; } private void OnDisable() { MultiplayerManager.On_ConnectedToMaster -= Refresh; MultiplayerManager.On_Disconnected -= Refresh; MultiplayerManager.On_JoinedLobby -= Refresh; MultiplayerManager.On_JoinedRoom -= Refresh; MultiplayerManager.On_LeftRoom -= Refresh; MultiplayerManager.On_CreateRoomFailed -= Refresh; MultiplayerManager.On_JoinRoomFailed -= Refresh; MultiplayerManager.On_RoomListUpdate -= Refresh; MultiplayerManager.On_FriendsInfoUpdate -= MultiplayerManager_On_FriendsInfoUpdate; } private void DisableAllUI() { left_MapScreen.SetActive(value: false); left_RoomCreationSettings.SetActive(value: false); right_RoomListHeader.SetActive(value: false); right_RoomList.SetActive(value: false); right_ConnectingIndicator.SetActive(value: false); right_ConnectToServerBtn.gameObject.SetActive(value: false); left_Error.gameObject.SetActive(value: false); right_DropdownLanguages.gameObject.SetActive(value: false); right_NoRoomsIndicator.gameObject.SetActive(value: false); } private void SetupDropdownWeatherAndTimeDay() { List list = new List(); List list2 = new List(); list.Add(LanguageManager.Instance.GetText("WEATHER_CLEAR")); list.Add(LanguageManager.Instance.GetText("WEATHER_CLOUDY")); list.Add(LanguageManager.Instance.GetText("WEATHER_OVERCAST")); list.Add(LanguageManager.Instance.GetText("WEATHER_LIGHTRAIN")); list.Add(LanguageManager.Instance.GetText("WEATHER_MEDIUMRAIN")); list.Add(LanguageManager.Instance.GetText("WEATHER_STORM")); list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_MORNING")); list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_NOON")); list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_EVENING")); list2.Add(LanguageManager.Instance.GetText("TIMEOFDAY_NIGHT")); if (left_TimeOfDayDropDown.options.Count != list2.Count || left_WeatherDropDown.options.Count != list.Count) { left_TimeOfDayDropDown.ClearOptions(); left_WeatherDropDown.ClearOptions(); left_WeatherDropDown.AddOptions(list); left_TimeOfDayDropDown.AddOptions(list2); left_WeatherDropDown.value = GameManager.Instance.gameLocations[(int)currentMapSelectionIndex].startWeatherIndex; left_TimeOfDayDropDown.value = GameManager.Instance.gameLocations[(int)currentMapSelectionIndex].startDayTimeIndex; } } private void SetupDropdownLanguage() { List list = LanguageManager.Instance.languagesList.ToList(); list.Insert(0, LanguageManager.Instance.GetText("ANY")); if (right_DropdownLanguages.options.Count != list.Count) { right_DropdownLanguages.ClearOptions(); right_DropdownLanguages.AddOptions(list); right_DropdownLanguages.value = 0; right_DropdownLanguages.RefreshShownValue(); } } private void DisplayRoomCreationSettings() { left_MapScreen.SetActive(value: true); left_RoomCreationSettings.SetActive(value: true); left_Error.gameObject.SetActive(value: true); Sprite screenMapImage = GameManager.Instance.gameLocations[(int)currentMapSelectionIndex].GetScreenMapImage(0); string text = GameManager.Instance.gameLocations[(int)currentMapSelectionIndex].name; left_MapScreenImage.sprite = screenMapImage; left_LocationNameText.text = text; left_Error.text = ""; } private void DisplayRoomListHeader() { right_RoomListHeader.SetActive(value: true); right_DropdownLanguages.gameObject.SetActive(value: true); } private void DisplayRoomList() { if (MultiplayerManager.Instance.CurrentState != MultiplayerManager.State.InLobby) { return; } right_RoomList.SetActive(value: true); roomRow_Template.SetActive(value: false); if (friendsOnlyToggle) { List list = new List(); foreach (GameObject rr in roomRows) { if (!friendsInfoAll.Values.Any((FriendInfo element) => element.Room == rr.name)) { list.Add(rr); } } foreach (GameObject item in list) { roomRows.Remove(item); item.GetComponentInChildren