diff --git a/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs b/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs index 1e0f9af..c0e028f 100644 --- a/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs +++ b/Assets/Talo Game Services/Talo/Runtime/APIs/StatsAPI.cs @@ -18,7 +18,13 @@ public async Task GetStats() return res.stats; } + [Obsolete("Use Find(string internalName) instead.")] public async Task GetStat(string internalName) + { + return await Find(internalName); + } + + public async Task Find(string internalName) { var uri = new Uri($"{baseUrl}/{internalName}"); var json = await Call(uri, "GET"); @@ -27,6 +33,17 @@ public async Task GetStat(string internalName) return res.stat; } + public async Task FindPlayerStat(string internalName) + { + Talo.IdentityCheck(); + + var uri = new Uri($"{baseUrl}/{internalName}/player-stat"); + + var json = await Call(uri, "GET"); + var res = JsonUtility.FromJson(json); + return res.playerStat; + } + public async Task Track(string internalName, float change = 1f) { Talo.IdentityCheck(); diff --git a/Assets/Talo Game Services/Talo/Runtime/Responses/PlayerStatResponse.cs b/Assets/Talo Game Services/Talo/Runtime/Responses/PlayerStatResponse.cs new file mode 100644 index 0000000..e3a27ee --- /dev/null +++ b/Assets/Talo Game Services/Talo/Runtime/Responses/PlayerStatResponse.cs @@ -0,0 +1,8 @@ +namespace TaloGameServices +{ + [System.Serializable] + public class PlayerStatResponse + { + public PlayerStat playerStat; + } +} diff --git a/Assets/Talo Game Services/Talo/Runtime/Responses/PlayerStatResponse.cs.meta b/Assets/Talo Game Services/Talo/Runtime/Responses/PlayerStatResponse.cs.meta new file mode 100644 index 0000000..05fea16 --- /dev/null +++ b/Assets/Talo Game Services/Talo/Runtime/Responses/PlayerStatResponse.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2d871cd581d814c8d9c9815d16ad5ae8 \ No newline at end of file diff --git a/Assets/Talo Game Services/Talo/Samples/Playground/Scenes/Playground.unity b/Assets/Talo Game Services/Talo/Samples/Playground/Scenes/Playground.unity index a8ad0f5..f71073a 100644 --- a/Assets/Talo Game Services/Talo/Samples/Playground/Scenes/Playground.unity +++ b/Assets/Talo Game Services/Talo/Samples/Playground/Scenes/Playground.unity @@ -1936,6 +1936,85 @@ MonoBehaviour: m_EditorClassIdentifier: categoryInternalName: feedbackComment: There is a bug in the game somewhere, go find it +--- !u!1 &685705074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 685705075} + - component: {fileID: 685705077} + - component: {fileID: 685705076} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &685705075 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685705074} + 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: 1116317869} + 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 &685705076 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685705074} + 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 player stat +--- !u!222 &685705077 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 685705074} + m_CullTransparentMesh: 1 --- !u!1 &828856310 GameObject: m_ObjectHideFlags: 0 @@ -2756,6 +2835,154 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1112754115} m_CullTransparentMesh: 1 +--- !u!1 &1116317868 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1116317869} + - component: {fileID: 1116317873} + - component: {fileID: 1116317872} + - component: {fileID: 1116317871} + - component: {fileID: 1116317870} + m_Layer: 5 + m_Name: GetPlayerStatButton + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1116317869 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116317868} + 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: 685705075} + m_Father: {fileID: 1550727585} + 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 &1116317870 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116317868} + 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: 1116317871} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 1116317873} + m_TargetAssemblyTypeName: TaloGameServices.Sample.Playground.GetPlayerStat, + 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 &1116317871 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116317868} + 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 &1116317872 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116317868} + m_CullTransparentMesh: 1 +--- !u!114 &1116317873 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116317868} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a2aa4391f1eb7460b9c72cdb1e905ec6, type: 3} + m_Name: + m_EditorClassIdentifier: + statInternalName: --- !u!1 &1128940377 GameObject: m_ObjectHideFlags: 0 @@ -4002,6 +4229,7 @@ RectTransform: - {fileID: 1899797262} - {fileID: 1909633279} - {fileID: 1381655565} + - {fileID: 1116317869} - {fileID: 1324085945} - {fileID: 1085447291} - {fileID: 182147968} @@ -5472,8 +5700,8 @@ MonoBehaviour: m_ChildAlignment: 4 m_StartCorner: 0 m_StartAxis: 0 - m_CellSize: {x: 300, y: 240} - m_Spacing: {x: 40, y: 20} + m_CellSize: {x: 200, y: 240} + m_Spacing: {x: 40, y: 40} m_Constraint: 0 m_ConstraintCount: 2 --- !u!1 &2106635468 diff --git a/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetPlayerStat.cs b/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetPlayerStat.cs new file mode 100644 index 0000000..50c7f94 --- /dev/null +++ b/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetPlayerStat.cs @@ -0,0 +1,35 @@ +using System; +using UnityEngine; + +namespace TaloGameServices.Sample.Playground +{ + public class GetPlayerStat : MonoBehaviour + { + public string statInternalName; + + public void OnButtonClick() + { + FetchPlayerStat(); + } + + private async void FetchPlayerStat() + { + if (string.IsNullOrEmpty(statInternalName)) + { + ResponseMessage.SetText("statInternalName not set on GetPlayerStatButton"); + return; + } + + try + { + var res = await Talo.Stats.FindPlayerStat(statInternalName); + ResponseMessage.SetText($"{statInternalName} value: {(res == null ? "not set" : res.value)}, last updated: {res?.updatedAt ?? "never"}"); + } + catch (Exception err) + { + ResponseMessage.SetText(err.Message); + throw err; + } + } + } +} diff --git a/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetPlayerStat.cs.meta b/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetPlayerStat.cs.meta new file mode 100644 index 0000000..f8de36c --- /dev/null +++ b/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetPlayerStat.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a2aa4391f1eb7460b9c72cdb1e905ec6 \ No newline at end of file diff --git a/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetStat.cs b/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetStat.cs index 93f1083..c10f8b5 100644 --- a/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetStat.cs +++ b/Assets/Talo Game Services/Talo/Samples/Playground/Scripts/Stats/GetStat.cs @@ -22,7 +22,7 @@ private async void FetchStat() try { - var res = await Talo.Stats.GetStat(statInternalName); + var res = await Talo.Stats.Find(statInternalName); ResponseMessage.SetText($"{res.name} is{(res.global ? "" : " not")} a global stat, with a default value of {res.defaultValue}"); } catch (Exception err)