/// <summary>
        /// Use to manualy create a user.
        /// NOTE: Only supports ReignScores.
        /// </summary>
        /// <param name="userID">Username</param>
        /// <param name="password">User Password.</param>
        /// <param name="callback">The callback that fires when done.</param>
        public static void ManualCreateUser(string username, string password, AuthenticateCallbackMethod callback)
        {
            if (waitingForOperation)
            {
                Debug.LogError("Must wait for last Score operation to complete.");
                return;
            }

            waitingForOperation  = true;
            authenticateCallback = callback;
            plugin.ManualCreateUser(username, password, async_authenticateCallback, ReignServices.Singleton);
        }
예제 #2
0
        void OnGUI()
        {
            if (guiMode == ReignScores_ClassicGuiModes.None)
            {
                return;
            }

            GUI.color  = Color.white;
            GUI.matrix = Matrix4x4.identity;
            float scale = new Vector2(Screen.width, Screen.height).magnitude / new Vector2(1280, 720).magnitude;

            // draw background
            if (BackgroudTexture != null)
            {
                var   size    = MathUtilities.FillView(BackgroudTexture.width, BackgroudTexture.height, Screen.width, Screen.height);
                float offsetX = -Mathf.Max((size.x - Screen.width) * .5f, 0f);
                float offsetY = -Mathf.Max((size.y - Screen.height) * .5f, 0f);
                GUI.DrawTexture(new Rect(offsetX, offsetY, size.x, size.y), BackgroudTexture);
            }

            float buttonWidth  = 128 * scale;
            float buttonHeight = 64 * scale;
            float textWidth    = 256 * scale;
            float textHeight   = 32 * scale;
            float y            = Screen.height / 2;

            // ======================================
            // Login Mode
            // ======================================
            if (guiMode == ReignScores_ClassicGuiModes.Login)
            {
                // title
                if (!string.IsNullOrEmpty(LoginTitle))
                {
                    var style = new GUIStyle();
                    style.fontSize         = (int)(128 * scale);
                    style.alignment        = TextAnchor.MiddleCenter;
                    style.normal.textColor = Color.white;
                    GUI.Label(new Rect(0, 0, Screen.width, Screen.height / 4), LoginTitle, style);
                }

                // labels
                GUI.Label(new Rect((Screen.width / 2) - textWidth - (10 * scale), y, textWidth, textHeight), "Username");
                GUI.Label(new Rect((Screen.width / 2) + (10 * scale), y, textWidth, textHeight), "Password");
                y += textHeight;

                // text fields
                userAccount_Name = GUI.TextField(new Rect((Screen.width / 2) - textWidth - (10 * scale), y, textWidth, textHeight), userAccount_Name);
                userAccount_Pass = GUI.PasswordField(new Rect((Screen.width / 2) + (10 * scale), y, textWidth, textHeight), userAccount_Pass, '*');
                y += textHeight * 2;

                // buttons
                if (GUI.Button(new Rect((Screen.width / 2) - buttonWidth - (10 * scale), y, buttonWidth, buttonHeight), "Cancel"))
                {
                    errorText = null;
                    guiMode   = ReignScores_ClassicGuiModes.None;
                    if (authenticateCallback != null)
                    {
                        authenticateCallback(false, "Canceled");
                    }
                }

                if (GUI.Button(new Rect((Screen.width / 2) + (10 * scale), y, buttonWidth, buttonHeight), "Login"))
                {
                    errorText = null;
                    bool validInfo = true;
                    if (string.IsNullOrEmpty(userAccount_Name))
                    {
                        validInfo = false;
                        errorText = "Invalid username.";
                        Debug.LogError(errorText);
                    }
                    else if (string.IsNullOrEmpty(userAccount_Pass))
                    {
                        validInfo = false;
                        errorText = "Invalid user password.";
                        Debug.LogError(errorText);
                    }

                    if (validInfo)
                    {
                        guiMode = ReignScores_ClassicGuiModes.LoggingIn;
                        plugin.ManualLogin(userAccount_Name, userAccount_Pass, null, this);
                    }
                }

                y += buttonHeight * 2;
                if (GUI.Button(new Rect((Screen.width / 2) - buttonWidth - (10 * scale), y, (buttonWidth * 2) + (10 * scale), buttonHeight), "Create New User"))
                {
                    guiMode   = ReignScores_ClassicGuiModes.CreateUser;
                    errorText = null;
                }
            }
            // ======================================
            // CreateUser Mode
            // ======================================
            else if (guiMode == ReignScores_ClassicGuiModes.CreateUser)
            {
                // title
                if (!string.IsNullOrEmpty(CreateUserTitle))
                {
                    var style = new GUIStyle();
                    style.fontSize         = (int)(128 * scale);
                    style.alignment        = TextAnchor.MiddleCenter;
                    style.normal.textColor = Color.white;
                    GUI.Label(new Rect(0, 0, Screen.width, Screen.height / 4), CreateUserTitle, style);
                }

                // labels
                float offsetX = ((10 * scale) + textWidth) * -.5f;
                GUI.Label(new Rect((Screen.width / 2) - textWidth - (10 * scale) + offsetX, y, textWidth, textHeight), "Username");
                GUI.Label(new Rect((Screen.width / 2) + (10 * scale) + offsetX, y, textWidth, textHeight), "Password");
                GUI.Label(new Rect((Screen.width / 2) + (20 * scale) + textWidth + offsetX, y, textWidth, textHeight), "Confirm Password");
                y += textHeight;

                // text fields
                userAccount_Name     = GUI.TextField(new Rect((Screen.width / 2) - textWidth - (10 * scale) + offsetX, y, textWidth, textHeight), userAccount_Name);
                userAccount_Pass     = GUI.PasswordField(new Rect((Screen.width / 2) + (10 * scale) + offsetX, y, textWidth, textHeight), userAccount_Pass, '*');
                userAccount_ConfPass = GUI.PasswordField(new Rect((Screen.width / 2) + (20 * scale) + textWidth + offsetX, y, textWidth, textHeight), userAccount_ConfPass, '*');
                y += textHeight * 2;

                // buttons
                if (GUI.Button(new Rect((Screen.width / 2) - buttonWidth - (10 * scale), y, buttonWidth, buttonHeight), "Cancel"))
                {
                    errorText = null;
                    guiMode   = ReignScores_ClassicGuiModes.None;
                    if (authenticateCallback != null)
                    {
                        authenticateCallback(false, "Canceled");
                    }
                }

                if (GUI.Button(new Rect((Screen.width / 2) + (10 * scale), y, buttonWidth, buttonHeight), "Create"))
                {
                    errorText = null;
                    bool validInfo = true;
                    if (string.IsNullOrEmpty(userAccount_Name))
                    {
                        validInfo = false;
                        errorText = "Invalid username.";
                        Debug.LogError(errorText);
                    }
                    else if (string.IsNullOrEmpty(userAccount_Pass) || string.IsNullOrEmpty(userAccount_ConfPass))
                    {
                        validInfo = false;
                        errorText = "Invalid user password.";
                        Debug.LogError(errorText);
                    }
                    else if (userAccount_Pass != userAccount_ConfPass)
                    {
                        validInfo = false;
                        errorText = "Passwords dont match.";
                        Debug.LogError(errorText);
                    }
                    else if (userAccount_Pass.Length < 6)
                    {
                        validInfo = false;
                        errorText = "Passwords to short.";
                        Debug.LogError(errorText);
                    }

                    if (validInfo)
                    {
                        guiMode = ReignScores_ClassicGuiModes.CreatingUser;
                        plugin.ManualCreateUser(userAccount_Name, userAccount_Pass, null, this);
                    }
                }

                y += buttonHeight * 2;
                if (GUI.Button(new Rect((Screen.width / 2) - buttonWidth - (10 * scale), y, (buttonWidth * 2) + (10 * scale), buttonHeight), "Login Existing User"))
                {
                    guiMode   = ReignScores_ClassicGuiModes.Login;
                    errorText = null;
                }
            }
            // ======================================
            // LoggingIn Mode
            // ======================================
            else if (guiMode == ReignScores_ClassicGuiModes.LoggingIn)
            {
                var style = new GUIStyle();
                style.fontSize         = (int)(128 * scale);
                style.alignment        = TextAnchor.MiddleCenter;
                style.normal.textColor = Color.white;
                GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "Logging In...", style);
            }
            // ======================================
            // Showing Scores Mode
            // ======================================
            else if (guiMode == ReignScores_ClassicGuiModes.ShowingScores)
            {
                if (TopScoreBoardTexture != null)
                {
                    // draw board
                    var   size    = MathUtilities.FitInView(TopScoreBoardTexture.width, TopScoreBoardTexture.height, Screen.width, Screen.height);
                    float offsetX = (Screen.width * .5f) - (size.x * .5f);
                    float offsetY = (Screen.height * .5f) - (size.y * .5f);
                    GUI.DrawTexture(new Rect(offsetX, offsetY, size.x, size.y), TopScoreBoardTexture);

                    // get main scale value
                    var mainScale = MathUtilities.ScaleToFitInView(TopScoreBoardTexture.width, TopScoreBoardTexture.height, Screen.width, Screen.height);

                    // handle buttons
                    if (Input.GetKeyUp(KeyCode.Escape) || processButton(TopScoreBoardFrame_CloseBox, TopScoreBoardButton_CloseNormal, TopScoreBoardButton_CloseHover, mainScale, offsetX, offsetY))
                    {
                        guiMode = ReignScores_ClassicGuiModes.None;
                        if (guiShowNativeViewDoneCallback != null)
                        {
                            guiShowNativeViewDoneCallback(true, null);
                        }
                    }

                    if (processButton(TopScoreBoardFrame_PrevButton, TopScoreBoardButton_PrevNormal, TopScoreBoardButton_PrevHover, mainScale, offsetX, offsetY))
                    {
                        if (guiScoreOffset != 0)
                        {
                            guiScoreOffset -= TopScoresToListPerPage;
                            if (guiScoreOffset < 0)
                            {
                                guiScoreOffset = 0;
                            }
                            plugin.RequestScores(guiLeaderboardID, guiScoreOffset, TopScoresToListPerPage, guiRequestScoresCallback, this);
                        }
                    }

                    if (processButton(TopScoreBoardFrame_NextButton, TopScoreBoardButton_NextNormal, TopScoreBoardButton_NextHover, mainScale, offsetX, offsetY))
                    {
                        if (guiScores.Length == TopScoresToListPerPage)
                        {
                            guiScoreOffset += TopScoresToListPerPage;
                            plugin.RequestScores(guiLeaderboardID, guiScoreOffset, TopScoresToListPerPage, guiRequestScoresCallback, this);
                        }
                    }

                    // draw names and scores
                    var usernameRect = calculateFrame(TopScoreBoardFrame_Usernames, mainScale, offsetX, offsetY);
                    var scoreRect    = calculateFrame(TopScoreBoardFrame_Scores, mainScale, offsetX, offsetY);
                    if (EnableTestRects)
                    {
                        GUI.Button(usernameRect, "TEST RECT");
                        GUI.Button(scoreRect, "TEST RECT");
                    }
                    var style = new GUIStyle();
                    style.fontSize         = (int)(TopScoreBoardFont_Size * scale);
                    style.alignment        = TextAnchor.LowerLeft;
                    style.normal.textColor = TopScoreBoardFont_Color;
                    int userI = 0, scoreI = 0;
                    foreach (var score in guiScores)
                    {
                        // username
                        float height = usernameRect.height / TopScoresToListPerPage;
                        GUI.Label(new Rect(usernameRect.x, usernameRect.y + userI, usernameRect.width, height), score.Username, style);
                        userI += (int)height;

                        // score
                        height = scoreRect.height / TopScoresToListPerPage;
                        string scoreValue;
                        if (ScoreFormatCallback != null)
                        {
                            ScoreFormatCallback(score.Score, out scoreValue);
                        }
                        else
                        {
                            scoreValue = score.Score.ToString();
                        }
                        GUI.Label(new Rect(scoreRect.x, scoreRect.y + scoreI, scoreRect.width, height), scoreValue, style);
                        scoreI += (int)height;
                    }
                }
                else
                {
                    errorText = "ReignScores TopScoreBoardTexture MUST be set!";
                    Debug.LogError(errorText);
                }
            }
            // ======================================
            // Showing Achievements Mode
            // ======================================
            else if (guiMode == ReignScores_ClassicGuiModes.ShowingAchievements)
            {
                if (AchievementBoardTexture != null)
                {
                    // draw board
                    var   size    = MathUtilities.FitInView(AchievementBoardTexture.width, AchievementBoardTexture.height, Screen.width, Screen.height);
                    float offsetX = (Screen.width * .5f) - (size.x * .5f);
                    float offsetY = (Screen.height * .5f) - (size.y * .5f);
                    GUI.DrawTexture(new Rect(offsetX, offsetY, size.x, size.y), AchievementBoardTexture);

                    // get main scale value
                    var mainScale = MathUtilities.ScaleToFitInView(AchievementBoardTexture.width, AchievementBoardTexture.height, Screen.width, Screen.height);

                    // handle buttons
                    if (Input.GetKeyUp(KeyCode.Escape) || processButton(AchievementBoardFrame_CloseBox, AchievementBoardButton_CloseNormal, AchievementBoardButton_CloseHover, mainScale, offsetX, offsetY))
                    {
                        guiMode = ReignScores_ClassicGuiModes.None;
                        if (guiShowNativeViewDoneCallback != null)
                        {
                            guiShowNativeViewDoneCallback(true, null);
                        }
                    }

                    if (processButton(AchievementBoardFrame_PrevButton, AchievementBoardButton_PrevNormal, AchievementBoardButton_PrevHover, mainScale, offsetX, offsetY))
                    {
                        if (guiAchievementOffset != 0)
                        {
                            guiAchievementOffset -= AchievementsToListPerPage;
                            if (guiAchievementOffset < 0)
                            {
                                guiAchievementOffset = 0;
                            }
                        }
                    }

                    if (processButton(AchievementBoardFrame_NextButton, AchievementBoardButton_NextNormal, AchievementBoardButton_NextHover, mainScale, offsetX, offsetY))
                    {
                        if (guiAchievementOffset + AchievementsToListPerPage < guiAchievements.Length)
                        {
                            guiAchievementOffset += AchievementsToListPerPage;
                        }
                    }

                    // draw names and scores
                    var nameRect = calculateFrame(AchievementBoardFrame_Names, mainScale, offsetX, offsetY);
                    var descRect = calculateFrame(AchievementBoardFrame_Descs, mainScale, offsetX, offsetY);
                    if (EnableTestRects)
                    {
                        GUI.Button(nameRect, "TEST RECT");
                        GUI.Button(descRect, "TEST RECT");
                    }
                    var style = new GUIStyle();
                    style.fontSize         = (int)(AchievementBoardFont_Size * scale);
                    style.alignment        = TextAnchor.LowerLeft;
                    style.normal.textColor = AchievementBoardFont_Color;
                    int nameI = 0, descI = 0;
                    for (int i = guiAchievementOffset; i < guiAchievementOffset + AchievementsToListPerPage; ++i)
                    {
                        if (i == guiAchievements.Length)
                        {
                            break;
                        }
                        var ach = guiAchievements[i];

                        // icon
                        float height   = nameRect.height / AchievementsToListPerPage;
                        float iconSize = height * .8f;
                        GUI.DrawTexture(new Rect(nameRect.x, nameRect.y + nameI + height - iconSize, iconSize, iconSize), ach.IsAchieved ? ach.AchievedImage : ach.UnachievedImage);

                        // name
                        GUI.Label(new Rect(height + nameRect.x, nameRect.y + nameI, nameRect.width, height), ach.Name, style);
                        nameI += (int)height;

                        // desc
                        height = descRect.height / AchievementsToListPerPage;
                        GUI.Label(new Rect(descRect.x, descRect.y + descI, descRect.width, height), ach.Desc, style);
                        descI += (int)height;
                    }
                }
                else
                {
                    errorText = "ReignScores AchievementBoardTexture MUST be set!";
                    Debug.LogError(errorText);
                }
            }
            // ======================================
            // CreatingUser Mode
            // ======================================
            else if (guiMode == ReignScores_ClassicGuiModes.CreatingUser)
            {
                var style = new GUIStyle();
                style.fontSize         = (int)(128 * scale);
                style.alignment        = TextAnchor.MiddleCenter;
                style.normal.textColor = Color.white;
                GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "Creating User...", style);
            }
            // ======================================
            // Loading Mode
            // ======================================
            else if (guiMode == ReignScores_ClassicGuiModes.LoadingScores || guiMode == ReignScores_ClassicGuiModes.LoadingAchievements)
            {
                var style = new GUIStyle();
                style.fontSize         = (int)(128 * scale);
                style.alignment        = TextAnchor.MiddleCenter;
                style.normal.textColor = Color.white;
                GUI.Label(new Rect(0, 0, Screen.width, Screen.height), "Loading...", style);
            }

            // error text
            if (!string.IsNullOrEmpty(errorText))
            {
                var errorStyle = new GUIStyle();
                errorStyle.fontSize         = (int)(32 * scale);
                errorStyle.alignment        = TextAnchor.MiddleCenter;
                errorStyle.normal.textColor = Color.red;
                GUI.Label(new Rect(0, Screen.height - (Screen.height / 8), Screen.width, Screen.height / 8), errorText, errorStyle);
            }
        }