예제 #1
0
    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;
        }
    }
예제 #2
0
    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();
        });
    }
예제 #3
0
    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();
            }
        }
예제 #5
0
    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();
        }
    }
예제 #6
0
    // 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;
    }
예제 #9
0
    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);
        }
    }