Skip to content

Commit 3a352ab

Browse files
committed
add leaderboard entry props, update demo with props + filtering
1 parent e4dcb91 commit 3a352ab

File tree

17 files changed

+416
-59
lines changed

17 files changed

+416
-59
lines changed

Assets/Samples/LeaderboardsDemo/Scenes/LeaderboardsDemo.unity

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ MonoBehaviour:
184184
m_Script: {fileID: 11500000, guid: 5d32f5ae2f5f7495cb77f079a21c54b0, type: 3}
185185
m_Name:
186186
m_EditorClassIdentifier:
187-
leaderboardName: test-leaderboard
187+
leaderboardName: team-scores
188188
--- !u!1 &497470367
189189
GameObject:
190190
m_ObjectHideFlags: 0

Assets/Samples/LeaderboardsDemo/Scripts/LeaderboardUIController.cs

Lines changed: 65 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using UnityEngine;
22
using TaloGameServices;
33
using UnityEngine.UIElements;
4-
using System.Collections.Generic;
54
using System.Threading.Tasks;
6-
using System.Linq;
5+
using System;
6+
using System.Collections.Generic;
77

88
public class LeaderboardUIController : MonoBehaviour
99
{
@@ -13,17 +13,21 @@ public class LeaderboardUIController : MonoBehaviour
1313
private ListView entriesList;
1414
private Label infoLabel;
1515

16+
private int filterIdx;
17+
private string filter = "All";
18+
1619
private async void Start()
1720
{
1821
root = GetComponent<UIDocument>().rootVisualElement;
1922
root.Q<Button>("post-btn").clicked += OnPostClick;
23+
root.Q<Button>("filter-btn").clicked += OnFilterClick;
2024

2125
entriesList = root.Q<ListView>();
2226
infoLabel = root.Q<Label>("info");
2327

2428
if (string.IsNullOrEmpty(leaderboardName))
2529
{
26-
throw new System.Exception("Please create a leaderboard and set the leaderboard name to its internal name");
30+
throw new Exception("Please create a leaderboard and set the leaderboard name to its internal name");
2731
}
2832

2933
await LoadEntries();
@@ -32,12 +36,17 @@ private async void Start()
3236
private async void OnPostClick()
3337
{
3438
var username = root.Q<TextField>().text;
35-
await Talo.Players.Identify("username", username);
39+
var score = UnityEngine.Random.Range(0, 100);
40+
var team = UnityEngine.Random.Range(0, 2) == 0 ? "Blue" : "Red";
3641

37-
var score = Random.Range(0, 100);
38-
(LeaderboardEntry entry, bool updated) = await Talo.Leaderboards.AddEntry(leaderboardName, score);
42+
await Talo.Players.Identify("username", username);
43+
(LeaderboardEntry entry, bool updated) = await Talo.Leaderboards.AddEntry(
44+
leaderboardName,
45+
score,
46+
("team", team)
47+
);
3948

40-
infoLabel.text = $"You scored {score}.";
49+
infoLabel.text = $"You scored {score} for the {team} team.";
4150
if (updated) infoLabel.text += " Your highscore was updated!";
4251

4352
entriesList.Rebuild();
@@ -62,9 +71,26 @@ private async Task LoadEntries()
6271

6372
do
6473
{
65-
var res = await Talo.Leaderboards.GetEntries(leaderboardName, page);
66-
page++;
67-
done = res.isLastPage;
74+
try
75+
{
76+
var res = await Talo.Leaderboards.GetEntries(leaderboardName, page);
77+
page++;
78+
done = res.isLastPage;
79+
}
80+
catch (RequestException e)
81+
{
82+
if (e.responseCode == 404)
83+
{
84+
infoLabel.text = $"Failed loading leaderboard {leaderboardName}. Does it exist?";
85+
}
86+
else
87+
{
88+
infoLabel.text = e.Message;
89+
Debug.LogError(e);
90+
}
91+
return;
92+
}
93+
6894
} while (!done);
6995

7096
HandleListVisibility();
@@ -78,13 +104,38 @@ private async Task LoadEntries()
78104
return label;
79105
};
80106

81-
var entries = Talo.Leaderboards.GetCachedEntries(leaderboardName);
82-
83107
entriesList.bindItem = (e, i) =>
84108
{
85-
e.Q<Label>().text = $"{i+1}. {entries[i].playerAlias.identifier} - {entries[i].score}";
109+
LeaderboardEntry entry = entriesList.itemsSource[i] as LeaderboardEntry;
110+
e.Q<Label>().text = $"{i+1}. {entry.playerAlias.identifier} - {entry.score} ({entry.GetProp("team", "No")} team)";
86111
};
87112

88-
entriesList.itemsSource = entries;
113+
entriesList.itemsSource = Talo.Leaderboards.GetCachedEntries(leaderboardName);
114+
}
115+
116+
private string GetNextFilter(int idx)
117+
{
118+
return new [] { "All", "Blue", "Red" } [idx % 3];
119+
}
120+
121+
private void OnFilterClick()
122+
{
123+
filterIdx++;
124+
filter = GetNextFilter(filterIdx);
125+
126+
infoLabel.text = $"Filtering on {filter.ToLower()}";
127+
root.Q<Button>("filter-btn").text = $"{GetNextFilter(filterIdx + 1)} team scores";
128+
129+
if (filter == "All")
130+
{
131+
entriesList.itemsSource = Talo.Leaderboards.GetCachedEntries(leaderboardName);
132+
}
133+
else
134+
{
135+
entriesList.itemsSource = new List<LeaderboardEntry>(Talo.Leaderboards.GetCachedEntries(leaderboardName)
136+
.FindAll((e) => e.GetProp("team", "") == filter));
137+
}
138+
139+
entriesList.Rebuild();
89140
}
90141
}

Assets/Samples/LeaderboardsDemo/UI/LeaderboardUI.uxml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
<ui:VisualElement style="flex-direction: column; margin-top: 16px;">
88
<ui:TextField picking-mode="Ignore" text="Username" name="username" />
99
<ui:Button text="Add entry" display-tooltip-when-elided="true" name="post-btn" />
10+
<ui:Button text="Blue team scores" display-tooltip-when-elided="true" name="filter-btn" />
1011
</ui:VisualElement>
1112
</ui:VisualElement>
1213
</ui:VisualElement>

0 commit comments

Comments
 (0)