diff --git a/client/Packages/com.beamable/Common/Runtime/Dependencies/BuilderExtensions.cs b/client/Packages/com.beamable/Common/Runtime/Dependencies/BuilderExtensions.cs new file mode 100644 index 0000000000..5aaa73c5cd --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/Dependencies/BuilderExtensions.cs @@ -0,0 +1,30 @@ +using System; +using System.Linq; + +namespace Beamable.Common.Dependencies +{ + public static class BuilderExtensions + { + + public static IDependencyBuilder AddSingletonDecorator(this IDependencyBuilder builder, Func instanceFactory) + where TImpl : TInterface + where TDecorator : TInterface + { + if (!builder.Has()) + builder.AddSingleton(); + + var singletons = builder.GetSingletonServices(); + var entry = singletons.FirstOrDefault(x => x.Interface == typeof(TInterface)); + + builder.AddSingleton(p => + { + return instanceFactory((TInterface)entry.Factory(p)); + }); + + builder.RemoveIfExists(); + builder.AddSingleton(p => p.GetService()); + return builder; + } + + } +} diff --git a/client/Packages/com.beamable/Common/Runtime/Dependencies/BuilderExtensions.cs.meta b/client/Packages/com.beamable/Common/Runtime/Dependencies/BuilderExtensions.cs.meta new file mode 100644 index 0000000000..3306a17141 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/Dependencies/BuilderExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 69bd1c33dc3d4022a09defcc71a9b4aa +timeCreated: 1696357600 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions.meta b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions.meta new file mode 100644 index 0000000000..562467778e --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9030dd0751ef4954b7ec40530b97ac45 +timeCreated: 1696356753 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/LeaderboardsDecoratorApi.cs b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/LeaderboardsDecoratorApi.cs new file mode 100644 index 0000000000..4be7fc2059 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/LeaderboardsDecoratorApi.cs @@ -0,0 +1,137 @@ +using Beamable.Api.Autogenerated.Leaderboards; +using Beamable.Api.Autogenerated.Models; +using Beamable.Common; +using Beamable.Common.Content; +using Beamable.Common.Dependencies; +using System; + +namespace Beamable.Api.Autogenerated.Leaderboards.Extensions +{ + public static class DependencyExtensions + { + + public static IDependencyBuilder AddLeaderboardDecorator(this IDependencyBuilder builder, Func factory) + where T : LeaderboardsDecoratorApi + { + builder.AddSingletonDecorator(factory); + return builder; + } + } + + public class LeaderboardsDecoratorApi : ILeaderboardsApi + { + private readonly ILeaderboardsApi _api; + + public LeaderboardsDecoratorApi(ILeaderboardsApi api) + { + _api = api; + } + + public virtual Promise ObjectDeleteEntries(string objectId) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectGetMembership(string objectId, long playerId) + { + throw new System.NotImplementedException(); + } + + public virtual Promise ObjectGetRanks(string ids, string objectId, bool includeAuthHeader = true) + { + return _api.ObjectGetRanks(ids, objectId, includeAuthHeader); + } + + public Promise ObjectGetPartition(string objectId, long playerId) + { + throw new System.NotImplementedException(); + } + + public virtual Promise ObjectGetFriends(string objectId) + { + return _api.ObjectGetFriends(objectId); + } + + public Promise ObjectPost(string objectId, LeaderboardCreateRequest gsReq) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectDelete(string objectId) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectGetMatches(string objectId, int poolSize, int windowSize, int windows, bool includeAuthHeader = true) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectGetAssignment(string objectId) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectDeleteAssignment(string objectId, LeaderboardRemoveCacheEntryRequest gsReq) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectPutEntry(string objectId, LeaderboardAddRequest gsReq, bool includeAuthHeader = true) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectDeleteEntry(string objectId, LeaderboardRemoveEntryRequest gsReq) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectPutFreeze(string objectId) + { + throw new System.NotImplementedException(); + } + + public Promise ObjectGetDetails(string objectId, Optional from = null, Optional max = null) + { + throw new System.NotImplementedException(); + } + + public virtual Promise ObjectGetView(string objectId, + Optional focus = null, + Optional friends = null, + Optional from = null, + Optional guild = null, + Optional max = null, + Optional outlier = null, + bool includeAuthHeader = true) + { + return _api.ObjectGetView(objectId, focus, friends, from, guild, max, outlier, includeAuthHeader); + } + + public Promise ObjectPutSwap(string objectId, LeaderboardSwapRequest gsReq) + { + throw new System.NotImplementedException(); + } + + public Promise GetList(Optional limit = null, Optional skip = null) + { + throw new System.NotImplementedException(); + } + + public Promise GetPlayer(long dbid) + { + throw new System.NotImplementedException(); + } + + public virtual Promise GetAssignment(string boardId, Optional joinBoard = null) + { + return _api.GetAssignment(boardId, joinBoard); + } + + public Promise GetUid() + { + throw new System.NotImplementedException(); + } + } +} diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/LeaderboardsDecoratorApi.cs.meta b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/LeaderboardsDecoratorApi.cs.meta new file mode 100644 index 0000000000..b232d10462 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/LeaderboardsDecoratorApi.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c2e27a4434964592941015d5630062d8 +timeCreated: 1696356784 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats.meta b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats.meta new file mode 100644 index 0000000000..66d7b623f9 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4e986bb1795648b2b34753e32fe6d0ce +timeCreated: 1696535795 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatMethodExtensions.cs b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatMethodExtensions.cs new file mode 100644 index 0000000000..ad382e266b --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatMethodExtensions.cs @@ -0,0 +1,70 @@ +using Beamable.Api.Autogenerated.Models; +using Beamable.Common; +using Beamable.Common.Api; +using Beamable.Common.Pooling; +using Beamable.Serialization.SmallerJSON; +using UnityEngine; +using EmptyResponse = Beamable.Api.Autogenerated.Models.EmptyResponse; + +namespace Beamable.Api.Autogenerated.Stats +{ + public partial interface IStatsApi + { + // public Promise Write(bool isPublic); + Promise Write(bool isPublic, long playerId, StatUpdateTypedRequest request); + } + + public partial class StatsApi + { + public async Promise Write(bool isPublic, long playerId, StatUpdateTypedRequest request) + { + // this.ObjectPostClient() + var objectId = $"client.{(isPublic ? "public" : "private")}.player.{playerId}"; + + string gsUrl = "/object/stats/{objectId}/client"; + gsUrl = gsUrl.Replace("{objectId}", _requester.EscapeURL(objectId.ToString())); + // make the request and return the result + + var dict = new ArrayDict(); + + dict[nameof(StatUpdateRequest.objectId)] = objectId; + dict[nameof(StatUpdateRequest.emitAnalytics)] = request.emitAnalytics.GetOrElse(false); + + var addDict = new ArrayDict(); + var setDict = new ArrayDict(); + dict[nameof(StatUpdateRequest.add)] = addDict; + dict[nameof(StatUpdateRequest.set)] = setDict; + + // handle all the adds + if (request.addLongs.HasValue) + { + foreach (var add in request.addLongs.Value) + { + addDict[add.Key] = add.Value; + } + } + + // handle all the sets + if (request.setLongs.HasValue) + { + foreach (var set in request.setLongs.Value) + { + setDict[set.Key] = set.Value; + } + } + if (request.setStrings.HasValue) + { + foreach (var set in request.setStrings.Value) + { + setDict[set.Key] = set.Value; + } + } + + using var sb = StringBuilderPool.StaticPool.Spawn(); + var json = Json.Serialize(dict, sb.Builder); + + Debug.Log("WRITING STATS " + json); + var _ = await _requester.Request(Method.POST, gsUrl, json, true, this.Serialize); + } + } +} diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatMethodExtensions.cs.meta b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatMethodExtensions.cs.meta new file mode 100644 index 0000000000..6e49d43846 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatMethodExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3375cc67b1d6486d809fb72cc7f8e9f7 +timeCreated: 1696535777 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatModelExtensions.cs b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatModelExtensions.cs new file mode 100644 index 0000000000..98090c3e80 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatModelExtensions.cs @@ -0,0 +1,87 @@ +using Beamable.Common.Content; +using Beamable.Serialization.SmallerJSON; +using System; +using System.Collections; +using UnityEngine.Serialization; + +namespace Beamable.Api.Autogenerated.Models +{ + [Serializable] + public partial class StatUpdateTypedRequest + { + public OptionalMapOfLong addLongs = new OptionalMapOfLong(); + public OptionalBool emitAnalytics = new OptionalBool(); + public OptionalMapOfLong setLongs = new OptionalMapOfLong(); + public OptionalMapOfString setStrings = new OptionalMapOfString(); + } + + public partial class BatchReadStatsResponse + { + public BatchReadStatsPlayerResponseDictionary playerIdToStats = new BatchReadStatsPlayerResponseDictionary(); + } + + [Serializable] + public class + BatchReadStatsPlayerResponseDictionary : SerializableDictionary + { + + } + + [Serializable] + public class BatchReadStatsPlayerResponse + { + public long id; + public SerializableDictionaryStringToLong longStats = new MapOfLong(); + public SerializableDictionaryStringToBool boolStats = new MapOfBool(); + public SerializableDictionaryStringToString stringStats = new MapOfString(); + } + public class StatsBatchResponseSerializer : ICustomSerializer + { + + + public BatchReadStatsResponse Deserialize(string data) + { + var x = Json.Deserialize(data) as ArrayDict; + var dict = new BatchReadStatsPlayerResponseDictionary(); + var res = new BatchReadStatsResponse {playerIdToStats = dict}; + if (!x.TryGetValue(nameof(BatchReadStatsResponse.results), out var results) || !(results is IList resultsList)) + { + return res; + } + + foreach (var elem in resultsList) + { + if (!(elem is ArrayDict elemDict)) continue; + + if (!elemDict.TryGetValue("id", out var playerIdObject) || !(playerIdObject is long playerId)) continue; + + if (!elemDict.TryGetValue("stats", out var statsObj) || !(statsObj is ArrayDict statsDict)) continue; + + var playerStats = dict[playerId] = new BatchReadStatsPlayerResponse {id = playerId}; + foreach (var statKvp in statsDict) + { + var valueObj = statKvp.Value; + var keyStr = statKvp.Key; + + switch (valueObj) + { + case string stringStat: + playerStats.stringStats[keyStr] = stringStat; + break; + case long intStat: + playerStats.longStats[keyStr] = intStat; + break; + case bool boolStat: + playerStats.boolStats[keyStr] = boolStat; + break; + default: + break; + } + + } + } + return res; + } + + } +} diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatModelExtensions.cs.meta b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatModelExtensions.cs.meta new file mode 100644 index 0000000000..06f1e948ff --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiExtensions/Stats/StatModelExtensions.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e0fa948223ca4b73a6c040bdf11c7ceb +timeCreated: 1696444809 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/OpenApiSystem.cs b/client/Packages/com.beamable/Common/Runtime/OpenApiSystem.cs index 731fdb523e..a142a84180 100644 --- a/client/Packages/com.beamable/Common/Runtime/OpenApiSystem.cs +++ b/client/Packages/com.beamable/Common/Runtime/OpenApiSystem.cs @@ -50,6 +50,7 @@ public static void RegisterOpenApis(IDependencyBuilder builder) // ApiSchedulerJobNextExecutionsGetSchedulerResponse // content requires special CSV parsing, and this allows us to inject an override. builder.AddSingleton, ClientManifestCsvResponseSerializer>(); + builder.AddSingleton, StatsBatchResponseSerializer>(); builder.AddSingleton, ArrayResponseSerializer>(); builder.AddSingleton, ArrayResponseSerializer>(); builder.AddSingleton, ArrayDateTimeResponseSerializer>(); diff --git a/client/Packages/com.beamable/Common/Runtime/Player/Observables.cs b/client/Packages/com.beamable/Common/Runtime/Player/Observables.cs index 750695c6c9..03ec1011f4 100644 --- a/client/Packages/com.beamable/Common/Runtime/Player/Observables.cs +++ b/client/Packages/com.beamable/Common/Runtime/Player/Observables.cs @@ -87,7 +87,12 @@ public virtual int GetBroadcastChecksum() } } - public abstract class AbsRefreshableObservable : DefaultObservable, IRefreshable + public abstract class AbsRefreshableObservable : AbsRefreshableObservableRoot + { + + } + + public abstract class AbsRefreshableObservableRoot : DefaultObservable, IRefreshable { /// /// An event that happens when the method starts. diff --git a/client/Packages/com.beamable/Common/Runtime/Util.meta b/client/Packages/com.beamable/Common/Runtime/Util.meta new file mode 100644 index 0000000000..a2b993b143 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/Util.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a14f365fcab40d0802b5bfb2e1ba710 +timeCreated: 1696596978 \ No newline at end of file diff --git a/client/Packages/com.beamable/Common/Runtime/Util/BeamUtil.cs b/client/Packages/com.beamable/Common/Runtime/Util/BeamUtil.cs new file mode 100644 index 0000000000..42701ceb82 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/Util/BeamUtil.cs @@ -0,0 +1,13 @@ +using System.Runtime.CompilerServices; + +namespace Beamable.Common +{ + public static class BeamUtil + { + [MethodImpl(MethodImplOptions.AggressiveInlining)] + public static int CombineHashCodes(int h1, int h2) + { + return (((h1 << 5) + h1) ^ h2); + } + } +} diff --git a/client/Packages/com.beamable/Common/Runtime/Util/BeamUtil.cs.meta b/client/Packages/com.beamable/Common/Runtime/Util/BeamUtil.cs.meta new file mode 100644 index 0000000000..4fa06d36f8 --- /dev/null +++ b/client/Packages/com.beamable/Common/Runtime/Util/BeamUtil.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b4286b320ed94212a498f0395dc372de +timeCreated: 1696596988 \ No newline at end of file diff --git a/client/Packages/com.beamable/Editor/Modules/Player/ObservableReadonlyListPropertyDrawer.cs b/client/Packages/com.beamable/Editor/Modules/Player/ObservableReadonlyListPropertyDrawer.cs index 2549d61221..9360dacff0 100644 --- a/client/Packages/com.beamable/Editor/Modules/Player/ObservableReadonlyListPropertyDrawer.cs +++ b/client/Packages/com.beamable/Editor/Modules/Player/ObservableReadonlyListPropertyDrawer.cs @@ -9,12 +9,22 @@ public class ObservableReadonlyListPropertyDrawer : PropertyDrawer { public override float GetPropertyHeight(SerializedProperty property, GUIContent label) { - return EditorGUI.GetPropertyHeight(property.FindPropertyRelative("_data"), label, true); + var dataProperty = property.FindPropertyRelative("_data"); + if (dataProperty == null ) return base.GetPropertyHeight(property, label); + + return EditorGUI.GetPropertyHeight(dataProperty, label, true); } public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) { + var dataProperty = property.FindPropertyRelative("_data"); + if (dataProperty == null) + { + base.OnGUI(position, property, label); + return; + } + GUI.enabled = false; - EditorGUI.PropertyField(position, property.FindPropertyRelative("_data"), label, true); + EditorGUI.PropertyField(position, dataProperty, label, true); GUI.enabled = true; } } diff --git a/client/Packages/com.beamable/Runtime/Beam.cs b/client/Packages/com.beamable/Runtime/Beam.cs index 91c5ee3e1c..93abe87e2a 100644 --- a/client/Packages/com.beamable/Runtime/Beam.cs +++ b/client/Packages/com.beamable/Runtime/Beam.cs @@ -199,6 +199,7 @@ static Beam() DependencyBuilder.AddSingleton(provider => provider.GetService()); DependencyBuilder.AddSingleton(); DependencyBuilder.AddScoped(); + DependencyBuilder.AddScoped(p => p.GetService()); DependencyBuilder.AddScoped(provider => new StatsService( @@ -278,6 +279,7 @@ static Beam() DependencyBuilder.AddSingleton>(provider => new Promise()); DependencyBuilder.AddSingleton(); DependencyBuilder.AddScoped(); + DependencyBuilder.AddScoped(); DependencyBuilder.AddScoped(); DependencyBuilder.AddScoped(); DependencyBuilder.AddScopedStorage(); diff --git a/client/Packages/com.beamable/Runtime/BeamContext.cs b/client/Packages/com.beamable/Runtime/BeamContext.cs index 9836dbfef7..0a94e45404 100644 --- a/client/Packages/com.beamable/Runtime/BeamContext.cs +++ b/client/Packages/com.beamable/Runtime/BeamContext.cs @@ -166,6 +166,8 @@ public long PlayerId ? _playerStats : (_playerStats = _serviceScope.GetService()); + public PlayerStats2 Stats2 => _serviceScope.GetService(); + /// /// Access the for this context. /// diff --git a/client/Packages/com.beamable/Runtime/Player/Leaderboards/LeaderboardLists.cs b/client/Packages/com.beamable/Runtime/Player/Leaderboards/LeaderboardLists.cs index ef3cb4668c..cb1462147d 100644 --- a/client/Packages/com.beamable/Runtime/Player/Leaderboards/LeaderboardLists.cs +++ b/client/Packages/com.beamable/Runtime/Player/Leaderboards/LeaderboardLists.cs @@ -1,5 +1,6 @@ using Beamable.Api.Autogenerated.Leaderboards; using Beamable.Api.Autogenerated.Models; +using Beamable.Api.Autogenerated.Stats; using Beamable.Common; using Beamable.Common.Api; using Beamable.Common.Dependencies; @@ -30,8 +31,14 @@ public abstract class PlayerScoreList : protected CoroutineService _coroutineService; [SerializeField] - protected int _viewSize = 10; + protected string[] _playerStats = new string[]{}; + + [SerializeField] + protected int _viewSize = 10; + + private IDependencyProvider _provider; + /// /// The number of entries in the leaderboard view list /// @@ -51,6 +58,7 @@ protected PlayerScoreList(IPlayerLeaderboardFriend board, IDependencyProvider pr protected void Hydrate(IPlayerLeaderboardFriend board, IDependencyProvider provider) { + _provider = provider; SetupDataListener(); _board = board; _api = provider.GetService(); @@ -118,6 +126,8 @@ protected void Apply(LeaderBoardViewResponse result) } } + // need to go get the stats for all these entries... + SetData(next); _board.Save(); } diff --git a/client/Packages/com.beamable/Runtime/Player/PlayerStats.cs b/client/Packages/com.beamable/Runtime/Player/PlayerStats.cs deleted file mode 100644 index 22c9c7bdcf..0000000000 --- a/client/Packages/com.beamable/Runtime/Player/PlayerStats.cs +++ /dev/null @@ -1,208 +0,0 @@ -using Beamable.Api; -using Beamable.Api.Stats; -using Beamable.Common; -using Beamable.Common.Api; -using Beamable.Common.Content; -using Beamable.Common.Dependencies; -using Beamable.Common.Player; -using Beamable.Coroutines; -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -namespace Beamable.Player -{ - /// - /// A is a named value associated with a player. - /// - [Serializable] - public class PlayerStat - { - - /// - /// The unique stat key. The stat key is only unique per stat domain. - /// While it is possible for multiple stat domains to have the same key, it is not recommended. - /// For example, there can be a stat domain for "client.public" stats, and a stat domain for "client.private", and each domain can - /// have a stat key called "Alias". - /// - public string Key { get; } - - /// - /// The that this stat was created from. - /// - public PlayerStats Group { get; } - - /// - /// The value of the stat - /// - public string Value { get; } - - public PlayerStat(string key, string value, PlayerStats group) - { - Key = key; - Value = value; - Group = group; - } - - public static implicit operator string(PlayerStat self) => self.Value; - - /// - /// Set the value of the stat for the current player. - /// If multiple calls to this method are issued per frame, all set operations will be baked into one network operation. - /// - /// - /// The desired stat value. This will override the existing value. - /// - /// - /// A representing the work. The promise won't complete until the stat value has been successfully set. - /// - public Promise Set(string nextValue) => Group.Set(Key, nextValue); - - public override string ToString() => Value; - - #region auto generated equality members - - protected bool Equals(PlayerStat other) - { - return Key == other.Key && Value == other.Value; - } - - public override bool Equals(object obj) - { - if (ReferenceEquals(null, obj)) - { - return false; - } - - if (ReferenceEquals(this, obj)) - { - return true; - } - - if (obj.GetType() != this.GetType()) - { - return false; - } - - return Equals((PlayerStat)obj); - } - - public override int GetHashCode() - { - unchecked - { - return ((Key != null ? Key.GetHashCode() : 0) * 397) ^ (Value != null ? Value.GetHashCode() : 0); - } - } - #endregion - - } - - [Serializable] - public class SerializableDictionaryStringToPlayerStat : SerializableDictionaryStringToSomething { } - - - [Serializable] - public class PlayerStats : AbsObservableReadonlyDictionary, IBeamableDisposable - { - private readonly IPlatformService _platform; - private readonly IUserContext _userContext; - private readonly StatsService _statService; - private readonly ISdkEventService _eventService; - private readonly CoroutineService _coroutineService; - - private readonly SdkEventConsumer _consumer; - private readonly Coroutine _updateRoutine; - - private Promise _commitSync = new Promise(); - private Dictionary _pendingUpdates = new Dictionary(); - - - public PlayerStats(IPlatformService platform, IUserContext userContext, StatsService statService, ISdkEventService eventService, CoroutineService coroutineService) - { - _platform = platform; - _userContext = userContext; - _statService = statService; - _eventService = eventService; - _coroutineService = coroutineService; - - _updateRoutine = _coroutineService.StartNew("playerStatLoop", Update()); - _consumer = _eventService.Register(nameof(PlayerStats), HandleEvent); - - var _ = Refresh(); // automatically start. - IsInitialized = true; - } - - private IEnumerator Update() - { - while (true) - { - yield return null; - if (_pendingUpdates.Count > 0) - { - _eventService.Add(new SdkEvent(nameof(PlayerStats), "commit")); - } - } - } - - private async Promise HandleEvent(SdkEvent evt) - { - switch (evt.Event) - { - case "set": - _pendingUpdates[evt.Args[0]] = evt.Args[1]; - await _commitSync; - break; - - case "commit": - if (_pendingUpdates.Count == 0) return; - - var network = _statService.SetStats("public", _pendingUpdates); - _pendingUpdates.Clear(); - await network; - await Refresh(); - _commitSync?.CompleteSuccess(); - _commitSync = new Promise(); - - break; - } - } - - protected override async Promise PerformRefresh() - { - await _platform.OnReady; - - var stats = await _statService.GetStats("client", "public", "player", _userContext.UserId); - - var nextData = new SerializableDictionaryStringToPlayerStat(); - foreach (var kvp in stats) - { - nextData.Add(kvp.Key, new PlayerStat(kvp.Key, kvp.Value, this)); - } - - SetData(nextData); - } - - /// - /// Set the value of a . - /// If multiple calls to this method are issued per frame, all set operations will be baked into one network operation. - /// - /// The stat key - /// The desired stat value. This will override the existing value. - /// - /// A representing the work. The promise won't complete until the set is complete. - /// - public Promise Set(string key, string value) - { - return _eventService.Add(new SdkEvent(nameof(PlayerStats), "set", key, value)); - } - - public Promise OnDispose() - { - _coroutineService.StopCoroutine(_updateRoutine); - _eventService.Unregister(_consumer); - return Promise.Success; - } - } -} diff --git a/client/Packages/com.beamable/Runtime/Player/Stats.meta b/client/Packages/com.beamable/Runtime/Player/Stats.meta new file mode 100644 index 0000000000..b8430ebd35 --- /dev/null +++ b/client/Packages/com.beamable/Runtime/Player/Stats.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 451a54a4b20642b091ae9b04099425bd +timeCreated: 1696532861 \ No newline at end of file diff --git a/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStatType.cs b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStatType.cs new file mode 100644 index 0000000000..2824a26bbc --- /dev/null +++ b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStatType.cs @@ -0,0 +1,56 @@ +using System; + +namespace Beamable.Player +{ + public enum PlayerStatType + { + /// + /// client.public.player + /// + PUBLIC, + + /// + /// client.private.player + /// + PRIVATE, + + /// + /// game.public.player + /// + SECURE, + + /// + /// game.private.player + /// + SECRET + } + + public static class PlayerStatTypeExtensions + { + public static string GetBeamableObjectId(this PlayerStatType self, long playerId) + { + ToBeamableObjectId(self, out var id); + return id + "." + playerId; + } + static void ToBeamableObjectId(this PlayerStatType self, out string objectId) + { + switch (self) + { + case PlayerStatType.PUBLIC: + objectId = "client.public.player"; + break; + case PlayerStatType.PRIVATE: + objectId = "client.private.player"; + break; + case PlayerStatType.SECURE: + objectId = "game.public.player"; + break; + case PlayerStatType.SECRET: + objectId = "game.private.player"; + break; + default: + throw new InvalidOperationException("Unknown enum value for player stat type"); + } + } + } +} diff --git a/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStatType.cs.meta b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStatType.cs.meta new file mode 100644 index 0000000000..5e1d5ad670 --- /dev/null +++ b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStatType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: eb35dc96839241d3a96bb1c98b121337 +timeCreated: 1696539237 \ No newline at end of file diff --git a/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStats.cs b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStats.cs new file mode 100644 index 0000000000..48eb4c9bb2 --- /dev/null +++ b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStats.cs @@ -0,0 +1,717 @@ +using Beamable.Api; +using Beamable.Api.Autogenerated.Models; +using Beamable.Api.Autogenerated.Stats; +using Beamable.Api.Stats; +using Beamable.Common; +using Beamable.Common.Api; +using Beamable.Common.Api.Notifications; +using Beamable.Common.Content; +using Beamable.Common.Dependencies; +using Beamable.Common.Player; +using Beamable.Common.Pooling; +using Beamable.Coroutines; +using Beamable.Serialization.SmallerJSON; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace Beamable.Player +{ + /// + /// A is a named value associated with a player. + /// + [Serializable] + public class PlayerStat + { + + /// + /// The unique stat key. The stat key is only unique per stat domain. + /// While it is possible for multiple stat domains to have the same key, it is not recommended. + /// For example, there can be a stat domain for "client.public" stats, and a stat domain for "client.private", and each domain can + /// have a stat key called "Alias". + /// + public string Key { get; } + + /// + /// The that this stat was created from. + /// + public PlayerStats Group { get; } + + /// + /// The value of the stat + /// + public string Value { get; } + + public PlayerStat(string key, string value, PlayerStats group) + { + Key = key; + Value = value; + Group = group; + } + + public static implicit operator string(PlayerStat self) => self.Value; + + /// + /// Set the value of the stat for the current player. + /// If multiple calls to this method are issued per frame, all set operations will be baked into one network operation. + /// + /// + /// The desired stat value. This will override the existing value. + /// + /// + /// A representing the work. The promise won't complete until the stat value has been successfully set. + /// + public Promise Set(string nextValue) => Group.Set(Key, nextValue); + + public override string ToString() => Value; + + #region auto generated equality members + + protected bool Equals(PlayerStat other) + { + return Key == other.Key && Value == other.Value; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) + { + return false; + } + + if (ReferenceEquals(this, obj)) + { + return true; + } + + if (obj.GetType() != this.GetType()) + { + return false; + } + + return Equals((PlayerStat)obj); + } + + public override int GetHashCode() + { + unchecked + { + return ((Key != null ? Key.GetHashCode() : 0) * 397) ^ (Value != null ? Value.GetHashCode() : 0); + } + } + #endregion + + } + + [Serializable] + public class SerializableDictionaryStringToPlayerStat : SerializableDictionaryStringToSomething { } + + public interface IPlayerStatsFriend + { + Promise RequestPlayerUpdate(ReadonlyPlayerStatCollection collection); + IDependencyProvider Provider { get; } + } + + [Serializable] + public abstract class PlayerStat : DefaultObservable + { + [SerializeField] + [HideInInspector] + private string key; + + public string Key => key; + + public TVal value; + + public static implicit operator TVal(PlayerStat stat) => stat.value; + + public event Action OnDataUpdated; + + public PlayerStat() + { + OnUpdated += () => OnDataUpdated?.Invoke(value); + } + + public void Set(TVal next) + { + value = next; + TriggerUpdate(); + } + + public void Set(TVal next, string key) + { + value = next; + this.key = key; + } + + public override int GetBroadcastChecksum() + { + return BeamUtil.CombineHashCodes(key.GetHashCode(), value.GetHashCode()); + } + } + + public class SerializableDictionaryStringToPlayerStatCollection : SerializableDictionaryStringToSomething + where TStat : PlayerStat + { + + } + + [Serializable] + public class SerializableDictionaryStringToPlayerStatCollection : SerializableDictionaryStringToSomething + { + + } + + public class PlayerStatTypedCollection + : AbsObservableReadonlyDictionary + where TStat : PlayerStat, new() + where TDict : SerializableDictionaryStringToPlayerStatCollection, new() + where TInputDict : SerializableDictionary + { + private readonly IRefreshable _refreshable; + + public PlayerStatTypedCollection(IRefreshable refreshable) + { + _refreshable = refreshable; + } + + public void Set(TInputDict input) + { + var next = new TDict(); + + foreach (var kvp in input) + { + if (this.TryGetValue(kvp.Key, out var existing)) + { + existing.Set(kvp.Value); + next[kvp.Key] = existing; + } + else + { + next[kvp.Key] = new TStat(); + next[kvp.Key].Set(kvp.Value, kvp.Key); + } + } + + SetData(next); + TriggerUpdate(); + } + + public override int GetBroadcastChecksum() + { + var checksum = 0; + foreach (var kvp in this) + { + checksum = BeamUtil.CombineHashCodes(checksum, kvp.Key.GetHashCode()); + checksum = BeamUtil.CombineHashCodes(checksum, kvp.Value.GetBroadcastChecksum()); + } + + return checksum; + } + + protected override async Promise PerformRefresh() + { + await _refreshable.Refresh(); + } + } + + [Serializable] + public class PlayerStringStat : PlayerStat + { + + } + + [Serializable] + public class PlayerLongStat : PlayerStat + { + + } + + [Serializable] + public class PlayerStringStatDictionary + : SerializableDictionaryStringToPlayerStatCollection + { + + } + + + [Serializable] + public class PlayerLongStatDictionary + : SerializableDictionaryStringToPlayerStatCollection + { + + } + + [Serializable] + public class PlayerStringStats : PlayerStatTypedCollection + { + public PlayerStringStats(IRefreshable refreshable) : base(refreshable) { } + } + + + [Serializable] + public class PlayerLongStats : PlayerStatTypedCollection + { + public PlayerLongStats(IRefreshable refreshable) : base(refreshable) { } + } + + [Serializable] + public class ReadonlyPlayerStatCollection : AbsRefreshableObservableRoot + { + protected readonly IPlayerStatsFriend _statsFriend; + + public PlayerStringStats stringStats; + + public PlayerLongStats longStats; + + [SerializeField] + private long _playerId; + + [SerializeField] + private PlayerStatType _type; + + [SerializeField] + private string[] _listeningStats; + + public long PlayerId => _playerId; + public PlayerStatType StatType => _type; + + public ReadonlyPlayerStatCollection(IPlayerStatsFriend statsFriend, PlayerStatType type, long playerId) + { + _statsFriend = statsFriend; + _type = type; + _playerId = playerId; + + stringStats = new PlayerStringStats(this); + longStats = new PlayerLongStats(this); + + var notifications = _statsFriend.Provider.GetService(); + notifications.Subscribe("stats.update", (raw) => + { + Debug.Log("got data?"); + if (!(raw is ArrayDict data)) return; + Debug.Log("Got array dict data!"); + + }); + } + + public async Promise Listen(params string[] stats) + { + _listeningStats = stats; + var api = _statsFriend.Provider.GetService(); + await api.PutSubscribe(new StatsSubscribeRequest + { + service = StatType.GetBeamableObjectId(PlayerId), + subscriptions = _listeningStats + }); + } + + public void Provide(BatchReadStatsPlayerResponse response) + { + stringStats.Set(response.stringStats); + longStats.Set(response.longStats); + } + + protected override async Promise PerformRefresh() + { + await _statsFriend.RequestPlayerUpdate(this); + } + + public override int GetBroadcastChecksum() + { + return BeamUtil.CombineHashCodes(stringStats.GetBroadcastChecksum(), longStats.GetBroadcastChecksum()); + } + } + + [Serializable] + public class PlayerStatCollection : AbsRefreshableObservableRoot + { + private readonly IPlayerStatsFriend _friend; + private readonly ReadonlyPlayerStatCollection _collection; + private StatUpdateTypedRequest _pendingRequest = new StatUpdateTypedRequest(); + private Promise _inflightWrite; + + public PlayerStringStats stringStats; + + public PlayerLongStats longStats; + + public long PlayerId => _collection.PlayerId; + public PlayerStatType StatType => _collection.StatType; + + public PlayerStatCollection(IPlayerStatsFriend friend, ReadonlyPlayerStatCollection collection) + { + _friend = friend; + _collection = collection; + stringStats = _collection.stringStats; + longStats = _collection.longStats; + + } + + public async Promise SetString(string key, string value) + { + if (!_pendingRequest.setStrings.HasValue) + { + _pendingRequest.setStrings.Set(new MapOfString()); + } + + _pendingRequest.setStrings.Value[key] = value; + await WaitForWrite(); + } + + public async Promise SetString(Dictionary stats) + { + if (!_pendingRequest.setStrings.HasValue) + { + _pendingRequest.setStrings.Set(new MapOfString()); + } + + foreach (var kvp in stats) + { + _pendingRequest.setStrings.Value[kvp.Key] = kvp.Value; + } + await WaitForWrite(); + } + + + public async Promise SetLong(string key, long value) + { + if (!_pendingRequest.setLongs.HasValue) + { + _pendingRequest.setLongs.Set(new MapOfLong()); + } + + _pendingRequest.setLongs.Value[key] = value; + await WaitForWrite(); + } + + public async Promise SetLong(Dictionary longStats) + { + if (!_pendingRequest.setLongs.HasValue) + { + _pendingRequest.setLongs.Set(new MapOfLong()); + } + + foreach (var kvp in longStats) + { + _pendingRequest.setLongs.Value[kvp.Key] = kvp.Value; + } + await WaitForWrite(); + } + + public async Promise IncrementLong(string key, long increment) + { + if (!_pendingRequest.setLongs.HasValue) + { + _pendingRequest.setLongs.Set(new MapOfLong()); + } + + _pendingRequest.addLongs.Value[key] += increment; + await WaitForWrite(); + } + + + public async Promise IncrementLong(Dictionary increments) + { + if (!_pendingRequest.setLongs.HasValue) + { + _pendingRequest.setLongs.Set(new MapOfLong()); + } + + foreach (var kvp in increments) + { + _pendingRequest.addLongs.Value[kvp.Key] += kvp.Value; + } + await WaitForWrite(); + } + + async Promise WaitForWrite() + { + var debouncer = _friend.Provider.GetService(); + await (_inflightWrite = debouncer.SetTimeout(DoWrite)); + } + + /// + /// A that completes when calls to are completed. + /// + public async Promise WaitForSet() + { + if (_inflightWrite != null) + { + await _inflightWrite; + } + } + + async Promise DoWrite() + { + var api = _friend.Provider.GetService(); + var request = api.Write(true, PlayerId, _pendingRequest); + + _pendingRequest = new StatUpdateTypedRequest(); + await request; + await Refresh(); + } + + protected override async Promise PerformRefresh() + { + await _collection.Refresh(); + } + + public override int GetBroadcastChecksum() + { + return _collection.GetBroadcastChecksum(); + } + } + + + [Serializable] + public class PlayerStats2 : IPlayerStatsFriend + { + private readonly IDependencyProvider _provider; + private readonly IUserContext _userContext; + + public SerializableDictionaryStringToPlayerStatCollection playerStatTable = + new SerializableDictionaryStringToPlayerStatCollection(); + + private PlayerStatCollection _myPublicStats; + + private HashSet _playersToRefresh = new HashSet(); + private Promise _syncPromise; + + public PlayerStats2(IDependencyProvider provider) + { + _provider = provider; + + _userContext = _provider.GetService(); + } + + public PlayerStatCollection MyPublicStats + { + get + { + if (_myPublicStats == null) + { + var readonlyStats = GetStatCollection(PlayerStatType.PUBLIC, _userContext.UserId); + + _myPublicStats = new PlayerStatCollection(this, readonlyStats); + + } + + return _myPublicStats; + } + } + public ReadonlyPlayerStatCollection MyPrivateStats => GetStatCollection(PlayerStatType.PRIVATE, _userContext.UserId); + public ReadonlyPlayerStatCollection MySecuredStats => GetStatCollection(PlayerStatType.SECURE, _userContext.UserId); + + public ReadonlyPlayerStatCollection ForPlayer(long playerId) => + GetStatCollection(PlayerStatType.PUBLIC, playerId); + + IDependencyProvider IPlayerStatsFriend.Provider => _provider; + + private ReadonlyPlayerStatCollection GetStatCollection(PlayerStatType type, long playerId) + { + if (!playerStatTable.TryGetValue(type.GetBeamableObjectId(playerId), out var stats)) + { + playerStatTable[type.GetBeamableObjectId(playerId)] = stats = new ReadonlyPlayerStatCollection(this, type, playerId); + var _ = stats.Refresh(); + } + + return stats; + } + + + Promise IPlayerStatsFriend.RequestPlayerUpdate(ReadonlyPlayerStatCollection collection) => + RequestPlayerUpdate(collection); + async Promise RequestPlayerUpdate(ReadonlyPlayerStatCollection collection) + { + _playersToRefresh.Add(collection); + + await _provider.GetService().SetTimeout(LoadAllPlayers); + + // if (_syncPromise == null) + // { + // _syncPromise = LoadAllPlayers(); // TODO: Delay a frame + // } + // + // await _syncPromise; + } + + + + async Promise LoadAllPlayers() + { + var api = _provider.GetService(); + var copy = new HashSet(_playersToRefresh); + + var splitGroups = SplitIntoTypeGroups(copy); + var promises = new List>(); + + foreach (var group in splitGroups) + { + var data = GetGroupData(api, group.Value); + promises.Add(data); + } + + var results = await Promise.Sequence(promises); + for (var i = 0; i < splitGroups.Count; i++) + { + var type = splitGroups[i].Key; + var statData = results[i]; + + foreach (var kvp in statData.playerIdToStats) + { + var playerId = kvp.Key; + var objectId = type.GetBeamableObjectId(playerId); + if (playerStatTable.TryGetValue(objectId, out var collection)) + { + collection.Provide(kvp.Value); + } + } + } + + } + + + + static async Promise GetGroupData(IStatsApi api, HashSet copy) + { + using var sb = StringBuilderPool.StaticPool.Spawn(); + foreach (var collection in copy) + { + sb.Builder.Append(collection.StatType.GetBeamableObjectId(collection.PlayerId)); + sb.Builder.Append(","); + } + var query = sb.Builder.ToString(); + var result = await api.GetClientBatch(query); + + return result; + } + + static List>> SplitIntoTypeGroups(HashSet collections) + { + var dict = new Dictionary>(); + foreach (var collection in collections) + { + if (!dict.TryGetValue(collection.StatType, out var list)) + { + dict[collection.StatType] = list = new HashSet(); + } + + list.Add(collection); + } + + return dict.ToList(); + } + + } + + + [Serializable] + public class PlayerStats : AbsObservableReadonlyDictionary, IBeamableDisposable + { + private readonly IPlatformService _platform; + private readonly IUserContext _userContext; + private readonly StatsService _statService; + private readonly ISdkEventService _eventService; + private readonly CoroutineService _coroutineService; + + private readonly SdkEventConsumer _consumer; + private readonly Coroutine _updateRoutine; + + private Promise _commitSync = new Promise(); + private Dictionary _pendingUpdates = new Dictionary(); + + + public PlayerStats(IPlatformService platform, IUserContext userContext, StatsService statService, ISdkEventService eventService, CoroutineService coroutineService) + { + _platform = platform; + _userContext = userContext; + _statService = statService; + _eventService = eventService; + _coroutineService = coroutineService; + + _updateRoutine = _coroutineService.StartNew("playerStatLoop", Update()); + _consumer = _eventService.Register(nameof(PlayerStats), HandleEvent); + + var _ = Refresh(); // automatically start. + IsInitialized = true; + } + + private IEnumerator Update() + { + while (true) + { + yield return null; + if (_pendingUpdates.Count > 0) + { + _eventService.Add(new SdkEvent(nameof(PlayerStats), "commit")); + } + } + } + + private async Promise HandleEvent(SdkEvent evt) + { + switch (evt.Event) + { + case "set": + _pendingUpdates[evt.Args[0]] = evt.Args[1]; + await _commitSync; + break; + + case "commit": + if (_pendingUpdates.Count == 0) return; + + var network = _statService.SetStats("public", _pendingUpdates); + _pendingUpdates.Clear(); + await network; + await Refresh(); + _commitSync?.CompleteSuccess(); + _commitSync = new Promise(); + + break; + } + } + + protected override async Promise PerformRefresh() + { + await _platform.OnReady; + + var stats = await _statService.GetStats("client", "public", "player", _userContext.UserId); + + var nextData = new SerializableDictionaryStringToPlayerStat(); + foreach (var kvp in stats) + { + nextData.Add(kvp.Key, new PlayerStat(kvp.Key, kvp.Value, this)); + } + + SetData(nextData); + } + + /// + /// Set the value of a . + /// If multiple calls to this method are issued per frame, all set operations will be baked into one network operation. + /// + /// The stat key + /// The desired stat value. This will override the existing value. + /// + /// A representing the work. The promise won't complete until the set is complete. + /// + public Promise Set(string key, string value) + { + return _eventService.Add(new SdkEvent(nameof(PlayerStats), "set", key, value)); + } + + public Promise OnDispose() + { + _coroutineService.StopCoroutine(_updateRoutine); + _eventService.Unregister(_consumer); + return Promise.Success; + } + + public void GetOtherPlayer() + { + + } + } +} diff --git a/client/Packages/com.beamable/Runtime/Player/PlayerStats.cs.meta b/client/Packages/com.beamable/Runtime/Player/Stats/PlayerStats.cs.meta similarity index 100% rename from client/Packages/com.beamable/Runtime/Player/PlayerStats.cs.meta rename to client/Packages/com.beamable/Runtime/Player/Stats/PlayerStats.cs.meta diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards.meta new file mode 100644 index 0000000000..46d8b8afb2 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 798fb48ba0b5943889b79534a9c806e6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/FakeLeaderboardApi.cs b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/FakeLeaderboardApi.cs new file mode 100644 index 0000000000..80aa8d4948 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/FakeLeaderboardApi.cs @@ -0,0 +1,65 @@ +using Beamable.Api.Autogenerated.Leaderboards; +using Beamable.Api.Autogenerated.Leaderboards.Extensions; +using Beamable.Api.Autogenerated.Models; +using Beamable.Api.Caches; +using Beamable.Api.Stats; +using Beamable.Common; +using Beamable.Common.Api; +using Beamable.Common.Api.Stats; +using Beamable.Common.Content; +using Beamable.Common.Dependencies; +using System.Collections.Generic; +using UnityEngine; + +namespace Samples.LightBeamSamples.Leaderboards +{ + public class FakeLeaderboardApi : LeaderboardsDecoratorApi + { + public FakeLeaderboardApi(ILeaderboardsApi api) : base(api) + { + + } + + public override async Promise ObjectGetView(string objectId, + Optional focus = null, + Optional friends = null, + Optional from = null, + Optional guild = null, + Optional max = null, + Optional outlier = null, + bool includeAuthHeader = true) + { + var realData = await base.ObjectGetView(objectId, focus, friends, from, guild, max, outlier, includeAuthHeader); + + // add random stuff. + if ((max?.HasValue ?? false) && realData.lb.rankings.Length < max) + { + PopulateFakeRankings(max.Value, ref realData.lb.rankings); + } + + return realData; + } + + static void PopulateFakeRankings(int count, ref RankEntry[] entries) + { + var old = entries; + var size = entries.Length; + var requiredAdditions = count - size; + entries = new RankEntry[count]; + for (var i = 0; i < size; i++) + { + entries[i] = old[i]; + } + + for (var i = size; i < count; i++) + { + entries[i] = new RankEntry + { + gt = (long)(Random.value * long.MaxValue), + rank = i, + }; + entries[i].score.Set((double)Random.value * 1000); + } + } + } +} diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/FakeLeaderboardApi.cs.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/FakeLeaderboardApi.cs.meta new file mode 100644 index 0000000000..4e9b23d7ae --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/FakeLeaderboardApi.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1fe30bf1d50346eda65dcf1f1f2b4f4b +timeCreated: 1696357108 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LeaderboardManager.cs b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LeaderboardManager.cs new file mode 100644 index 0000000000..810a173dd3 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LeaderboardManager.cs @@ -0,0 +1,47 @@ + +using Beamable; +using Beamable.Api.Autogenerated.Leaderboards; +using Beamable.Api.Autogenerated.Leaderboards.Extensions; +using Beamable.Api.Stats; +using Beamable.Common.Api.Stats; +using Beamable.Common.Dependencies; +using Beamable.Common.Leaderboards; +using Beamable.Player; +using Beamable.Runtime.LightBeams; +using Samples.LightBeamSamples.Leaderboards; +using UnityEngine; + +public class LeaderboardManager : MonoBehaviour +{ + [Header("Configuration")] + public LeaderboardHomePageModel model; + + [Header("Scene references")] + public RectTransform root; + public CanvasGroup loadingBlocker; + + [Header("Asset references")] + public LeaderboardHomePage homePageTemplate; + public EntryDisplayBehaviour entryDisplayTemplate; + + async void Start() + { + var builder = Beam.DependencyBuilder; + + // TODO: publish a leaderboard if one does not exist + + // TODO: add mock leaderboard API + builder.AddLeaderboardDecorator(api => new FakeLeaderboardApi(api)); + + var beamContext = BeamContext.Default; + + var lightBeam = await beamContext.CreateLightBeam(root, loadingBlocker, builder => + { + builder.AddLightComponent(homePageTemplate); + builder.AddLightComponent(entryDisplayTemplate); + }); + + await lightBeam.Scope.Start(model); + } +} + diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LeaderboardManager.cs.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LeaderboardManager.cs.meta new file mode 100644 index 0000000000..9c3282ffec --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LeaderboardManager.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 889e0cbbf8d248908560d196362d70f1 +timeCreated: 1696273046 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LightBeam.Leaderboard.asmdef b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LightBeam.Leaderboard.asmdef new file mode 100644 index 0000000000..0555e62c82 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LightBeam.Leaderboard.asmdef @@ -0,0 +1,21 @@ +{ + "name": "LightBeam.Leaderboard", + "rootNamespace": "", + "references": [ + "Unity.Beamable", + "Unity.Beamable.Runtime.Common", + "Unity.Beamable.Customer.Common", + "Unity.TextMeshPro", + "Unity.Beamable.LightBeams", + "Beamable.Platform" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LightBeam.Leaderboard.asmdef.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LightBeam.Leaderboard.asmdef.meta new file mode 100644 index 0000000000..eeaa11f52a --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/LightBeam.Leaderboard.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1287f850add647f9b93e2c03c6bf789 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs.meta new file mode 100644 index 0000000000..807625cf53 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c658d443cdd64e50ba67b0f0bbb44b2a +timeCreated: 1696273118 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay.meta new file mode 100644 index 0000000000..2783d5366c --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 035503e2b14a43a3a33f534c49dce940 +timeCreated: 1696273924 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplay.prefab b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplay.prefab new file mode 100644 index 0000000000..208f53cebf --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplay.prefab @@ -0,0 +1,734 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4044838020268674364 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5314294281843120841} + - component: {fileID: 2060631081308690830} + - component: {fileID: 3950729975935953850} + m_Layer: 5 + m_Name: Rank_Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5314294281843120841 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4044838020268674364} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6532568910138788170} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 12, y: 0} + m_SizeDelta: {x: 100, y: 0} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &2060631081308690830 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4044838020268674364} + m_CullTransparentMesh: 1 +--- !u!114 &3950729975935953850 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4044838020268674364} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 100 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 59.7 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4614198477109925010 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7492911162143977703} + - component: {fileID: 4486045613548100713} + - component: {fileID: 3429850062290971369} + m_Layer: 5 + m_Name: Alias_Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7492911162143977703 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4614198477109925010} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6532568910138788170} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0.6, y: 1} + m_AnchoredPosition: {x: 250, y: -12} + m_SizeDelta: {x: -250, y: -24} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &4486045613548100713 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4614198477109925010} + m_CullTransparentMesh: 1 +--- !u!114 &3429850062290971369 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4614198477109925010} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &4883650248428921321 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6213736547690213393} + - component: {fileID: 1615557018529276481} + - component: {fileID: 8133656322891879457} + m_Layer: 5 + m_Name: PlayerId_Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6213736547690213393 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4883650248428921321} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6532568910138788170} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0.6, y: 1} + m_AnchoredPosition: {x: 250, y: -12} + m_SizeDelta: {x: -250, y: 20} + m_Pivot: {x: 0, y: 1} +--- !u!222 &1615557018529276481 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4883650248428921321} + m_CullTransparentMesh: 1 +--- !u!114 &8133656322891879457 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4883650248428921321} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &6301136603704093725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6532568910138788170} + - component: {fileID: 9012840917363351780} + - component: {fileID: 6431786871112612735} + - component: {fileID: 6129473465048054174} + - component: {fileID: 9107807836217117829} + m_Layer: 5 + m_Name: EntryDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6532568910138788170 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6301136603704093725} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5314294281843120841} + - {fileID: 8573602533912247350} + - {fileID: 7492911162143977703} + - {fileID: 6213736547690213393} + - {fileID: 6103601635375163920} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9012840917363351780 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6301136603704093725} + m_CullTransparentMesh: 1 +--- !u!114 &6431786871112612735 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6301136603704093725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0.105882354} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6129473465048054174 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6301136603704093725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f33c625a064b4485925264d0c0454c1c, type: 3} + m_Name: + m_EditorClassIdentifier: + selfColor: {r: 0.36470592, g: 1, b: 0.5123378, a: 0.65882355} + aliasLabel: {fileID: 3429850062290971369} + playerIdLabel: {fileID: 8133656322891879457} + rankLabel: {fileID: 3950729975935953850} + scoreLabel: {fileID: 328460288564891983} + avatarImage: {fileID: 4456048571505175584} + backgroundImage: {fileID: 6431786871112612735} +--- !u!114 &9107807836217117829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6301136603704093725} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 120 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &8067716764636658175 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8573602533912247350} + - component: {fileID: 5162987153804068815} + - component: {fileID: 4456048571505175584} + m_Layer: 5 + m_Name: Avatar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8573602533912247350 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8067716764636658175} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6532568910138788170} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 125, y: 0} + m_SizeDelta: {x: 100, y: -24} + m_Pivot: {x: 0, y: 0.5} +--- !u!222 &5162987153804068815 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8067716764636658175} + m_CullTransparentMesh: 1 +--- !u!114 &4456048571505175584 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8067716764636658175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8475160373034611057 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6103601635375163920} + - component: {fileID: 4938978700994944364} + - component: {fileID: 328460288564891983} + m_Layer: 5 + m_Name: Score_Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6103601635375163920 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8475160373034611057} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 6532568910138788170} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.6, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -12, y: 0.00002670288} + m_SizeDelta: {x: -12, y: 0} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &4938978700994944364 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8475160373034611057} + m_CullTransparentMesh: 1 +--- !u!114 &328460288564891983 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8475160373034611057} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 100 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 72 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 4 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplay.prefab.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplay.prefab.meta new file mode 100644 index 0000000000..0fff64df96 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplay.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8dd4c6b68aaf24ec298293c99403e02d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplayBehaviour.cs b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplayBehaviour.cs new file mode 100644 index 0000000000..ce91061ee7 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplayBehaviour.cs @@ -0,0 +1,67 @@ + +using Beamable.Avatars; +using Beamable.Common; +using Beamable.Player; +using Beamable.Runtime.LightBeams; +using TMPro; +using UnityEngine; +using UnityEngine.UI; + +public class EntryDisplayBehaviour : MonoBehaviour, ILightComponent +{ + [Header("Configuration")] + public Color selfColor; + + [Header("Scene References")] + public TMP_Text aliasLabel; + public TMP_Text playerIdLabel; + public TMP_Text rankLabel; + public TMP_Text scoreLabel; + public Image avatarImage; + public Image backgroundImage; + + public async Promise OnInstantiated(LightBeam beam, PlayerLeaderboardEntry model) + { + if (model.playerId == beam.BeamContext.PlayerId) + { + backgroundImage.color = selfColor; + } + + var statsService = beam.BeamContext.Api.StatsService; + var stats = await statsService.GetStats("client", "public", "player", model.playerId); + + if (!stats.TryGetValue("alias", out var alias)) + { + alias = "Anonymous"; + } + + if (!stats.TryGetValue("avatar", out var avatar)) + { + avatar = "1"; + } + + aliasLabel.text = alias; + rankLabel.text = model.rank.ToString("000"); + scoreLabel.text = model.score.ToString("."); + playerIdLabel.text = model.playerId.ToString(); + + var config = beam.Scope.GetService(); + for (var i = 0 ; i < config.Avatars.Count; i ++) + { + if (config.Avatars[i].Name == avatar) + { + avatarImage.sprite = config.Avatars[i].Sprite; + break; + } + + if (config.Avatars.Count - 1 == i) + { + // if the end of list is here, just use the first avatar. + avatarImage.sprite = config.Avatars[0].Sprite; + } + } + + } + +} + diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplayBehaviour.cs.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplayBehaviour.cs.meta new file mode 100644 index 0000000000..a74033d88f --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/EntryDisplay/EntryDisplayBehaviour.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f33c625a064b4485925264d0c0454c1c +timeCreated: 1696273933 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage.meta new file mode 100644 index 0000000000..ceae9d4217 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e3d68da5c6fe4ecab2d6060f08302144 +timeCreated: 1696273126 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.cs b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.cs new file mode 100644 index 0000000000..e0bcee44ac --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.cs @@ -0,0 +1,92 @@ + +using Beamable.Common; +using Beamable.Common.Leaderboards; +using Beamable.Player; +using Beamable.Runtime.LightBeams; +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +[Serializable] +public class LeaderboardHomePageModel +{ + public LeaderboardRef LeaderboardRef; + public LeaderboardHomePageViewState viewState; + public bool useMockData; +} + +public enum LeaderboardHomePageViewState +{ + TopScores, + Friends, + Nearby +} + +public class LeaderboardHomePage : MonoBehaviour, ILightComponent +{ + [Header("Scene References")] + public RectTransform scoreContainer; + + public Button topScoreButton; + public Button friendScoreButton; + public Button nearbyScoreButton; + + public async Promise OnInstantiated(LightBeam beam, LeaderboardHomePageModel model) + { + var leaderboards = beam.BeamContext.Leaderboards; + var leaderboard = leaderboards.GetBoard(model.LeaderboardRef); + + topScoreButton.HandleClicked(async () => + { + await ChangeViewState(beam, model, LeaderboardHomePageViewState.TopScores); + }); + friendScoreButton.HandleClicked(async () => + { + await ChangeViewState(beam, model, LeaderboardHomePageViewState.Friends); + }); + nearbyScoreButton.HandleClicked(async () => + { + await ChangeViewState(beam, model, LeaderboardHomePageViewState.Nearby); + }); + + switch (model.viewState) + { + case LeaderboardHomePageViewState.TopScores: + await RenderScores(beam, leaderboard.TopScores.LoadCount(25)); + break; + case LeaderboardHomePageViewState.Friends: + await RenderScores(beam, leaderboard.FriendScores.LoadCount(25)); + break; + case LeaderboardHomePageViewState.Nearby: + await RenderScores(beam, leaderboard.NearbyScores.LoadCount(25)); + break; + } + } + + async Promise RenderScores(LightBeam beam, PlayerScoreList list) + { + await list.Refresh(); + scoreContainer.Clear(); + var loadingEntries = new List>(); + foreach (var score in list) + { + var loadEntry = beam.Instantiate(scoreContainer, score); + loadingEntries.Add(loadEntry); + } + + await Promise.Sequence(loadingEntries); + } + + async Promise ChangeViewState(LightBeam beam, + LeaderboardHomePageModel model, + LeaderboardHomePageViewState nextState) + { + await beam.GotoPage(new LeaderboardHomePageModel + { + LeaderboardRef = model.LeaderboardRef, + viewState = nextState + }); + } +} + diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.cs.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.cs.meta new file mode 100644 index 0000000000..e09097f83f --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a4db917c52f54cac90f9718ebe41de18 +timeCreated: 1696273135 \ No newline at end of file diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.prefab b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.prefab new file mode 100644 index 0000000000..5268a4269a --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.prefab @@ -0,0 +1,1867 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &191033519959060420 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5126636921772431130} + - component: {fileID: 8163725749150762162} + - component: {fileID: 2690400636148856744} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5126636921772431130 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191033519959060420} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 369436301902892310} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -24, y: -24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8163725749150762162 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191033519959060420} + m_CullTransparentMesh: 1 +--- !u!114 &2690400636148856744 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 191033519959060420} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Top Scores + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &224666269130288500 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7376412555318546772} + - component: {fileID: 6325651295746983380} + - component: {fileID: 4741035325237902278} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7376412555318546772 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224666269130288500} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7811646182022051730} + m_Father: {fileID: 5225330595689451254} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &6325651295746983380 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224666269130288500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 12 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &4741035325237902278 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 224666269130288500} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &853174026885090708 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3264589939677277411} + - component: {fileID: 6343691465641216191} + - component: {fileID: 5336933919413634186} + - component: {fileID: 790374211336709625} + m_Layer: 5 + m_Name: Button_FriendScores + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3264589939677277411 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853174026885090708} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 2993085719791242815} + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 872, y: -24} + m_SizeDelta: {x: 400, y: 100} + m_Pivot: {x: 0, y: 1} +--- !u!222 &6343691465641216191 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853174026885090708} + m_CullTransparentMesh: 1 +--- !u!114 &5336933919413634186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853174026885090708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4433962, g: 0.4433962, b: 0.4433962, a: 0.4627451} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &790374211336709625 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 853174026885090708} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.24056602, g: 0.70287645, b: 1, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 5336933919413634186} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1462570144407623579 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2993085719791242815} + - component: {fileID: 5941689687655048272} + - component: {fileID: 4267082860798659182} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2993085719791242815 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462570144407623579} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3264589939677277411} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -24, y: -24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5941689687655048272 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462570144407623579} + m_CullTransparentMesh: 1 +--- !u!114 &4267082860798659182 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1462570144407623579} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Friend Scores + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &1661342403237454219 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5159426777868975014} + - component: {fileID: 8565628126474408268} + - component: {fileID: 8372564380568424026} + - component: {fileID: 5604047445844159472} + m_Layer: 5 + m_Name: ScoresScrolLView + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5159426777868975014 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661342403237454219} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5225330595689451254} + - {fileID: 2211254145011248284} + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -50} + m_SizeDelta: {x: -48, y: -300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8565628126474408268 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661342403237454219} + m_CullTransparentMesh: 1 +--- !u!114 &8372564380568424026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661342403237454219} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.40392157} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5604047445844159472 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1661342403237454219} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 7376412555318546772} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 1 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 5225330595689451254} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 1355252114436278412} + m_HorizontalScrollbarVisibility: 2 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: -3 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &2113771225162849430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7959349763484157163} + - component: {fileID: 5659314905577159431} + - component: {fileID: 6817628374519116934} + - component: {fileID: 2358341239599292943} + m_Layer: 5 + m_Name: Button_NearbyScores + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7959349763484157163 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113771225162849430} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 707978241070947674} + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 448, y: -24} + m_SizeDelta: {x: 400, y: 100} + m_Pivot: {x: 0, y: 1} +--- !u!222 &5659314905577159431 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113771225162849430} + m_CullTransparentMesh: 1 +--- !u!114 &6817628374519116934 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113771225162849430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4433962, g: 0.4433962, b: 0.4433962, a: 0.4627451} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2358341239599292943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2113771225162849430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.24056602, g: 0.70287645, b: 1, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6817628374519116934} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &2279256698486749716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5225330595689451254} + - component: {fileID: 8494219321797027850} + - component: {fileID: 8018392481068225818} + - component: {fileID: 1630168728545384435} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5225330595689451254 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2279256698486749716} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7376412555318546772} + m_Father: {fileID: 5159426777868975014} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8494219321797027850 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2279256698486749716} + m_CullTransparentMesh: 1 +--- !u!114 &8018392481068225818 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2279256698486749716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1630168728545384435 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2279256698486749716} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &2538854045468084221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2211254145011248284} + - component: {fileID: 2365908071790952595} + - component: {fileID: 5730247986961096399} + - component: {fileID: 1355252114436278412} + m_Layer: 5 + m_Name: Scrollbar Vertical + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2211254145011248284 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2538854045468084221} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 3987342493511289489} + m_Father: {fileID: 5159426777868975014} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: -17} + m_Pivot: {x: 1, y: 1} +--- !u!222 &2365908071790952595 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2538854045468084221} + m_CullTransparentMesh: 1 +--- !u!114 &5730247986961096399 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2538854045468084221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1355252114436278412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2538854045468084221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6349351734658999815} + m_HandleRect: {fileID: 7148908955977827108} + m_Direction: 2 + m_Value: 0 + m_Size: 1 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5146007739993727286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6126595788752528699} + - component: {fileID: 8311110919260165397} + - component: {fileID: 3057754879346011607} + m_Layer: 5 + m_Name: Text_Score + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6126595788752528699 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5146007739993727286} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -48, y: -150} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 1, y: 1} +--- !u!222 &8311110919260165397 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5146007739993727286} + m_CullTransparentMesh: 1 +--- !u!114 &3057754879346011607 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5146007739993727286} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Score + +' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 4 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &5399445985609318248 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8120457409706071549} + - component: {fileID: 5194064418745056708} + m_Layer: 5 + m_Name: LeaderboardHomePage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8120457409706071549 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5399445985609318248} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 6889371672260226643} + - {fileID: 3619353679564384029} + - {fileID: 6126595788752528699} + - {fileID: 5159426777868975014} + - {fileID: 369436301902892310} + - {fileID: 7959349763484157163} + - {fileID: 3264589939677277411} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5194064418745056708 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5399445985609318248} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a4db917c52f54cac90f9718ebe41de18, type: 3} + m_Name: + m_EditorClassIdentifier: + scoreContainer: {fileID: 7376412555318546772} + topScoreButton: {fileID: 1785346281963462599} + friendScoreButton: {fileID: 790374211336709625} + nearbyScoreButton: {fileID: 2358341239599292943} +--- !u!1 &7087731412423585350 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6889371672260226643} + - component: {fileID: 6169764162082075578} + - component: {fileID: 897877275394770548} + m_Layer: 5 + m_Name: Text_Rank + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6889371672260226643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7087731412423585350} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 24, y: -150} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0, y: 1} +--- !u!222 &6169764162082075578 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7087731412423585350} + m_CullTransparentMesh: 1 +--- !u!114 &897877275394770548 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7087731412423585350} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Rank + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &7608750171043276206 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3619353679564384029} + - component: {fileID: 440236456097860225} + - component: {fileID: 614948973678148118} + m_Layer: 5 + m_Name: Text_Alias + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3619353679564384029 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7608750171043276206} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 274, y: -150} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0, y: 1} +--- !u!222 &440236456097860225 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7608750171043276206} + m_CullTransparentMesh: 1 +--- !u!114 &614948973678148118 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7608750171043276206} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Player + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &8355378278223839098 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 707978241070947674} + - component: {fileID: 6826030553996245533} + - component: {fileID: 7843022474968749103} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &707978241070947674 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8355378278223839098} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 7959349763484157163} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -24, y: -24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6826030553996245533 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8355378278223839098} + m_CullTransparentMesh: 1 +--- !u!114 &7843022474968749103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8355378278223839098} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Your Scores + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 50 + m_fontSizeBase: 50 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 1 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!1 &8361308221422256249 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7148908955977827108} + - component: {fileID: 1923344159155876597} + - component: {fileID: 6349351734658999815} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7148908955977827108 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8361308221422256249} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3987342493511289489} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1923344159155876597 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8361308221422256249} + m_CullTransparentMesh: 1 +--- !u!114 &6349351734658999815 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8361308221422256249} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8741466401168560727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 369436301902892310} + - component: {fileID: 8119033941885519538} + - component: {fileID: 598536317481838462} + - component: {fileID: 1785346281963462599} + m_Layer: 5 + m_Name: Button_TopScores + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &369436301902892310 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8741466401168560727} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5126636921772431130} + m_Father: {fileID: 8120457409706071549} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 24, y: -24} + m_SizeDelta: {x: 400, y: 100} + m_Pivot: {x: 0, y: 1} +--- !u!222 &8119033941885519538 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8741466401168560727} + m_CullTransparentMesh: 1 +--- !u!114 &598536317481838462 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8741466401168560727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.4433962, g: 0.4433962, b: 0.4433962, a: 0.4627451} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &1785346281963462599 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8741466401168560727} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 1, g: 1, b: 1, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.24056602, g: 0.70287645, b: 1, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 598536317481838462} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &9080991840880791582 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3987342493511289489} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3987342493511289489 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9080991840880791582} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 7148908955977827108} + m_Father: {fileID: 2211254145011248284} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -20, y: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1001 &3945384173197377240 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 7376412555318546772} + m_Modifications: + - target: {fileID: 6301136603704093725, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_Name + value: EntryDisplay + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 8dd4c6b68aaf24ec298293c99403e02d, type: 3} +--- !u!224 &7811646182022051730 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 6532568910138788170, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} + m_PrefabInstance: {fileID: 3945384173197377240} + m_PrefabAsset: {fileID: 0} diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.prefab.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.prefab.meta new file mode 100644 index 0000000000..f8318fbdf8 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Prefabs/HomePage/LeaderboardHomePage.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 897d719ba61c24129b0c2def4145ae8a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Sample_LeaderboardManager.unity b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Sample_LeaderboardManager.unity new file mode 100644 index 0000000000..ba65d07e84 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Sample_LeaderboardManager.unity @@ -0,0 +1,1088 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 0 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &32595362 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 32595363} + - component: {fileID: 32595364} + m_Layer: 5 + m_Name: GameObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &32595363 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32595362} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1412789052} + - {fileID: 4375801385269977617} + m_Father: {fileID: 1098410761} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &32595364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 32595362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 889e0cbbf8d248908560d196362d70f1, type: 3} + m_Name: + m_EditorClassIdentifier: + model: + LeaderboardRef: + Id: leaderboards.xyz + viewState: 0 + useMockData: 0 + root: {fileID: 1412789052} + loadingBlocker: {fileID: 2307906666623612511} + homePageTemplate: {fileID: 5194064418745056708, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + entryDisplayTemplate: {fileID: 6129473465048054174, guid: 8dd4c6b68aaf24ec298293c99403e02d, + type: 3} +--- !u!1001 &438663877 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 1412789052} + m_Modifications: + - target: {fileID: 987829899694343439, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 987829899694343439, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2211254145011248284, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5225330595689451254, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5225330595689451254, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5225330595689451254, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5399445985609318248, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_Name + value: LeaderboardHomePage + objectReference: {fileID: 0} + - target: {fileID: 6427391260577280207, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7148908955977827108, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7148908955977827108, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7148908955977827108, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7376412555318546772, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7376412555318546772, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0.000116479736 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 7811646182022051730, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_Pivot.x + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_Pivot.y + value: 0.5 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.x + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchorMin.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_SizeDelta.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 897d719ba61c24129b0c2def4145ae8a, type: 3} +--- !u!1 &458544362 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 458544365} + - component: {fileID: 458544364} + - component: {fileID: 458544363} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &458544363 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458544362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &458544364 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458544362} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &458544365 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 458544362} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &789323071 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 789323072} + m_Layer: 5 + m_Name: -- content will be injected here --- + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &789323072 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 789323071} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1412789052} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1098410756 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1098410761} + - component: {fileID: 1098410760} + - component: {fileID: 1098410759} + - component: {fileID: 1098410758} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1098410758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098410756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1098410759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098410756} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1920, y: 1080} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 1 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1098410760 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098410756} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1098410761 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1098410756} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 32595363} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1001 &1196742313 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 1879866759196870545, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_Name + value: AdminFlow + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866759196870557, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 1879866760483718077, guid: 28d63d278d26a754eaec42724a1334d7, + type: 3} + propertyPath: m_SizeDelta.y + value: 0 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 28d63d278d26a754eaec42724a1334d7, type: 3} +--- !u!1 &1412789051 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1412789052} + - component: {fileID: 1412789054} + - component: {fileID: 1412789053} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1412789052 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412789051} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 789323072} + - {fileID: 1814459238} + m_Father: {fileID: 32595363} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1412789053 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412789051} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1412789054 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1412789051} + m_CullTransparentMesh: 1 +--- !u!224 &1814459238 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 8120457409706071549, guid: 897d719ba61c24129b0c2def4145ae8a, + type: 3} + m_PrefabInstance: {fileID: 438663877} + m_PrefabAsset: {fileID: 0} +--- !u!1 &2021928063 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2021928066} + - component: {fileID: 2021928065} + - component: {fileID: 2021928064} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2021928064 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2021928063} + m_Enabled: 1 +--- !u!20 &2021928065 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2021928063} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2021928066 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2021928063} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!222 &1200338147386144915 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727660212797090796} + m_CullTransparentMesh: 1 +--- !u!225 &2307906666623612511 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727660212797090796} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!1 &2729115635090392285 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5740556254506216597} + - component: {fileID: 5210553750647963825} + - component: {fileID: 3188080015370568377} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &3188080015370568377 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2729115635090392285} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Loading... + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 256 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!224 &4375801385269977617 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727660212797090796} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5740556254506216597} + m_Father: {fileID: 32595363} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4598648092395446556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4727660212797090796} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4727660212797090796 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4375801385269977617} + - component: {fileID: 1200338147386144915} + - component: {fileID: 4598648092395446556} + - component: {fileID: 2307906666623612511} + m_Layer: 5 + m_Name: LoadingCard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!222 &5210553750647963825 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2729115635090392285} + m_CullTransparentMesh: 1 +--- !u!224 &5740556254506216597 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2729115635090392285} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4375801385269977617} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 200, y: 50} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 2021928066} + - {fileID: 1098410761} + - {fileID: 458544365} + - {fileID: 1196742313} diff --git a/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Sample_LeaderboardManager.unity.meta b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Sample_LeaderboardManager.unity.meta new file mode 100644 index 0000000000..396e9d02f7 --- /dev/null +++ b/client/Packages/com.beamable/Samples/LightBeamSamples/Leaderboards/Sample_LeaderboardManager.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c242eba5c505d4ec9ac0911e04182cca +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: