From 0fd35d8c21cbf9d03e9b3962b5ea33ad381b2645 Mon Sep 17 00:00:00 2001 From: YiHan0621 <2857295085@qq.com> Date: Mon, 15 Sep 2025 18:00:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=8F=E9=AA=8C=E6=95=B0=E6=8D=AE=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=EF=BC=8C=E6=9B=B4=E5=90=8D=E9=80=BB=E8=BE=91=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/TcgEngine/Scenes/Menu/Menu.unity | 375 +++++++++++++++++- Assets/TcgEngine/Scripts/Api/ApiClient.cs | 33 +- Assets/TcgEngine/Scripts/Api/ApiMsg.cs | 7 + Assets/TcgEngine/Scripts/Api/UserData.cs | 7 - Assets/TcgEngine/Scripts/Data/GameplayData.cs | 8 + .../TcgEngine/Scripts/Menu/LadderRankLine.cs | 2 + .../Scripts/Menu/LeaderboardPanel.cs | 18 +- Assets/TcgEngine/Scripts/Menu/LoginMenu.cs | 2 +- Assets/TcgEngine/Scripts/Menu/MainMenu.cs | 4 +- Assets/TcgEngine/Scripts/Menu/PlayerPanel.cs | 38 +- 10 files changed, 463 insertions(+), 31 deletions(-) diff --git a/Assets/TcgEngine/Scenes/Menu/Menu.unity b/Assets/TcgEngine/Scenes/Menu/Menu.unity index 503070a..8812809 100644 --- a/Assets/TcgEngine/Scenes/Menu/Menu.unity +++ b/Assets/TcgEngine/Scenes/Menu/Menu.unity @@ -5399,6 +5399,86 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 302193136} m_CullTransparentMesh: 0 +--- !u!1 &309934203 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 309934204} + - component: {fileID: 309934206} + - component: {fileID: 309934205} + m_Layer: 5 + m_Name: error + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &309934204 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 309934203} + 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: 1963065756} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0} + m_AnchorMax: {x: 0.5, y: 0} + m_AnchoredPosition: {x: 0, y: -24.359985} + m_SizeDelta: {x: 1028, y: 48.73} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &309934205 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 309934203} + 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: 1, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &309934206 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 309934203} + m_CullTransparentMesh: 1 --- !u!1 &319165401 GameObject: m_ObjectHideFlags: 0 @@ -12280,6 +12360,7 @@ GameObject: - component: {fileID: 754385745} - component: {fileID: 754385747} - component: {fileID: 754385746} + - component: {fileID: 754385748} m_Layer: 5 m_Name: rename m_TagString: Untagged @@ -12345,6 +12426,50 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 754385744} m_CullTransparentMesh: 1 +--- !u!114 &754385748 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 754385744} + 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: 754385746} + m_OnClick: + m_PersistentCalls: + m_Calls: [] --- !u!1 &759723065 GameObject: m_ObjectHideFlags: 0 @@ -23295,6 +23420,153 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1322184455} m_CullTransparentMesh: 0 +--- !u!1 &1322252205 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1322252206} + - component: {fileID: 1322252209} + - component: {fileID: 1322252208} + - component: {fileID: 1322252207} + m_Layer: 5 + m_Name: NameInput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1322252206 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322252205} + 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: 3342894377011880112} + - {fileID: 1712366766} + m_Father: {fileID: 2049775963} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -53.967987, y: 2.2975006} + m_SizeDelta: {x: -107.92999, y: -4.595001} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1322252207 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322252205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, 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: 1322252208} + m_TextComponent: {fileID: 1712366767} + m_Placeholder: {fileID: 3342894377011880079} + m_ContentType: 5 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 6 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 4 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1322252208 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322252205} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 0} + 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: 10911, 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 &1322252209 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1322252205} + m_CullTransparentMesh: 1 --- !u!1 &1334454748 GameObject: m_ObjectHideFlags: 0 @@ -29628,6 +29900,86 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1710124899} m_CullTransparentMesh: 0 +--- !u!1 &1712366765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1712366766} + - component: {fileID: 1712366768} + - component: {fileID: 1712366767} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1712366766 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712366765} + 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: 1322252206} + m_RootOrder: 1 + 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 &1712366767 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712366765} + 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.5019608, g: 0.47058827, b: 0.57254905, 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: 12800000, guid: c56d3a307af0c8d48ae7d1adb958c922, type: 3} + m_FontSize: 32 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 150 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1712366768 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1712366765} + m_CullTransparentMesh: 1 --- !u!1 &1714191682 GameObject: m_ObjectHideFlags: 0 @@ -30310,8 +30662,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0.5} m_AnchorMax: {x: 0, y: 0.5} - m_AnchoredPosition: {x: 366.90002, y: 3.2} - m_SizeDelta: {x: 427.37, y: 69.13} + m_AnchoredPosition: {x: 424.73, y: 3.2} + m_SizeDelta: {x: 542.72, y: 69.13} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1741421170 GameObject: @@ -33059,7 +33411,7 @@ GameObject: - component: {fileID: 1943317256} - component: {fileID: 1943317257} m_Layer: 5 - m_Name: Slider + m_Name: LevelSlider m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -33264,6 +33616,7 @@ RectTransform: - {fileID: 1689588726} - {fileID: 3342894376018028529} - {fileID: 3342894376182944059} + - {fileID: 309934204} m_Father: {fileID: 3342894375174218281} m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} @@ -34728,7 +35081,7 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: - - {fileID: 3342894377011880112} + - {fileID: 1322252206} - {fileID: 754385745} m_Father: {fileID: 1963065756} m_RootOrder: 0 @@ -36908,7 +37261,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -33.87, y: 0.16999817} + m_AnchoredPosition: {x: -33.869995, y: 0.16999817} m_SizeDelta: {x: -89.01, y: -7.13} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &396921782135916949 @@ -39144,7 +39497,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -33.87, y: 0.16999817} + m_AnchoredPosition: {x: -33.869995, y: 0.16999817} m_SizeDelta: {x: -89.01, y: -7.13} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &396921782672306444 @@ -45745,7 +46098,7 @@ CanvasGroup: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3342894375174218282} m_Enabled: 1 - m_Alpha: 0 + m_Alpha: 1 m_Interactable: 1 m_BlocksRaycasts: 1 m_IgnoreParentGroups: 0 @@ -45763,7 +46116,10 @@ MonoBehaviour: m_EditorClassIdentifier: display_speed: 4 player_name: {fileID: 3342894377011880079} + renameInput: {fileID: 1322252207} + renameButton: {fileID: 754385748} player_level: {fileID: 3342894375830354836} + player_level_slider: {fileID: 1943317257} avatar: {fileID: 3342894375463160157} cardback: {fileID: 3342894375690132112} elo: {fileID: 3342894375823832436} @@ -45772,6 +46128,7 @@ MonoBehaviour: victories: {fileID: 3342894375208539317} defeats: {fileID: 3342894376861038188} userId: {fileID: 1740133842} + player_error: {fileID: 309934205} buttons_area: {fileID: 1969396737} account_button: {fileID: 994162386} sell_button: {fileID: 1231300870} @@ -58005,12 +58362,12 @@ RectTransform: m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] - m_Father: {fileID: 2049775963} + m_Father: {fileID: 1322252206} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: -53.968, y: 2.2975} + m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 468.07, y: 75.405} m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &3342894377011880113 diff --git a/Assets/TcgEngine/Scripts/Api/ApiClient.cs b/Assets/TcgEngine/Scripts/Api/ApiClient.cs index 1d95711..e021662 100644 --- a/Assets/TcgEngine/Scripts/Api/ApiClient.cs +++ b/Assets/TcgEngine/Scripts/Api/ApiClient.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using UnityEngine; using System.Threading.Tasks; +using TcgEngine.UI; using UnityEngine.Networking; using UnityEngine.Events; @@ -243,7 +244,11 @@ namespace TcgEngine udata = ApiTool.JsonToObject(res.data); // Debug.Log($"获取玩家数据:{res.data}"); } - + else + { + Debug.LogError("失败!!!!!!!!!!!!"); + } + Debug.Log($"{udata.id}"); return udata; } @@ -375,6 +380,32 @@ namespace TcgEngine return response; } + public async Task UpdateUsername(string newUsername) + { + if(!IsConnected()) + return false; + + string url = ServerURL + "/users/username/edit"; + EditUsernameRequest req = new EditUsernameRequest(); + req.username = newUsername; + string json = ApiTool.ToJson(req); + + WebResponse res = await SendPostRequest(url, json); + if (res.success) + { + Debug.Log($"更名前:{username}"); + username = newUsername; + MainMenu.Get().RefreshUserData(); + PlayerPrefs.SetString("tcg_last_user", newUsername); + Debug.Log($"更名后:{username}"); + } + else + { + Debug.LogError("改名失败" + res.error); + } + return res.success; + } + private string GetError(WebResponse res) { if (res.success) diff --git a/Assets/TcgEngine/Scripts/Api/ApiMsg.cs b/Assets/TcgEngine/Scripts/Api/ApiMsg.cs index ee45522..7751473 100644 --- a/Assets/TcgEngine/Scripts/Api/ApiMsg.cs +++ b/Assets/TcgEngine/Scripts/Api/ApiMsg.cs @@ -52,6 +52,13 @@ namespace TcgEngine public string password_new; } + [Serializable] + public struct EditUsernameRequest + { + public string username; + } + + [Serializable] public struct FriendAddRequest { diff --git a/Assets/TcgEngine/Scripts/Api/UserData.cs b/Assets/TcgEngine/Scripts/Api/UserData.cs index 1871890..fa3e9a4 100644 --- a/Assets/TcgEngine/Scripts/Api/UserData.cs +++ b/Assets/TcgEngine/Scripts/Api/UserData.cs @@ -61,14 +61,7 @@ namespace TcgEngine return Mathf.FloorToInt(xp / 1000) + 1; } - public float GetLevelProgress() - { - int currentLeve = GetLevel(); - int baseXp = (currentLeve - 1) * 1000; - int xpIntoCurrentLevel = xp - baseXp; - return (float)xpIntoCurrentLevel / 1000f; - } public string GetAvatar() { diff --git a/Assets/TcgEngine/Scripts/Data/GameplayData.cs b/Assets/TcgEngine/Scripts/Data/GameplayData.cs index c619d35..2d31853 100644 --- a/Assets/TcgEngine/Scripts/Data/GameplayData.cs +++ b/Assets/TcgEngine/Scripts/Data/GameplayData.cs @@ -53,6 +53,14 @@ namespace TcgEngine { return Mathf.FloorToInt(xp / 1000f) + 1; } + + public float GetLevelProgress(int xp) + { + int currentLeve = GetPlayerLevel(xp); + int baseXp = (currentLeve - 1) * 1000; + int xpIntoCurrentLevel = xp - baseXp; + return (float)xpIntoCurrentLevel / 1000f; + } public string GetRandomArena() { diff --git a/Assets/TcgEngine/Scripts/Menu/LadderRankLine.cs b/Assets/TcgEngine/Scripts/Menu/LadderRankLine.cs index b72a2b1..9dedebe 100644 --- a/Assets/TcgEngine/Scripts/Menu/LadderRankLine.cs +++ b/Assets/TcgEngine/Scripts/Menu/LadderRankLine.cs @@ -31,6 +31,7 @@ namespace TcgEngine.UI public UnityAction onClick; public string username; + public string id; public PlayerRank pd; @@ -45,6 +46,7 @@ namespace TcgEngine.UI int rankId, int rankScore, int stars, bool highlight) { this.username = udata.username; + id = udata.playerId; RankMedalShow(ranking); this.playerName.text = username; this.rankScore.text = rankScore.ToString(); diff --git a/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs b/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs index ef60edb..51f7d03 100644 --- a/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs +++ b/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs @@ -47,6 +47,8 @@ namespace TcgEngine.UI private bool isHideObject = false; public List Usersid = new List(); + + UserData udata = ApiClient.Get().UserData; protected override void Awake() { base.Awake(); @@ -55,6 +57,7 @@ namespace TcgEngine.UI my_line.onClick += OnClickLine; my_ladderLine.onClick += OnClickRankLine; + InitLines(); } @@ -123,7 +126,7 @@ namespace TcgEngine.UI return lrline; } - private async void RefreshPanel() + public async void RefreshPanel() { my_line.Hide(); foreach (RankLine line in lines) @@ -134,8 +137,6 @@ namespace TcgEngine.UI if (!Authenticator.Get().IsApi()) return; - UserData udata = ApiClient.Get().UserData; - int index = 0; string url = ApiClient.ServerURL + "/users"; WebResponse res = await ApiClient.Get().SendGetRequest(url); @@ -152,7 +153,7 @@ namespace TcgEngine.UI if (user.permission_level != 1 || user.matches == 0) continue; //Dont show admins and user with no matches - if (user.username == udata.username) + if (user.id == udata.id) { my_line.SetLine(user, index + 1, true); } @@ -168,11 +169,9 @@ namespace TcgEngine.UI index++; } - - } - private async void RefreshLadderPanel() + public async void RefreshLadderPanel() { my_ladderLine.Hide(); foreach (LadderRankLine line in ladderLines) @@ -183,8 +182,6 @@ namespace TcgEngine.UI if (!Authenticator.Get().IsApi()) return; - UserData udata = ApiClient.Get().UserData; - int index = 0; string url = ApiClient.ServerURL + "/ladder/leaderboard"; WebResponse res = await ApiClient.Get().SendGetRequest(url); @@ -210,7 +207,7 @@ namespace TcgEngine.UI foreach (LadderLeaderboardEntry rankData in sorted_users) { - if (rankData.username == udata.username) + if (rankData.playerId == udata.id) { my_ladderLine.SetLine(rankData, index + 1, GetAvatar(udata.avatar), rankData.rankId, rankData.rankScore, rankData.stars, true); @@ -287,6 +284,7 @@ namespace TcgEngine.UI public override void Show(bool instant = false) { base.Show(instant); + udata = ApiClient.Get().UserData; RefreshPanel(); RefreshLadderPanel(); ladderRank.Show(); diff --git a/Assets/TcgEngine/Scripts/Menu/LoginMenu.cs b/Assets/TcgEngine/Scripts/Menu/LoginMenu.cs index 41a2f2a..dd6587d 100644 --- a/Assets/TcgEngine/Scripts/Menu/LoginMenu.cs +++ b/Assets/TcgEngine/Scripts/Menu/LoginMenu.cs @@ -191,7 +191,7 @@ namespace TcgEngine.UI error_msg.text = ""; test_area.SetActive(Authenticator.Get().IsTest()); - string user = PlayerPrefs.GetString("tcg_last_user", ""); + string user = PlayerPrefs.GetString("tcg_last_user"); login_user.text = user; if (Authenticator.Get().IsTest()) diff --git a/Assets/TcgEngine/Scripts/Menu/MainMenu.cs b/Assets/TcgEngine/Scripts/Menu/MainMenu.cs index bc61123..e563292 100644 --- a/Assets/TcgEngine/Scripts/Menu/MainMenu.cs +++ b/Assets/TcgEngine/Scripts/Menu/MainMenu.cs @@ -119,8 +119,8 @@ namespace TcgEngine.UI credits_txt.text = GameUI.FormatNumber(user.coins); // xp - level_text.text = user.GetLevel().ToString(); - level_slider.value = user.GetLevelProgress(); + level_text.text = GameplayData.Get().GetPlayerLevel(user.xp).ToString(); + level_slider.value = GameplayData.Get().GetLevelProgress(user.xp); AvatarData avatar = AvatarData.Get(user.avatar); this.avatar.SetAvatar(avatar); diff --git a/Assets/TcgEngine/Scripts/Menu/PlayerPanel.cs b/Assets/TcgEngine/Scripts/Menu/PlayerPanel.cs index bf17426..c6b0501 100644 --- a/Assets/TcgEngine/Scripts/Menu/PlayerPanel.cs +++ b/Assets/TcgEngine/Scripts/Menu/PlayerPanel.cs @@ -15,7 +15,10 @@ namespace TcgEngine.UI { [Header("Player")] public Text player_name; + public InputField renameInput; + public Button renameButton; public Text player_level; + public Slider player_level_slider; public AvatarUI avatar; public CardbackUI cardback; public Text elo; @@ -24,6 +27,7 @@ namespace TcgEngine.UI public Text victories; public Text defeats; public Text userId; + public Text player_error; [Header("Bottom bar")] public GameObject buttons_area; @@ -70,12 +74,13 @@ namespace TcgEngine.UI protected override void Update() { base.Update(); - } + protected override void Start() { base.Start(); + renameButton.onClick.AddListener(OnPlayerRename); } private async void LoadData() @@ -95,6 +100,7 @@ namespace TcgEngine.UI winrate.text = ""; player_level.text = ""; userId.text = ""; + player_error.text = ""; avatar.Hide(); cardback.Hide(); } @@ -109,6 +115,7 @@ namespace TcgEngine.UI UserData user = user_data; player_name.text = user.username; player_level.text = GameplayData.Get().GetPlayerLevel(user.xp).ToString(); + player_level_slider.value = GameplayData.Get().GetLevelProgress(user.xp); userId.text = user.id; AvatarData avatar = AvatarData.Get(user.avatar); @@ -379,6 +386,35 @@ namespace TcgEngine.UI username = user; LoadData(); } + + private async void OnPlayerRename() + { + if (string.IsNullOrEmpty(renameInput.text)) + { + player_error.text = "请输入更改的用户名!"; + } + + else if (renameInput.text == player_name.text) + { + player_error.text = "新用户名不能和旧用户名一样!"; + } + else + { + bool success = await ApiClient.Get().UpdateUsername(renameInput.text); + if (success) + { + player_name.text = renameInput.text; + renameInput.text = ""; + player_error.text = "修改成功!"; + LeaderboardPanel.Get()?.RefreshPanel(); + LeaderboardPanel.Get()?.RefreshLadderPanel(); + } + else + { + player_error.text = ApiClient.Get().GetLastError(); + } + } + } public override void Show(bool instant = false) {