public static bool UploadScore(string username, string score, Action <bool> callback)
        {
            if (!HighScoresUtility.ValidateUserDataString(username) ||
                !HighScoresUtility.ValidateUserDataString(score))
            {
                Debug.LogError(
                    $"[{nameof (HighScore)}]: Provided 'username' or 'score' was null of empty, or it contained invalid characters!");
                callback.Invoke(false);
                return(false);
            }

            if (!HighScoresUtility.IsSamePlayer(CurrentPlayerLastData, username) &&
                HighScoresUtility.CompareScores(CurrentPlayerLastData.Score, score) < 0)
            {
                CurrentPlayerLastData.Score = score;
            }
            else
            {
                CurrentPlayerLastData = new PlayerHighScoreData
                {
                    Username = username,
                    Score    = score
                };
            }

            Instance.StartCoroutine(Instance.Internal_PostHighScore(username, score, callback));
            return(true);
        }
        public static void SetPlayerName(string playerName)
        {
            CurrentPlayerLastData = new PlayerHighScoreData
            {
                Username = playerName
            };
            if (string.IsNullOrEmpty(CurrentPlayerLastData.Username))
            {
                return;
            }

            PlayerPrefs.SetString("LastUserName", CurrentPlayerLastData.Username);
            PlayerPrefs.Save();
        }