void Update() { // only update if visible if (!panel.activeSelf) { return; } // hide if disconnected if (!NetworkClient.active) { Hide(); } // copy player classes to class selection dropdownClass.options.Clear(); foreach (var p in manager.GetPlayerClasses()) { dropdownClass.options.Add(new Dropdown.OptionData(p.name)); } // we also have to refresh the current text, otherwise it's still // 'Option A' int idx = dropdownClass.value; if (idx != -1) { currentClass.text = dropdownClass.options[idx].text; } }
void Update() { // only update while visible if (!panel.activeSelf) { return; } // hide if disconnected if (!NetworkClient.active) { Hide(); } // copy player classes to class selection classDropdown.options = manager.GetPlayerClasses().Select( p => new Dropdown.OptionData(p.name) ).ToList(); // buttons createButton.onClick.SetListener(() => { var message = new CharacterCreateMsg { name = nameInput.text, classIndex = classDropdown.value }; manager.client.Send(CharacterCreateMsg.MsgId, message); }); cancelButton.onClick.SetListener(() => { nameInput.text = ""; Hide(); FindObjectOfType <UICharacterSelection>().Show(); }); }
void Update() { // only update if visible if (!panel.activeSelf) { return; } // hide if disconnected or if a local player is in the game world if (!NetworkClient.active || Utils.ClientLocalPlayer() != null) { Hide(); } // instantiate/destroy enough slots UIUtils.BalancePrefabs(slotPrefab.gameObject, characters.characterNames.Length, content); // refresh all var prefabs = manager.GetPlayerClasses(); for (int i = 0; i < characters.characterNames.Length; ++i) { var prefab = prefabs.Find(p => p.name == characters.characterClasses[i]); var slot = content.GetChild(i).GetComponent <UICharacterSelectionSlot>(); // name and icon slot.nameText.text = characters.characterNames[i]; slot.image.sprite = prefab.GetComponent <Player>().classIcon; // select button: calls AddPLayer which calls OnServerAddPlayer int icopy = i; // needed for lambdas, otherwise i is Count slot.selectButton.onClick.SetListener(() => { var message = new CharacterSelectMsg { index = icopy }; ClientScene.AddPlayer(manager.client.connection, 0, message); }); // delete button: sends delete message slot.deleteButton.onClick.SetListener(() => { var message = new CharacterDeleteMsg { index = icopy }; manager.client.Send(CharacterDeleteMsg.MsgId, message); }); } createButton.interactable = characters.characterNames.Length < manager.characterLimit; createButton.onClick.SetListener(() => { Hide(); FindObjectOfType <UICharacterCreation>().Show(); }); quitButton.onClick.SetListener(() => { Application.Quit(); }); // addon system hooks Utils.InvokeMany(typeof(UICharacterSelection), this, "Update_"); }
void Update() { if (manager == null) { manager = NetworkManager.singleton as NetworkManagerMMO; } // only update while visible (after character selection made it visible) if (panel.activeSelf) { // still in lobby? if (manager.state == NetworkState.Lobby) { Show(); // copy player classes to class selection classDropdown.options = manager.GetPlayerClasses().Select( p => new Dropdown.OptionData(p.name) ).ToList(); // create createButton.interactable = manager.IsAllowedCharacterName(nameInput.text); createButton.onClick.SetListener(() => { CharacterCreateMsg message = new CharacterCreateMsg { name = nameInput.text, classIndex = classDropdown.value }; NetworkClient.Send(message); Hide(); }); // cancel cancelButton.onClick.SetListener(() => { nameInput.text = ""; Hide(); }); } else { Hide(); } } else { Hide(); } }
void Update() { // only update while visible (after character selection made it visible) if (panel.activeSelf) { // still connected, not in world? if (manager.IsClientConnected() && !Utils.ClientLocalPlayer()) { Show(); // copy player classes to class selection classDropdown.options = manager.GetPlayerClasses().Select( p => new Dropdown.OptionData(p.name) ).ToList(); // create createButton.interactable = manager.IsAllowedCharacterName(nameInput.text); createButton.onClick.SetListener(() => { CharacterCreateMsg message = new CharacterCreateMsg { name = nameInput.text, classIndex = classDropdown.value }; manager.client.Send(CharacterCreateMsg.MsgId, message); Hide(); }); // cancel cancelButton.onClick.SetListener(() => { nameInput.text = ""; Hide(); }); // addon system hooks Utils.InvokeMany(typeof(UICharacterCreation), this, "Update_"); } else { Hide(); } } else { Hide(); } }
// CHARACTER CREATION ////////////////////////////////////////////////////// void UpdateCharacterCreation() { // hide if disconnected if (!NetworkClient.active) { HideCharacterCreation(); } // copy player classes to class selection dropdownClass.options.Clear(); foreach (var p in manager.GetPlayerClasses()) { dropdownClass.options.Add(new Dropdown.OptionData(p.name)); } // we also have to refresh the current text, otherwise it's still // 'Option A' var idx = dropdownClass.value; dropdownCurrent.text = dropdownClass.options[idx].text; }
void Update() { // show while in lobby and while not creating a character if (manager.state == NetworkState.Lobby && !uiCharacterCreation.IsVisible()) { panel.SetActive(true); // characters available message received already? if (manager.charactersAvailableMsg != null) { // instantiate/destroy enough slots CharactersAvailableMsg.CharacterPreview[] characters = manager.charactersAvailableMsg.characters; UIUtils.BalancePrefabs(slotPrefab.gameObject, characters.Length, content); // refresh all List <Player> prefabs = manager.GetPlayerClasses(); for (int i = 0; i < characters.Length; ++i) { Player prefab = prefabs.Find(p => p.name == characters[i].className); UICharacterSelectionSlot slot = content.GetChild(i).GetComponent <UICharacterSelectionSlot>(); // name and icon slot.nameText.text = characters[i].name; slot.image.sprite = prefab.GetComponent <Player>().classIcon; // select button: calls AddPLayer which calls OnServerAddPlayer // -> button sends a request to the server // -> if we press button again while request hasn't finished // then we will get the error: // 'ClientScene::AddPlayer: playerControllerId of 0 already in use.' // which will happen sometimes at low-fps or high-latency // -> internally ClientScene.AddPlayer adds to localPlayers // immediately, so let's check that first slot.selectButton.interactable = ClientScene.localPlayer == null; int icopy = i; // needed for lambdas, otherwise i is Count slot.selectButton.onClick.SetListener(() => { CharacterSelectMsg message = new CharacterSelectMsg { index = icopy }; ClientScene.AddPlayer(manager.client.connection, message); // make sure we can't select twice and call AddPlayer twice panel.SetActive(false); }); // delete button: sends delete message slot.deleteButton.onClick.SetListener(() => { CharacterDeleteMsg message = new CharacterDeleteMsg { index = icopy }; manager.client.Send(CharacterDeleteMsg.MsgId, message); }); } createButton.interactable = characters.Length < manager.characterLimit; createButton.onClick.SetListener(() => { panel.SetActive(false); uiCharacterCreation.Show(); }); quitButton.onClick.SetListener(() => { NetworkManagerMMO.Quit(); }); } } else { panel.SetActive(false); } }
// ----------------------------------------------------------------------------------- // Show // ----------------------------------------------------------------------------------- public void Show() { Camera.main.transform.position = creationCameraLocation.position; Camera.main.transform.rotation = creationCameraLocation.rotation; players = new List <Player>(); players = manager.GetPlayerClasses(); if (players == null || players.Count <= 0) { return; } for (int c = 0; c < players.Count; c++) { int temp = c; classList[temp].button.onClick.SetListener(() => SetCharacterClass(temp)); classList[temp].label.text = players[temp].name; classList[temp].prefabID = temp; #if _iMMOUNLOCKABLECLASSES if (manager.UCE_HasUnlockedClass(players[temp])) { classList[temp].button.gameObject.SetActive(true); } else { classList[temp].button.gameObject.SetActive(false); } #else classList[temp].button.gameObject.SetActive(true); #endif } #if _iMMOUNLOCKABLECLASSES for (int c = 0; c < players.Count; c++) { int selectedClass = c; if (manager.UCE_HasUnlockedClass(players[selectedClass])) { SetCharacterClass(selectedClass); break; } } #else SetCharacterClass(0); #endif createButton.onClick.SetListener(() => { CreateCharacter(); }); cancelButton.onClick.SetListener(() => { Hide(); }); panel.SetActive(true); bInit = true; }
void Update() { // show if connected, not in world, not in charcreation if (manager.IsClientConnected() && !Utils.ClientLocalPlayer() && !uiCharacterCreation.IsVisible()) { panel.SetActive(true); // characters available message received already? if (manager.charactersAvailableMsg != null) { // instantiate/destroy enough slots CharactersAvailableMsg.CharacterPreview[] characters = manager.charactersAvailableMsg.characters; UIUtils.BalancePrefabs(slotPrefab.gameObject, characters.Length, content); // refresh all List <Player> prefabs = manager.GetPlayerClasses(); for (int i = 0; i < characters.Length; ++i) { Player prefab = prefabs.Find(p => p.name == characters[i].className); UICharacterSelectionSlot slot = content.GetChild(i).GetComponent <UICharacterSelectionSlot>(); // name and icon slot.nameText.text = characters[i].name; slot.image.sprite = prefab.GetComponent <Player>().classIcon; // select button: calls AddPLayer which calls OnServerAddPlayer int icopy = i; // needed for lambdas, otherwise i is Count slot.selectButton.onClick.SetListener(() => { CharacterSelectMsg message = new CharacterSelectMsg { index = icopy }; ClientScene.AddPlayer(manager.client.connection, 0, message); // make sure we can't select twice and call AddPlayer twice panel.SetActive(false); }); // delete button: sends delete message slot.deleteButton.onClick.SetListener(() => { CharacterDeleteMsg message = new CharacterDeleteMsg { index = icopy }; manager.client.Send(CharacterDeleteMsg.MsgId, message); }); } createButton.interactable = characters.Length < manager.characterLimit; createButton.onClick.SetListener(() => { panel.SetActive(false); uiCharacterCreation.Show(); }); quitButton.onClick.SetListener(() => { NetworkManagerMMO.Quit(); }); } // addon system hooks Utils.InvokeMany(typeof(UICharacterSelection), this, "Update_"); } else { panel.SetActive(false); } }