From 838b19addb2e031dc46d1e5cb60deaa657389359 Mon Sep 17 00:00:00 2001 From: tudor <7089284+tudddorrr@users.noreply.github.com> Date: Sun, 20 Oct 2024 09:25:43 +0100 Subject: [PATCH] player groups api --- .../Playground/Scenes/Playground.unity | 235 +++++++++++++++++- .../Playground/Scripts/Players/GetGroup.cs | 28 +++ .../Scripts/Players/GetGroup.cs.meta | 11 + .../Runtime/APIs/PlayerGroupsAPI.cs | 20 ++ .../Runtime/APIs/PlayerGroupsAPI.cs.meta | 11 + .../Runtime/Entities/Group.cs | 11 +- .../Runtime/Entities/Group.cs.meta | 2 +- .../Runtime/Entities/GroupStub.cs | 8 + .../Runtime/Entities/GroupStub.cs.meta | 11 + .../Runtime/Entities/Player.cs | 2 +- .../Responses/PlayerGroupsGetResponse.cs | 8 + .../Responses/PlayerGroupsGetResponse.cs.meta | 11 + Packages/com.trytalo.talo/Runtime/Talo.cs | 7 + 13 files changed, 357 insertions(+), 8 deletions(-) create mode 100644 Assets/Samples/Playground/Scripts/Players/GetGroup.cs create mode 100644 Assets/Samples/Playground/Scripts/Players/GetGroup.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs create mode 100644 Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs create mode 100644 Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs.meta create mode 100644 Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs create mode 100644 Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs.meta diff --git a/Assets/Samples/Playground/Scenes/Playground.unity b/Assets/Samples/Playground/Scenes/Playground.unity index 8e53d55..b7d7a37 100644 --- a/Assets/Samples/Playground/Scenes/Playground.unity +++ b/Assets/Samples/Playground/Scenes/Playground.unity @@ -157,6 +157,7 @@ RectTransform: - {fileID: 41042924} - {fileID: 1810825303} - {fileID: 1484174634} + - {fileID: 414252746} m_Father: {fileID: 2079681527} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -647,6 +648,85 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: eeab45c0be5c343c68f0df33c440919c, type: 3} m_Name: m_EditorClassIdentifier: +--- !u!1 &131549789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 131549790} + - component: {fileID: 131549792} + - component: {fileID: 131549791} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &131549790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 131549789} + 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: 414252746} + 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 &131549791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 131549789} + 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 group +--- !u!222 &131549792 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 131549789} + m_CullTransparentMesh: 1 --- !u!1 &324014309 GameObject: m_ObjectHideFlags: 0 @@ -1019,6 +1099,153 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 376592790} m_CullTransparentMesh: 1 +--- !u!1 &414252745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 414252746} + - component: {fileID: 414252750} + - component: {fileID: 414252749} + - component: {fileID: 414252748} + - component: {fileID: 414252751} + m_Layer: 5 + m_Name: Get group + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &414252746 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 414252745} + 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: 131549790} + m_Father: {fileID: 13014977} + 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 &414252748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 414252745} + 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: 414252749} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 414252751} + m_TargetAssemblyTypeName: GetGroup, 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 &414252749 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 414252745} + 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 &414252750 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 414252745} + m_CullTransparentMesh: 1 +--- !u!114 &414252751 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 414252745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3ac5ee86ce1ba48ca84820db7452e975, type: 3} + m_Name: + m_EditorClassIdentifier: + groupId: --- !u!1 &496913033 GameObject: m_ObjectHideFlags: 0 @@ -1476,7 +1703,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Set Health + m_Text: Set health --- !u!222 &520760485 CanvasRenderer: m_ObjectHideFlags: 0 @@ -3101,7 +3328,7 @@ GameObject: - component: {fileID: 1484174636} - component: {fileID: 1484174635} m_Layer: 5 - m_Name: Delete Prop + m_Name: Delete prop m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -3841,7 +4068,7 @@ MonoBehaviour: m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: Delete Health + m_Text: Delete health --- !u!222 &1720564335 CanvasRenderer: m_ObjectHideFlags: 0 @@ -3967,7 +4194,7 @@ GameObject: - component: {fileID: 1810825305} - component: {fileID: 1810825304} m_Layer: 5 - m_Name: Set Prop + m_Name: Set prop m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 diff --git a/Assets/Samples/Playground/Scripts/Players/GetGroup.cs b/Assets/Samples/Playground/Scripts/Players/GetGroup.cs new file mode 100644 index 0000000..c0acacf --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Players/GetGroup.cs @@ -0,0 +1,28 @@ +using System; +using TaloGameServices; +using UnityEngine; + +public class GetGroup : MonoBehaviour +{ + public string groupId; + + public async void OnButtonClick() + { + if (string.IsNullOrEmpty(groupId)) + { + ResponseMessage.SetText("groupId not set on 'Get group' button"); + } + else + { + try + { + var group = await Talo.PlayerGroups.Get(groupId); + ResponseMessage.SetText($"{group.name} has {group.count} player(s)"); + } + catch (Exception e) + { + ResponseMessage.SetText(e.Message); + } + } + } +} diff --git a/Assets/Samples/Playground/Scripts/Players/GetGroup.cs.meta b/Assets/Samples/Playground/Scripts/Players/GetGroup.cs.meta new file mode 100644 index 0000000..b046355 --- /dev/null +++ b/Assets/Samples/Playground/Scripts/Players/GetGroup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ac5ee86ce1ba48ca84820db7452e975 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs b/Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs new file mode 100644 index 0000000..a7ae099 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs @@ -0,0 +1,20 @@ +using System; +using System.Threading.Tasks; +using UnityEngine; + +namespace TaloGameServices +{ + public class PlayerGroupsAPI : BaseAPI + { + public PlayerGroupsAPI() : base("v1/player-groups") { } + + public async Task Get(string groupId) + { + var uri = new Uri($"{baseUrl}/{groupId}"); + var json = await Call(uri, "GET"); + + var res = JsonUtility.FromJson(json); + return res.group; + } + } +} diff --git a/Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs.meta b/Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs.meta new file mode 100644 index 0000000..822672e --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/APIs/PlayerGroupsAPI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c064731cebf0245119a22aecb48bd8d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/Entities/Group.cs b/Packages/com.trytalo.talo/Runtime/Entities/Group.cs index 23fcfb1..c69212c 100644 --- a/Packages/com.trytalo.talo/Runtime/Entities/Group.cs +++ b/Packages/com.trytalo.talo/Runtime/Entities/Group.cs @@ -3,7 +3,14 @@ [System.Serializable] public class Group { - public string id, name; + public string id; + public string name; + public string description; + public object[] rules; + public string ruleMode; + public bool membersVisible; + public int count; + public Player[] members; + public string updatedAt; } - } diff --git a/Packages/com.trytalo.talo/Runtime/Entities/Group.cs.meta b/Packages/com.trytalo.talo/Runtime/Entities/Group.cs.meta index 37d59a4..e27ca1c 100644 --- a/Packages/com.trytalo.talo/Runtime/Entities/Group.cs.meta +++ b/Packages/com.trytalo.talo/Runtime/Entities/Group.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7953e59f777b44f7c8da7ce0fc9e52dd +guid: 61551ce2d477449e8abede7651239921 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs b/Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs new file mode 100644 index 0000000..dab375a --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs @@ -0,0 +1,8 @@ +namespace TaloGameServices +{ + [System.Serializable] + public class GroupStub + { + public string id, name; + } +} diff --git a/Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs.meta b/Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs.meta new file mode 100644 index 0000000..37d59a4 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Entities/GroupStub.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7953e59f777b44f7c8da7ce0fc9e52dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.trytalo.talo/Runtime/Entities/Player.cs b/Packages/com.trytalo.talo/Runtime/Entities/Player.cs index 21d16ca..4bb66c8 100644 --- a/Packages/com.trytalo.talo/Runtime/Entities/Player.cs +++ b/Packages/com.trytalo.talo/Runtime/Entities/Player.cs @@ -9,7 +9,7 @@ namespace TaloGameServices public class Player: EntityWithProps { public string id; - public Group[] groups; + public GroupStub[] groups; public override string ToString() { diff --git a/Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs b/Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs new file mode 100644 index 0000000..22ec3ef --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs @@ -0,0 +1,8 @@ +namespace TaloGameServices +{ + [System.Serializable] + public class PlayerGroupsGetResponse + { + public Group group; + } +} diff --git a/Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs.meta b/Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs.meta new file mode 100644 index 0000000..84bc743 --- /dev/null +++ b/Packages/com.trytalo.talo/Runtime/Responses/PlayerGroupsGetResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6e400d1848ed426c8507badd1e773ba +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 67f022b..2da7c15 100644 --- a/Packages/com.trytalo.talo/Runtime/Talo.cs +++ b/Packages/com.trytalo.talo/Runtime/Talo.cs @@ -20,6 +20,7 @@ public class Talo internal static FeedbackAPI _feedback; internal static PlayerAuthAPI _playerAuth; internal static HealthCheckAPI _healthCheck; + internal static PlayerGroupsAPI _playerGroups; private static PlayerAlias _currentAlias; @@ -106,6 +107,11 @@ public static HealthCheckAPI HealthCheck get => _healthCheck; } + public static PlayerGroupsAPI PlayerGroups + { + get => _playerGroups; + } + static Talo() { TaloManager tm; @@ -139,6 +145,7 @@ static Talo() _feedback = new FeedbackAPI(); _playerAuth = new PlayerAuthAPI(); _healthCheck = new HealthCheckAPI(); + _playerGroups = new PlayerGroupsAPI(); tm.OnReady(); }