Last active
February 26, 2020 12:28
-
-
Save sdomenici009/9a133162d912c91a5426ab34fea40d60 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System.Collections; | |
using System.Collections.Generic; | |
using GooglePlayGames; | |
using GooglePlayGames.BasicApi; | |
using UnityEngine; | |
using UnityEngine.SocialPlatforms; | |
public class LeaderboardManager : MonoBehaviour { | |
private void SetInteractionEnabled (bool value) { | |
//TODO: Add logic here that disables everything you don't want the user to interact with while the leaderboard is open. | |
} | |
public void AttemptToDisplayLeaderboard () { | |
if (!Social.localUser.authenticated) { | |
SetInteractionEnabled (false); | |
Social.localUser.Authenticate ((bool success) => { | |
if (success) { | |
DisplayLeaderboard (); | |
} else { | |
SetInteractionEnabled (true); | |
} | |
}); | |
} else { | |
SetInteractionEnabled (false); | |
DisplayLeaderboard (); | |
} | |
} | |
//Get this value from GPGSIds. | |
//e.g. leaderboardID = GPGSIds.leaderboard_leaders; | |
private string leaderboardID = "leaderboardID"; | |
//LeaderboardScoreData will start at rank #1. | |
private LeaderboardStart leaderboardStart = LeaderboardStart.TopScores; | |
//LeaderboardScoreData will return 100 scores. | |
private int scoresToDisplay = 100; | |
//LeaderboardScoreData will be public. | |
private LeaderboardCollection leaderboardType = LeaderboardCollection.Public; | |
//LeaderboardScoreData will show all time scores. | |
private LeaderboardTimeSpan leaderboardTimeSpan = LeaderboardTimeSpan.AllTime; | |
private void DisplayLeaderboard () { | |
PlayGamesPlatform.Instance.LoadScores (leaderboardID, | |
leaderboardStart, | |
scoresToDisplay, | |
leaderboardType, | |
leaderboardTimeSpan, | |
(LeaderboardScoreData data) => { | |
//List of userIDs that we're going to use to retrieve usernames. | |
List<string> userIDs = new List<string> (); | |
//Map of userIDs to their related score. | |
Dictionary<string, IScore> userScores = new Dictionary<string, IScore> (); | |
for (int i = 0; i < data.Scores.Length; i++) { | |
IScore score = data.Scores[i]; | |
userIDs.Add (score.userID); | |
userScores[score.userID] = score; | |
} | |
//Map of userIDs to their usernames. | |
Dictionary<string, string> userNames = new Dictionary<string, string> (); | |
Social.LoadUsers (userIDs.ToArray (), (users) => { | |
for (int i = 0; i < users.Length; i++) { | |
userNames[users[i].id] = users[i].userName; | |
} | |
//The reason we loop through data.Scores here is the same reason we created the two dictionaries above. | |
//[data.Scores] is guaranteed to be in the correct order while [users] is not. | |
for (int i = 0; i < data.Scores.Length; i++) { | |
IScore score = data.Scores[i]; | |
//This gets the imageIndex that can be used to grab an image from an array or dictionary. | |
//e.g. Sprite image = leaderboardSprites[imageIndex]; | |
int imageIndex = (int) (score.value % imageIndexMax); | |
string userName = userNames[score.userID]; | |
int rank = score.rank; | |
//This removes the imageIndex from the score to get the true score. | |
float scoreValue = ((score.value - imageIndex) / imageIndexMax); | |
//TODO: Use the values above to update a display in Unity. | |
} | |
}); | |
}); | |
} | |
//Score: The score you want to display on the leaderboard. | |
//ImageIndex: The index for which image you want to display on the leaderboard. | |
//I have around 212 unique images that I want to be able to display on my leaderboard. | |
//In order to add that index to my score I'll need add at least three trailing zeroes to my score. | |
private float imageIndexMax = 1000; | |
//Multiply the true score by imageIndexMax, add the imageIndex, and then report that new score. | |
//To display the image, parse the imageIndex when DisplayLeaderboard (on Line 46) is called. | |
public void ReportScoreToLeaderboard (float score, int imageIndex) { | |
long leaderboardScore = (long) (score * imageIndexMax + imageIndex); | |
Social.ReportScore (leaderboardScore, leaderboardID, (bool success) => { | |
Debug.Log ("Success!"); | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
maybe all things will be better if you provide the complete source code