From bb0c4478cc3c254ab22298a5c14171bd762c9dca Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:08:32 +0100 Subject: [PATCH 1/8] unify responses from GetEntries and GetEntriesForCurrentPlayer --- Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs b/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs index bbf569a..b3caf01 100644 --- a/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs @@ -17,16 +17,15 @@ public async Task GetEntries(string internalName, in return res; } - public async Task GetEntriesForCurrentPlayer(string leaderboardInternalName, int page) + public async Task GetEntriesForCurrentPlayer(string internalName, int page) { Talo.IdentityCheck(); - var uri = new Uri(baseUrl + $"/{leaderboardInternalName}/entries?page={page}&aliasId={Talo.CurrentAlias.id}"); + var uri = new Uri(baseUrl + $"/{internalName}/entries?page={page}&aliasId={Talo.CurrentAlias.id}"); var json = await Call(uri, "GET"); var res = JsonUtility.FromJson(json); - - return res.entries; + return res; } public async Task<(LeaderboardEntry, bool)> AddEntry(string internalName, float score) From 23be7789113c79d893f83ae12d274cb85cc29f5f Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:09:10 +0100 Subject: [PATCH 2/8] update IdentityCheck error message to reference correct api --- Packages/com.trytalo.talo/Runtime/Talo.cs | 106 +++++++++++----------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/Packages/com.trytalo.talo/Runtime/Talo.cs b/Packages/com.trytalo.talo/Runtime/Talo.cs index 9579952..bff9262 100644 --- a/Packages/com.trytalo.talo/Runtime/Talo.cs +++ b/Packages/com.trytalo.talo/Runtime/Talo.cs @@ -1,6 +1,6 @@ using System; -using System.Linq; -using NUnit.Framework; +using System.Linq; +using NUnit.Framework; using UnityEngine; namespace TaloGameServices @@ -38,16 +38,16 @@ public static Player CurrentPlayer private static LiveConfig _liveConfig; - public static LiveConfig LiveConfig - { - get { - if (_liveConfig == null) - { - throw new Exception("Live config needs to be inited first - use Talo.GameConfig.Get() to fetch it"); - } - return _liveConfig; - } - set => _liveConfig = value; + public static LiveConfig LiveConfig + { + get { + if (_liveConfig == null) + { + throw new Exception("Live config needs to be inited first - use Talo.GameConfig.Get() to fetch it"); + } + return _liveConfig; + } + set => _liveConfig = value; } public static EventsAPI Events @@ -75,29 +75,29 @@ public static StatsAPI Stats get => _stats; } - public static GameConfigAPI GameConfig - { - get => _gameConfig; + public static GameConfigAPI GameConfig + { + get => _gameConfig; } static Talo() { TaloManager tm; - if (!CheckTestMode()) - { - var settings = Resources.Load("Talo Settings"); - if (!settings) - { - Debug.LogError("A 'Talo Settings' asset was not found in the Resources folder. Create one using the Create menu > Talo > Settings Asset"); - return; - } - - tm = new GameObject("Talo Manager").AddComponent(); - tm.settings = settings; - } else - { - tm = UnityEngine.Object.FindObjectOfType(); + if (!CheckTestMode()) + { + var settings = Resources.Load("Talo Settings"); + if (!settings) + { + Debug.LogError("A 'Talo Settings' asset was not found in the Resources folder. Create one using the Create menu > Talo > Settings Asset"); + return; + } + + tm = new GameObject("Talo Manager").AddComponent(); + tm.settings = settings; + } else + { + tm = UnityEngine.Object.FindObjectOfType(); } _events = new EventsAPI(tm); @@ -117,35 +117,35 @@ public static void IdentityCheck() { if (!HasIdentity()) { - throw new Exception("You need to identify a player using Talo.Identify() before doing this."); + throw new Exception("You need to identify a player using Talo.Players.Identify() before doing this."); } } - public static bool IsOffline() - { - if (TestMode) return RequestMock.Offline; - return Application.internetReachability == NetworkReachability.NotReachable; + public static bool IsOffline() + { + if (TestMode) return RequestMock.Offline; + return Application.internetReachability == NetworkReachability.NotReachable; } - internal static bool CheckTestMode() - { - var assembly = AppDomain.CurrentDomain.GetAssemblies() - .FirstOrDefault((assembly) => assembly.FullName.ToLowerInvariant().StartsWith("nunit.framework")); - - if (assembly != null) - { - try - { - _testMode = TestContext.CurrentContext.Test.ID != null; - return _testMode; - } - catch - { - return false; - } - } - - return _testMode; + internal static bool CheckTestMode() + { + var assembly = AppDomain.CurrentDomain.GetAssemblies() + .FirstOrDefault((assembly) => assembly.FullName.ToLowerInvariant().StartsWith("nunit.framework")); + + if (assembly != null) + { + try + { + _testMode = TestContext.CurrentContext.Test.ID != null; + return _testMode; + } + catch + { + return false; + } + } + + return _testMode; } } } From b968cdc31ddbb16609df34de7c3e7db3581d5100 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Wed, 12 Jun 2024 08:10:47 +0100 Subject: [PATCH 3/8] split IsInGroup into id and name filter functions --- .../Runtime/Entities/Player.cs | 25 +++++++++++-------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/Packages/com.trytalo.talo/Runtime/Entities/Player.cs b/Packages/com.trytalo.talo/Runtime/Entities/Player.cs index 2737535..cef4f4f 100644 --- a/Packages/com.trytalo.talo/Runtime/Entities/Player.cs +++ b/Packages/com.trytalo.talo/Runtime/Entities/Player.cs @@ -1,8 +1,8 @@ using UnityEngine; using System.Linq; using System; -using System.Threading.Tasks; - +using System.Threading.Tasks; + namespace TaloGameServices { [Serializable] @@ -19,8 +19,8 @@ public override string ToString() public string GetProp(string key, string fallback = null) { - Prop prop = props.First((prop) => prop.key == key); - return prop?.key ?? fallback; + Prop prop = props.FirstOrDefault((prop) => prop.key == key); + return prop?.value ?? fallback; } public async Task SetProp(string key, string value) @@ -45,17 +45,22 @@ public async Task SetProp(string key, string value) public async Task DeleteProp(string key) { - Prop prop = props.First((prop) => prop.key == key); + Prop prop = props.FirstOrDefault((prop) => prop.key == key); if (prop == null) throw new Exception($"Prop with key {key} does not exist"); prop.value = null; await Talo.Players.Update(); - } - - public bool IsInGroup(string groupId) - { - return groups.Any((group) => group.id == groupId); + } + + public bool IsInGroupID(string groupId) + { + return groups.Any((group) => group.id == groupId); + } + + public bool IsInGroupName(string groupName) + { + return groups.Any((group) => group.name == groupName); } } } From 03ee8c99af83022cc66e4c449c77c64d8e58da11 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Wed, 12 Jun 2024 21:41:55 +0100 Subject: [PATCH 4/8] let each api decide versioning --- Packages/com.trytalo.talo/Runtime/EventsAPI.cs | 8 ++++---- Packages/com.trytalo.talo/Runtime/GameConfigAPI.cs | 2 +- Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs | 2 +- Packages/com.trytalo.talo/Runtime/PlayersAPI.cs | 4 ++-- Packages/com.trytalo.talo/Runtime/SavesAPI.cs | 2 +- Packages/com.trytalo.talo/Runtime/StatsAPI.cs | 2 +- Packages/com.trytalo.talo/Runtime/TaloSettings.cs | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/Packages/com.trytalo.talo/Runtime/EventsAPI.cs b/Packages/com.trytalo.talo/Runtime/EventsAPI.cs index 4446043..404f3c3 100644 --- a/Packages/com.trytalo.talo/Runtime/EventsAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/EventsAPI.cs @@ -11,7 +11,7 @@ public class EventsAPI : BaseAPI private List queue = new List(); private readonly int minQueueSize = 10; - public EventsAPI(TaloManager manager) : base(manager, "events") { } + public EventsAPI(TaloManager manager) : base(manager, "/v1/events") { } private string GetWindowMode() { @@ -51,9 +51,9 @@ public async Task Track(string name, params (string, string)[] props) { Talo.IdentityCheck(); - var ev = new Event - { - name = name + var ev = new Event + { + name = name }; if (props != null) diff --git a/Packages/com.trytalo.talo/Runtime/GameConfigAPI.cs b/Packages/com.trytalo.talo/Runtime/GameConfigAPI.cs index 45ff21c..3d4be61 100644 --- a/Packages/com.trytalo.talo/Runtime/GameConfigAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/GameConfigAPI.cs @@ -8,7 +8,7 @@ public class GameConfigAPI : BaseAPI { public event Action OnLiveConfigLoaded; - public GameConfigAPI(TaloManager manager) : base(manager, "game-config") { } + public GameConfigAPI(TaloManager manager) : base(manager, "/v1/game-config") { } public async Task Get() { diff --git a/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs b/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs index bbf569a..9459ffe 100644 --- a/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/LeaderboardsAPI.cs @@ -6,7 +6,7 @@ namespace TaloGameServices { public class LeaderboardsAPI : BaseAPI { - public LeaderboardsAPI(TaloManager manager) : base(manager, "leaderboards") { } + public LeaderboardsAPI(TaloManager manager) : base(manager, "/v1/leaderboards") { } public async Task GetEntries(string internalName, int page) { diff --git a/Packages/com.trytalo.talo/Runtime/PlayersAPI.cs b/Packages/com.trytalo.talo/Runtime/PlayersAPI.cs index aff09c4..375d80c 100644 --- a/Packages/com.trytalo.talo/Runtime/PlayersAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/PlayersAPI.cs @@ -6,9 +6,9 @@ namespace TaloGameServices { public class PlayersAPI : BaseAPI { - public event Action OnIdentified; + public event Action OnIdentified; - public PlayersAPI(TaloManager manager) : base(manager, "players") { } + public PlayersAPI(TaloManager manager) : base(manager, "/v1/players") { } public async Task Identify(string service, string identifier) { diff --git a/Packages/com.trytalo.talo/Runtime/SavesAPI.cs b/Packages/com.trytalo.talo/Runtime/SavesAPI.cs index 100eb7b..cd86010 100644 --- a/Packages/com.trytalo.talo/Runtime/SavesAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/SavesAPI.cs @@ -38,7 +38,7 @@ public GameSave Current get => _currentSave; } - public SavesAPI(TaloManager manager) : base(manager, "game-saves") { + public SavesAPI(TaloManager manager) : base(manager, "/v1/game-saves") { _fileHandler = Talo.TestMode ? new SavesTestFileHandler() : new SavesFileHandler(); diff --git a/Packages/com.trytalo.talo/Runtime/StatsAPI.cs b/Packages/com.trytalo.talo/Runtime/StatsAPI.cs index 13f5d11..e26bcd4 100644 --- a/Packages/com.trytalo.talo/Runtime/StatsAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/StatsAPI.cs @@ -6,7 +6,7 @@ namespace TaloGameServices { public class StatsAPI : BaseAPI { - public StatsAPI(TaloManager manager) : base(manager, "game-stats") { } + public StatsAPI(TaloManager manager) : base(manager, "/v1/game-stats") { } public async Task Track(string internalName, float change = 1f) { diff --git a/Packages/com.trytalo.talo/Runtime/TaloSettings.cs b/Packages/com.trytalo.talo/Runtime/TaloSettings.cs index 063b417..23e4efe 100644 --- a/Packages/com.trytalo.talo/Runtime/TaloSettings.cs +++ b/Packages/com.trytalo.talo/Runtime/TaloSettings.cs @@ -6,7 +6,7 @@ namespace TaloGameServices public class TaloSettings : ScriptableObject { public string accessKey; - public string apiUrl = "https://api.trytalo.com/v1"; + public string apiUrl = "https://api.trytalo.com"; [Tooltip("How often in seconds events are flushed in a WebGL build, see the docs for more info")] public float webGLEventFlushRate = 30f; } From 01e9642ef9202bcf5b49d6a4648bcad2047395ae Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Mon, 10 Jun 2024 20:02:29 +0100 Subject: [PATCH 5/8] add feedback api --- .../Playground/Scenes/Playground.unity | 702 ++++++++++- .../Samples/Playground/Scripts/Feedback.meta | 8 + .../Scripts/Feedback/GetCategories.cs | 27 + .../Scripts/Feedback/GetCategories.cs.meta | 11 + .../Scripts/Feedback/SendFeedback.cs | 13 + .../Scripts/Feedback/SendFeedback.cs.meta | 11 + .../Leaderboards/GetLeaderboardEntries.cs | 3 +- .../SavesDemo/Scripts/GlobalUIController.cs | 3 +- .../Runtime/Entities/FeedbackCategory.cs | 16 + .../Runtime/Entities/FeedbackCategory.cs.meta | 11 + .../com.trytalo.talo/Runtime/FeedbackAPI.cs | 30 + .../Runtime/FeedbackAPI.cs.meta | 11 + .../Runtime/Requests/FeedbackPostRequest.cs | 7 + .../Requests/FeedbackPostRequest.cs.meta | 11 + .../Responses/FeedbackCategoriesResponse.cs | 8 + .../FeedbackCategoriesResponse.cs.meta | 11 + Packages/com.trytalo.talo/Runtime/Talo.cs | 7 + Packages/com.trytalo.talo/package.json | 2 +- README.md | 1 + UserSettings/Layouts/default-2022.dwlt | 1023 +++++++++++++++++ 20 files changed, 1859 insertions(+), 57 deletions(-) create mode 100644 Assets/Samples/Playground/Scripts/Feedback.meta create mode 100644 Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs create mode 100644 Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs.meta create mode 100644 Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs create mode 100644 Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs create mode 100644 Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs create mode 100644 Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs create mode 100644 Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs create mode 100644 Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs.meta create mode 100644 UserSettings/Layouts/default-2022.dwlt diff --git a/Assets/Samples/Playground/Scenes/Playground.unity b/Assets/Samples/Playground/Scenes/Playground.unity index 702919f..66f279c 100644 --- a/Assets/Samples/Playground/Scenes/Playground.unity +++ b/Assets/Samples/Playground/Scenes/Playground.unity @@ -104,7 +104,7 @@ NavMeshSettings: serializedVersion: 2 m_ObjectHideFlags: 0 m_BuildSettings: - serializedVersion: 2 + serializedVersion: 3 agentTypeID: 0 agentRadius: 0.5 agentHeight: 2 @@ -117,7 +117,7 @@ NavMeshSettings: cellSize: 0.16666667 manualTileSize: 0 tileSize: 256 - accuratePlacement: 0 + buildHeightMesh: 0 maxJobWorkers: 0 preserveTilesOutsideBounds: 0 debug: @@ -157,7 +157,6 @@ RectTransform: - {fileID: 41042924} - {fileID: 1810825303} m_Father: {fileID: 2079681527} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -232,7 +231,6 @@ RectTransform: m_Children: - {fileID: 828856311} m_Father: {fileID: 13014977} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -347,6 +345,85 @@ MonoBehaviour: m_EditorClassIdentifier: service: steam identifier: 123456 +--- !u!1 &66918959 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 66918960} + - component: {fileID: 66918962} + - component: {fileID: 66918961} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &66918960 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 66918959} + 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: 348923165} + 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 &66918961 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 66918959} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Get categories +--- !u!222 &66918962 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 66918959} + m_CullTransparentMesh: 1 --- !u!1 &90646234 GameObject: m_ObjectHideFlags: 0 @@ -383,7 +460,6 @@ RectTransform: - {fileID: 324014310} - {fileID: 1454318103} m_Father: {fileID: 2079681527} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -458,7 +534,6 @@ RectTransform: m_Children: - {fileID: 1948787479} m_Father: {fileID: 90646235} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -572,6 +647,152 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: level: 1 +--- !u!1 &348923164 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 348923165} + - component: {fileID: 348923169} + - component: {fileID: 348923168} + - component: {fileID: 348923167} + - component: {fileID: 348923170} + m_Layer: 5 + m_Name: Get categories + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &348923165 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348923164} + 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: 66918960} + m_Father: {fileID: 1112754116} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &348923167 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348923164} + 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: 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: 348923168} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 348923170} + m_TargetAssemblyTypeName: GetCategories, Assembly-CSharp + m_MethodName: OnButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &348923168 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348923164} + 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!222 &348923169 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348923164} + m_CullTransparentMesh: 1 +--- !u!114 &348923170 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 348923164} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d52f03730cdbb41c893cbd5bd60938b6, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1 &376592790 GameObject: m_ObjectHideFlags: 0 @@ -603,7 +824,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 996882623} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -686,7 +906,6 @@ RectTransform: m_Children: - {fileID: 1293150142} m_Father: {fileID: 90646235} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -842,9 +1061,17 @@ Camera: 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_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -878,13 +1105,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 519420028} + 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_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &520760482 GameObject: @@ -917,7 +1144,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1810825303} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -997,7 +1223,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 938574829} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1010,42 +1235,190 @@ MonoBehaviour: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535851143} + m_GameObject: {fileID: 535851143} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Set Entry +--- !u!222 &535851146 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535851143} + m_CullTransparentMesh: 1 +--- !u!1 &573382616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 573382617} + - component: {fileID: 573382621} + - component: {fileID: 573382620} + - component: {fileID: 573382619} + - component: {fileID: 573382622} + m_Layer: 5 + m_Name: Post feedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &573382617 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 573382616} + 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: 1699191577} + m_Father: {fileID: 1112754116} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &573382619 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 573382616} + 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: 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: 573382620} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 573382622} + m_TargetAssemblyTypeName: SendFeedback, Assembly-CSharp + m_MethodName: OnButtonClick + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &573382620 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 573382616} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + 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_FontData: - m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 4 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: Set Entry ---- !u!222 &535851146 + 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!222 &573382621 CanvasRenderer: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 535851143} + m_GameObject: {fileID: 573382616} m_CullTransparentMesh: 1 +--- !u!114 &573382622 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 573382616} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cbbc384cbbed54c5692cefacafbe8376, type: 3} + m_Name: + m_EditorClassIdentifier: + internalName: bugs + feedbackComment: There is a bug in the game somewhere, go find it --- !u!1 &828856310 GameObject: m_ObjectHideFlags: 0 @@ -1077,7 +1450,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 41042924} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1162,7 +1534,6 @@ RectTransform: m_Children: - {fileID: 535851144} m_Father: {fileID: 996882623} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1310,7 +1681,6 @@ RectTransform: - {fileID: 1717956220} - {fileID: 938574829} m_Father: {fileID: 2079681527} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1382,7 +1752,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1717956220} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1431,6 +1800,80 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1101604971} m_CullTransparentMesh: 1 +--- !u!1 &1112754115 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1112754116} + - component: {fileID: 1112754118} + - component: {fileID: 1112754117} + m_Layer: 5 + m_Name: Feedback + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1112754116 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112754115} + 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: 1615964282} + - {fileID: 348923165} + - {fileID: 573382617} + m_Father: {fileID: 2079681527} + 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!114 &1112754117 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112754115} + 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: 20 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 1 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!222 &1112754118 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1112754115} + m_CullTransparentMesh: 1 --- !u!1 &1128940377 GameObject: m_ObjectHideFlags: 0 @@ -1462,7 +1905,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1454318103} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1542,7 +1984,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1757104834} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 0} @@ -1625,7 +2066,6 @@ RectTransform: m_Children: - {fileID: 1430909798} m_Father: {fileID: 90646235} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -1774,7 +2214,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 496913034} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -1859,7 +2298,6 @@ RectTransform: m_Children: - {fileID: 1634146557} m_Father: {fileID: 1550727585} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2005,7 +2443,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 90646235} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2087,7 +2524,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1204048670} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2172,7 +2608,6 @@ RectTransform: m_Children: - {fileID: 1128940378} m_Father: {fileID: 90646235} - m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2318,7 +2753,6 @@ RectTransform: - {fileID: 1899797262} - {fileID: 1324085945} m_Father: {fileID: 2079681527} - m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2359,6 +2793,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1550727584} m_CullTransparentMesh: 1 +--- !u!1 &1615964281 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1615964282} + - component: {fileID: 1615964284} + - component: {fileID: 1615964283} + m_Layer: 5 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1615964282 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615964281} + 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: 1112754116} + 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: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1615964283 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615964281} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 59 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Feedback +--- !u!222 &1615964284 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1615964281} + m_CullTransparentMesh: 1 --- !u!1 &1634146556 GameObject: m_ObjectHideFlags: 0 @@ -2390,7 +2903,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1324085945} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2439,6 +2951,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1634146556} m_CullTransparentMesh: 1 +--- !u!1 &1699191576 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1699191577} + - component: {fileID: 1699191579} + - component: {fileID: 1699191578} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1699191577 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699191576} + 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: 573382617} + 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 &1699191578 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699191576} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, 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_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Post feedback +--- !u!222 &1699191579 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1699191576} + m_CullTransparentMesh: 1 --- !u!1 &1717956219 GameObject: m_ObjectHideFlags: 0 @@ -2473,7 +3064,6 @@ RectTransform: m_Children: - {fileID: 1101604972} m_Father: {fileID: 996882623} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2664,7 +3254,9 @@ Canvas: m_OverrideSorting: 0 m_OverridePixelPerfect: 0 m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 m_SortingLayerID: 0 m_SortingOrder: 0 m_TargetDisplay: 0 @@ -2683,7 +3275,6 @@ RectTransform: - {fileID: 2079681527} - {fileID: 1140750081} m_Father: {fileID: 0} - m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2724,7 +3315,6 @@ RectTransform: m_Children: - {fileID: 520760483} m_Father: {fileID: 13014977} - m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2869,7 +3459,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 1550727585} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -2949,7 +3538,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 324014310} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3031,7 +3619,6 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 13014977} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} @@ -3140,13 +3727,13 @@ Transform: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2002157104} + 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_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &2079681526 GameObject: @@ -3183,8 +3770,8 @@ RectTransform: - {fileID: 90646235} - {fileID: 996882623} - {fileID: 1550727585} + - {fileID: 1112754116} m_Father: {fileID: 1757104834} - m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -3249,7 +3836,14 @@ MonoBehaviour: m_ChildAlignment: 4 m_StartCorner: 0 m_StartAxis: 0 - m_CellSize: {x: 300, y: 300} + m_CellSize: {x: 300, y: 240} m_Spacing: {x: 40, y: 40} m_Constraint: 0 m_ConstraintCount: 2 +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 519420032} + - {fileID: 1757104834} + - {fileID: 2002157107} diff --git a/Assets/Samples/Playground/Scripts/Feedback.meta b/Assets/Samples/Playground/Scripts/Feedback.meta new file mode 100644 index 0000000..99c5849 --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Feedback.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3f76d12cadd24a038e884448dc932c7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs b/Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs new file mode 100644 index 0000000..ff0aec3 --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs @@ -0,0 +1,27 @@ +using UnityEngine; +using TaloGameServices; +using System.Threading.Tasks; +using System.Linq; + +public class GetCategories : MonoBehaviour +{ + public async void OnButtonClick() + { + await FetchCategories(); + } + + private async Task FetchCategories() + { + var categories = await Talo.Feedback.GetCategories(); + + if (categories.Length == 0) + { + ResponseMessage.SetText("No categories found. Create some in the Talo dashboard!"); + } + else + { + var mapped = categories.Select((c) => $"{c.name} ({c.internalName})"); + ResponseMessage.SetText($"Categories: " + string.Join(',', mapped)); + } + } +} diff --git a/Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs.meta b/Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs.meta new file mode 100644 index 0000000..d90cbe3 --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Feedback/GetCategories.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d52f03730cdbb41c893cbd5bd60938b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs b/Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs new file mode 100644 index 0000000..0a44de6 --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs @@ -0,0 +1,13 @@ +using UnityEngine; +using TaloGameServices; + +public class SendFeedback : MonoBehaviour +{ + public string internalName, feedbackComment; + + public async void OnButtonClick() + { + await Talo.Feedback.Send(internalName, feedbackComment); + ResponseMessage.SetText($"Feedback sent for {internalName}: {feedbackComment}"); + } +} diff --git a/Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs.meta b/Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs.meta new file mode 100644 index 0000000..091f6c8 --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Feedback/SendFeedback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbbc384cbbed54c5692cefacafbe8376 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Samples/Playground/Scripts/Leaderboards/GetLeaderboardEntries.cs b/Assets/Samples/Playground/Scripts/Leaderboards/GetLeaderboardEntries.cs index 572b9be..36be493 100644 --- a/Assets/Samples/Playground/Scripts/Leaderboards/GetLeaderboardEntries.cs +++ b/Assets/Samples/Playground/Scripts/Leaderboards/GetLeaderboardEntries.cs @@ -25,7 +25,8 @@ private async Task FetchEntries() if (entries.Length == 0) { ResponseMessage.SetText($"No entries for page {page}"); - } else + } + else { ResponseMessage.SetText(string.Join(", ", entries.Select((e) => e.ToString()).ToArray())); } diff --git a/Assets/Samples/SavesDemo/Scripts/GlobalUIController.cs b/Assets/Samples/SavesDemo/Scripts/GlobalUIController.cs index 452909e..7b4f748 100644 --- a/Assets/Samples/SavesDemo/Scripts/GlobalUIController.cs +++ b/Assets/Samples/SavesDemo/Scripts/GlobalUIController.cs @@ -39,7 +39,8 @@ private void OnSaveChosen(GameSave save) SetDocumentVisibility(savesListUI, DisplayStyle.None); SetDocumentVisibility(menuUI, DisplayStyle.None); SetDocumentVisibility(gameUI, DisplayStyle.Flex); - } else + } + else { SetDocumentVisibility(gameUI, DisplayStyle.None); SetDocumentVisibility(menuUI, DisplayStyle.Flex); diff --git a/Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs b/Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs new file mode 100644 index 0000000..0a742b1 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs @@ -0,0 +1,16 @@ +using System; + +namespace TaloGameServices +{ + [Serializable] + public class FeedbackCategory + { + public int id; + public string internalName; + public string name; + public string description; + public bool anonymised; + public string createdAt; + public string updatedAt; + } +} diff --git a/Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs.meta b/Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs.meta new file mode 100644 index 0000000..3f70e00 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Entities/FeedbackCategory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 549b6d82d23014130ad27456090dcc6a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs b/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs new file mode 100644 index 0000000..922ae9f --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs @@ -0,0 +1,30 @@ +using System; +using System.Threading.Tasks; +using UnityEngine; + +namespace TaloGameServices +{ + public class FeedbackAPI : BaseAPI + { + public FeedbackAPI(TaloManager manager) : base(manager, "game-feedback") { } + + public async Task GetCategories() + { + var uri = new Uri(baseUrl + "/categories"); + + var json = await Call(uri, "GET"); + var res = JsonUtility.FromJson(json); + return res.feedbackCategories; + } + + public async Task Send(string internalName, string comment) + { + Talo.IdentityCheck(); + + var uri = new Uri(baseUrl + $"/categories/{internalName}"); + var content = JsonUtility.ToJson(new FeedbackPostRequest() { comment = comment }); + + await Call(uri, "POST", content); + } + } +} diff --git a/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs.meta b/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs.meta new file mode 100644 index 0000000..e6bf059 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14dd82b7773f94fe7aa6095a35ae133f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs b/Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs new file mode 100644 index 0000000..881acf0 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs @@ -0,0 +1,7 @@ +namespace TaloGameServices +{ + public class FeedbackPostRequest + { + public string comment; + } +} diff --git a/Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs.meta b/Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs.meta new file mode 100644 index 0000000..612c979 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Requests/FeedbackPostRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9de624c4db7fc43009248ba86ab595c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs b/Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs new file mode 100644 index 0000000..b422be8 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs @@ -0,0 +1,8 @@ +namespace TaloGameServices +{ + [System.Serializable] + public class FeedbackCategoriesResponse + { + public FeedbackCategory[] feedbackCategories; + } +} diff --git a/Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs.meta b/Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs.meta new file mode 100644 index 0000000..8b6aa45 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Responses/FeedbackCategoriesResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a155f12b96c934e73b0ec76cb65844fc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/Talo.cs b/Packages/com.trytalo.talo/Runtime/Talo.cs index bff9262..0d35be3 100644 --- a/Packages/com.trytalo.talo/Runtime/Talo.cs +++ b/Packages/com.trytalo.talo/Runtime/Talo.cs @@ -17,6 +17,7 @@ public class Talo internal static SavesAPI _saves; internal static StatsAPI _stats; internal static GameConfigAPI _gameConfig; + internal static FeedbackAPI _feedback; private static PlayerAlias _currentAlias; @@ -80,6 +81,11 @@ public static GameConfigAPI GameConfig get => _gameConfig; } + public static FeedbackAPI Feedback + { + get => _feedback; + } + static Talo() { TaloManager tm; @@ -106,6 +112,7 @@ static Talo() _saves = new SavesAPI(tm); _stats = new StatsAPI(tm); _gameConfig = new GameConfigAPI(tm); + _feedback = new FeedbackAPI(tm); } public static bool HasIdentity() diff --git a/Packages/com.trytalo.talo/package.json b/Packages/com.trytalo.talo/package.json index 30dad19..3a802a1 100644 --- a/Packages/com.trytalo.talo/package.json +++ b/Packages/com.trytalo.talo/package.json @@ -2,7 +2,7 @@ "name": "com.trytalo.talo", "version": "0.17.0", "displayName": "Talo Game Services", - "description": "Talo (https://trytalo.com) is an open-source game backend with services designed to help you build games faster. You can currently:\n\n- Identify players\n- Store persistent data across players\n- Track events (levelling up, finding loot, etc)\n- Display high scores with leaderboards\n- Store and load player saves\n- Load game config options and flags from the cloud", + "description": "Talo (https://trytalo.com) is an open-source game backend with services designed to help you build games faster. You can currently:\n\n- Identify players\n- Store persistent data across players\n- Track events (levelling up, finding loot, etc)\n- Display high scores with leaderboards\n- Store and load player saves\n- Load game config options and flags from the cloud\n- Get feedback directly from your players", "unity": "2022.3", "keywords": [], "author": { diff --git a/README.md b/README.md index 09bf66b..5377a57 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ Build games faster and make better decisions with the [Talo](https://trytalo.com - 📊 [Game stats](https://trytalo.com/stats) (global and per-player) - ⚙️ [Live config](https://trytalo.com/live-config) (update your game config from the web, no releases required) - 🔧 [Steamworks integration](https://trytalo.com/steamworks-integration) +- 💬 [Game feedback](https://trytalo.com/feedback) ## Docs diff --git a/UserSettings/Layouts/default-2022.dwlt b/UserSettings/Layouts/default-2022.dwlt new file mode 100644 index 0000000..d92cfa3 --- /dev/null +++ b/UserSettings/Layouts/default-2022.dwlt @@ -0,0 +1,1023 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PixelRect: + serializedVersion: 2 + x: 0 + y: 72 + width: 1800 + height: 1097 + m_ShowMode: 4 + m_Title: Hierarchy + m_RootView: {fileID: 6} + m_MinSize: {x: 875, y: 300} + m_MaxSize: {x: 10000, y: 10000} + m_Maximized: 1 +--- !u!114 &2 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 9} + - {fileID: 3} + m_Position: + serializedVersion: 2 + x: 0 + y: 30 + width: 1800 + height: 1047 + m_MinSize: {x: 300, y: 100} + m_MaxSize: {x: 24288, y: 16192} + vertical: 0 + controlID: 15 +--- !u!114 &3 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 1375 + y: 0 + width: 425 + height: 1047 + m_MinSize: {x: 276, y: 71} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 13} + m_Panes: + - {fileID: 13} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &4 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 338.5 + height: 621.5 + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 14} + m_Panes: + - {fileID: 14} + m_Selected: 0 + m_LastSelected: 0 +--- !u!114 &5 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: ProjectBrowser + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 621.5 + width: 1375 + height: 425.5 + m_MinSize: {x: 231, y: 271} + m_MaxSize: {x: 10001, y: 10021} + m_ActualView: {fileID: 12} + m_Panes: + - {fileID: 12} + - {fileID: 17} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &6 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 7} + - {fileID: 2} + - {fileID: 8} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1800 + height: 1097 + m_MinSize: {x: 875, y: 300} + m_MaxSize: {x: 10000, y: 10000} + m_UseTopView: 1 + m_TopViewHeight: 30 + m_UseBottomView: 1 + m_BottomViewHeight: 20 +--- !u!114 &7 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1800 + height: 30 + m_MinSize: {x: 0, y: 0} + m_MaxSize: {x: 0, y: 0} + m_LastLoadedLayoutName: +--- !u!114 &8 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 1077 + width: 1800 + height: 20 + m_MinSize: {x: 0, y: 0} + m_MaxSize: {x: 0, y: 0} +--- !u!114 &9 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 10} + - {fileID: 5} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1375 + height: 1047 + m_MinSize: {x: 200, y: 100} + m_MaxSize: {x: 16192, y: 16192} + vertical: 1 + controlID: 16 +--- !u!114 &10 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 4} + - {fileID: 11} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 1375 + height: 621.5 + m_MinSize: {x: 200, y: 50} + m_MaxSize: {x: 16192, y: 8096} + vertical: 0 + controlID: 17 +--- !u!114 &11 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: SceneView + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 338.5 + y: 0 + width: 1036.5 + height: 621.5 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 15} + m_Panes: + - {fileID: 15} + - {fileID: 16} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &12 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 230, y: 250} + m_MaxSize: {x: 10000, y: 10000} + m_TitleContent: + m_Text: Project + m_Image: {fileID: -5179483145760003458, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 723.5 + width: 1374 + height: 404.5 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_SearchFilter: + m_NameFilter: + m_ClassNames: [] + m_AssetLabels: [] + m_AssetBundleNames: [] + m_ReferencingInstanceIDs: + m_SceneHandles: + m_ShowAllHits: 0 + m_SkipHidden: 0 + m_SearchArea: 1 + m_Folders: + - Assets/Samples/Playground/Scripts/Feedback + m_Globs: [] + m_OriginalText: + m_ImportLogFlags: 0 + m_FilterByTypeIntersection: 0 + m_ViewMode: 1 + m_StartGridSize: 64 + m_LastFolders: + - Assets/Samples/Playground/Scripts/Feedback + m_LastFoldersGridSize: -1 + m_LastProjectPath: /Users/tudor/Documents/unity + m_LockTracker: + m_IsLocked: 0 + m_FolderTreeState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: 76470000 + m_LastClickedID: 18294 + m_ExpandedIDs: 00000000584700005a4700005c4700005e47000060470000624700006447000066470000684700006a47000000ca9a3bffffff7f + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_AssetTreeState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: 00000000584700005a4700005c4700005e47000060470000624700006447000066470000684700006a470000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_ListAreaState: + m_SelectedInstanceIDs: + m_LastClickedInstanceID: 0 + m_HadKeyboardFocusLastEvent: 1 + m_ExpandedInstanceIDs: c6230000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_NewAssetIndexInList: -1 + m_ScrollPosition: {x: 0, y: 0} + m_GridSize: 64 + m_SkipHiddenPackages: 0 + m_DirectoriesAreaWidth: 207 +--- !u!114 &13 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 275, y: 50} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Inspector + m_Image: {fileID: -440750813802333266, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1375 + y: 102 + width: 424 + height: 1026 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_ObjectsLockedBeforeSerialization: [] + m_InstanceIDsLockedBeforeSerialization: + m_PreviewResizer: + m_CachedPref: 160 + m_ControlHash: -371814159 + m_PrefName: Preview_InspectorPreview + m_LastInspectedObjectInstanceID: -1 + m_LastVerticalScrollValue: 0 + m_GlobalObjectId: + m_InspectorMode: 0 + m_LockTracker: + m_IsLocked: 0 + m_PreviewWindow: {fileID: 0} +--- !u!114 &14 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Hierarchy + m_Image: {fileID: -3734745235275155857, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 102 + width: 337.5 + height: 600.5 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_SceneHierarchy: + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: 32fbffff + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 4} + m_SearchString: + m_ExpandedScenes: [] + m_CurrenRootInstanceID: 0 + m_LockTracker: + m_IsLocked: 0 + m_CurrentSortingName: TransformSorting + m_WindowGUID: 4c969a2b90040154d917609493e03593 +--- !u!114 &15 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Scene + m_Image: {fileID: 8634526014445323508, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 338.5 + y: 102 + width: 1034.5 + height: 600.5 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: + - dockPosition: 0 + containerId: overlay-toolbar__top + floating: 0 + collapsed: 0 + displayed: 1 + snapOffset: {x: -101, y: -26} + snapOffsetDelta: {x: -62, y: 0} + snapCorner: 3 + id: Tool Settings + index: 0 + layout: 1 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 0 + containerId: overlay-toolbar__top + floating: 0 + collapsed: 0 + displayed: 1 + snapOffset: {x: -141, y: -224} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 3 + id: unity-grid-and-snap-toolbar + index: 1 + layout: 1 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-toolbar__top + floating: 0 + collapsed: 0 + displayed: 1 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: unity-scene-view-toolbar + index: 0 + layout: 1 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-toolbar__top + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 1 + id: unity-search-toolbar + index: 1 + layout: 1 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 0 + containerId: overlay-container--left + floating: 0 + collapsed: 0 + displayed: 1 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: unity-transform-toolbar + index: 0 + layout: 2 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 0 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 1 + snapOffset: {x: 67.5, y: 86} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Orientation + index: 0 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Light Settings + index: 0 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Camera + index: 1 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Cloth Constraints + index: 1 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Cloth Collisions + index: 2 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Navmesh Display + index: 4 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Agent Display + index: 5 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Obstacle Display + index: 6 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Occlusion Culling + index: 3 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Physics Debugger + index: 4 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Scene Visibility + index: 5 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 0, y: 0} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/Particles + index: 6 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + - dockPosition: 1 + containerId: overlay-container--right + floating: 0 + collapsed: 0 + displayed: 0 + snapOffset: {x: 48, y: 48} + snapOffsetDelta: {x: 0, y: 0} + snapCorner: 0 + id: Scene View/TrailRenderer + index: 7 + layout: 4 + size: {x: 0, y: 0} + sizeOverriden: 0 + m_OverlaysVisible: 1 + m_WindowGUID: cc27987af1a868c49b0894db9c0f5429 + m_Gizmos: 1 + m_OverrideSceneCullingMask: 6917529027641081856 + m_SceneIsLit: 1 + m_SceneLighting: 1 + m_2DMode: 1 + m_isRotationLocked: 0 + m_PlayAudio: 0 + m_AudioPlay: 0 + m_Position: + m_Target: {x: 528.58374, y: 274.99408, z: -2.6181228} + speed: 2 + m_Value: {x: 528.58374, y: 274.99408, z: -2.6181228} + m_RenderMode: 0 + m_CameraMode: + drawMode: 0 + name: Shaded + section: Shading Mode + m_ValidateTrueMetals: 0 + m_DoValidateTrueMetals: 0 + m_SceneViewState: + m_AlwaysRefresh: 0 + showFog: 1 + showSkybox: 1 + showFlares: 1 + showImageEffects: 1 + showParticleSystems: 1 + showVisualEffectGraphs: 1 + m_FxEnabled: 1 + m_Grid: + xGrid: + m_Fade: + m_Target: 0 + speed: 2 + m_Value: 0 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 0, y: 0} + yGrid: + m_Fade: + m_Target: 0 + speed: 2 + m_Value: 0 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + zGrid: + m_Fade: + m_Target: 1 + speed: 2 + m_Value: 1 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + m_ShowGrid: 1 + m_GridAxis: 1 + m_gridOpacity: 0.5 + m_Rotation: + m_Target: {x: 0, y: 0, z: 0, w: 1} + speed: 2 + m_Value: {x: 0, y: 0, z: 0, w: 1} + m_Size: + m_Target: 383.6483 + speed: 2 + m_Value: 383.6483 + m_Ortho: + m_Target: 1 + speed: 2 + m_Value: 1 + m_CameraSettings: + m_Speed: 1 + m_SpeedNormalized: 0.5 + m_SpeedMin: 0.001 + m_SpeedMax: 2 + m_EasingEnabled: 1 + m_EasingDuration: 0.4 + m_AccelerationEnabled: 1 + m_FieldOfViewHorizontalOrVertical: 60 + m_NearClip: 0.03 + m_FarClip: 10000 + m_DynamicClip: 1 + m_OcclusionCulling: 0 + m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226} + m_LastSceneViewOrtho: 0 + m_ReplacementShader: {fileID: 0} + m_ReplacementString: + m_SceneVisActive: 1 + m_LastLockedObject: {fileID: 0} + m_ViewIsLockedToObject: 0 +--- !u!114 &16 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Game + m_Image: {fileID: 4621777727084837110, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 338.5 + y: 102 + width: 1034.5 + height: 600.5 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 + m_SerializedViewNames: [] + m_SerializedViewValues: [] + m_PlayModeViewName: GameView + m_ShowGizmos: 0 + m_TargetDisplay: 0 + m_ClearColor: {r: 0, g: 0, b: 0, a: 0} + m_TargetSize: {x: 1034.5, y: 579.5} + m_TextureFilterMode: 0 + m_TextureHideFlags: 61 + m_RenderIMGUI: 1 + m_EnterPlayModeBehavior: 0 + m_UseMipMap: 0 + m_VSyncEnabled: 0 + m_Gizmos: 0 + m_Stats: 0 + m_SelectedSizes: 00000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_ZoomArea: + m_HRangeLocked: 0 + m_VRangeLocked: 0 + hZoomLockedByDefault: 0 + vZoomLockedByDefault: 0 + m_HBaseRangeMin: -258.625 + m_HBaseRangeMax: 258.625 + m_VBaseRangeMin: -144.875 + m_VBaseRangeMax: 144.875 + m_HAllowExceedBaseRangeMin: 1 + m_HAllowExceedBaseRangeMax: 1 + m_VAllowExceedBaseRangeMin: 1 + m_VAllowExceedBaseRangeMax: 1 + m_ScaleWithWindow: 0 + m_HSlider: 0 + m_VSlider: 0 + m_IgnoreScrollWheelUntilClicked: 0 + m_EnableMouseInput: 0 + m_EnableSliderZoomHorizontal: 0 + m_EnableSliderZoomVertical: 0 + m_UniformScale: 1 + m_UpDirection: 1 + m_DrawArea: + serializedVersion: 2 + x: 0 + y: 21 + width: 1034.5 + height: 579.5 + m_Scale: {x: 2, y: 2} + m_Translation: {x: 517.25, y: 289.75} + m_MarginLeft: 0 + m_MarginRight: 0 + m_MarginTop: 0 + m_MarginBottom: 0 + m_LastShownAreaInsideMargins: + serializedVersion: 2 + x: -258.625 + y: -144.875 + width: 517.25 + height: 289.75 + m_MinimalGUI: 1 + m_defaultScale: 2 + m_LastWindowPixelSize: {x: 2069, y: 1201} + m_ClearInEditMode: 1 + m_NoCameraWarning: 1 + m_LowResolutionForAspectRatios: 01000000000000000000 + m_XRRenderMode: 0 + m_RenderTexture: {fileID: 0} +--- !u!114 &17 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Console + m_Image: {fileID: -4950941429401207979, guid: 0000000000000000d000000000000000, type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 0 + y: 723.5 + width: 1374 + height: 404.5 + m_SerializedDataModeController: + m_DataMode: 0 + m_PreferredDataMode: 0 + m_SupportedDataModes: + isAutomatic: 1 + m_ViewDataDictionary: {fileID: 0} + m_OverlayCanvas: + m_LastAppliedPresetName: Default + m_SaveData: [] + m_OverlaysVisible: 1 From 46adeef7da6eb5dd249524e8b0e6fbe317c30c28 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Wed, 12 Jun 2024 21:50:34 +0100 Subject: [PATCH 6/8] versioning --- Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs b/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs index 922ae9f..ca1471f 100644 --- a/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/FeedbackAPI.cs @@ -6,7 +6,7 @@ namespace TaloGameServices { public class FeedbackAPI : BaseAPI { - public FeedbackAPI(TaloManager manager) : base(manager, "game-feedback") { } + public FeedbackAPI(TaloManager manager) : base(manager, "/v1/game-feedback") { } public async Task GetCategories() { From b11c28da02eca1170a84a501b9800cd46b91ed97 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Wed, 12 Jun 2024 22:02:30 +0100 Subject: [PATCH 7/8] fix else usage conventions --- .../com.trytalo.talo/Runtime/Entities/SaveContent.cs | 3 ++- Packages/com.trytalo.talo/Runtime/SavesAPI.cs | 12 ++++++++---- Packages/com.trytalo.talo/Runtime/Talo.cs | 3 ++- .../com.trytalo.talo/Runtime/Utils/RequestMock.cs | 5 +++-- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Packages/com.trytalo.talo/Runtime/Entities/SaveContent.cs b/Packages/com.trytalo.talo/Runtime/Entities/SaveContent.cs index 6382542..233d59d 100644 --- a/Packages/com.trytalo.talo/Runtime/Entities/SaveContent.cs +++ b/Packages/com.trytalo.talo/Runtime/Entities/SaveContent.cs @@ -34,7 +34,8 @@ public SavedObject(LoadableData loadableData) value = field.Value.ToString(), type = field.Value.GetType().ToString() }).ToArray(); - } else + } + else { data = new SavedObjectData[] { diff --git a/Packages/com.trytalo.talo/Runtime/SavesAPI.cs b/Packages/com.trytalo.talo/Runtime/SavesAPI.cs index cd86010..6c45dd7 100644 --- a/Packages/com.trytalo.talo/Runtime/SavesAPI.cs +++ b/Packages/com.trytalo.talo/Runtime/SavesAPI.cs @@ -98,7 +98,8 @@ public async Task GetSaves() if (Talo.IsOffline()) { if (offlineSaves != null) saves.AddRange(offlineSaves); - } else + } + else { Talo.IdentityCheck(); @@ -184,7 +185,8 @@ private void UpdateOfflineSaves(GameSave incomingSave) offlineContent.saves = offlineContent.saves.Concat(new GameSave[] { incomingSave }).ToArray(); } - } else + } + else { // first entry into the saves file incomingSave.id = -1; @@ -208,7 +210,8 @@ public async Task CreateSave(string saveName, string content = null) content = saveContent, updatedAt = DateTime.UtcNow.ToString("O") }; - } else + } + else { Talo.IdentityCheck(); @@ -254,7 +257,8 @@ public async Task UpdateSave(int saveId, string newName = "") if (!string.IsNullOrEmpty(newName)) save.name = newName; save.content = saveContent; save.updatedAt = DateTime.UtcNow.ToString("O"); - } else + } + else { Talo.IdentityCheck(); diff --git a/Packages/com.trytalo.talo/Runtime/Talo.cs b/Packages/com.trytalo.talo/Runtime/Talo.cs index 0d35be3..e9cb41d 100644 --- a/Packages/com.trytalo.talo/Runtime/Talo.cs +++ b/Packages/com.trytalo.talo/Runtime/Talo.cs @@ -101,7 +101,8 @@ static Talo() tm = new GameObject("Talo Manager").AddComponent(); tm.settings = settings; - } else + } + else { tm = UnityEngine.Object.FindObjectOfType(); } diff --git a/Packages/com.trytalo.talo/Runtime/Utils/RequestMock.cs b/Packages/com.trytalo.talo/Runtime/Utils/RequestMock.cs index a6c6984..ab9deb3 100644 --- a/Packages/com.trytalo.talo/Runtime/Utils/RequestMock.cs +++ b/Packages/com.trytalo.talo/Runtime/Utils/RequestMock.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; @@ -68,7 +68,8 @@ public static string HandleCall(Uri uri, string method) { _oneTimeHandlers.Remove(handler.GetValueOrDefault()); return handler.GetValueOrDefault().response; - } else + } + else { throw new Exception($"Request handler not set for {method} {uri}"); } From e158ee7640368e5d98b2bd0dcc05575e47f836f7 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Thu, 13 Jun 2024 12:44:47 +0100 Subject: [PATCH 8/8] 0.18.0 --- Packages/com.trytalo.talo/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/com.trytalo.talo/package.json b/Packages/com.trytalo.talo/package.json index 3a802a1..915ff0b 100644 --- a/Packages/com.trytalo.talo/package.json +++ b/Packages/com.trytalo.talo/package.json @@ -1,6 +1,6 @@ { "name": "com.trytalo.talo", - "version": "0.17.0", + "version": "0.18.0", "displayName": "Talo Game Services", "description": "Talo (https://trytalo.com) is an open-source game backend with services designed to help you build games faster. You can currently:\n\n- Identify players\n- Store persistent data across players\n- Track events (levelling up, finding loot, etc)\n- Display high scores with leaderboards\n- Store and load player saves\n- Load game config options and flags from the cloud\n- Get feedback directly from your players", "unity": "2022.3",