diff --git a/Assets/TcgEngine/Prefabs/UI/Task/RewardItem.prefab b/Assets/TcgEngine/Prefabs/UI/Task/RewardItem.prefab new file mode 100644 index 0000000..9483940 --- /dev/null +++ b/Assets/TcgEngine/Prefabs/UI/Task/RewardItem.prefab @@ -0,0 +1,178 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3773603359716521685 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5844164435676398261} + - component: {fileID: 6774589803606362231} + - component: {fileID: 4748133634100025909} + - component: {fileID: 8170459783435472423} + m_Layer: 5 + m_Name: RewardItem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5844164435676398261 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3773603359716521685} + 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: 2013309795088359583} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 56, y: 56} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6774589803606362231 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3773603359716521685} + m_CullTransparentMesh: 1 +--- !u!114 &4748133634100025909 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3773603359716521685} + 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: 21300000, guid: bf707d878df66f9439ba474fb8d9ef55, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &8170459783435472423 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3773603359716521685} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 55af7dcd22f203d43b3ff26368c1ef5b, type: 3} + m_Name: + m_EditorClassIdentifier: + database: {fileID: 11400000, guid: d87b140f0a18c5b42b9cfa74e5448e95, type: 2} + rewardType: 0 + prizeAmount: 0 + rewardIcon: {fileID: 4748133634100025909} + amountText: {fileID: 4199357195424995409} + fixedHeight: 56 +--- !u!1 &6776010374572791816 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2013309795088359583} + - component: {fileID: 6943656237734908692} + - component: {fileID: 4199357195424995409} + 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 &2013309795088359583 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6776010374572791816} + 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: 5844164435676398261} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -28, y: 15} + m_SizeDelta: {x: 56, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &6943656237734908692 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6776010374572791816} + m_CullTransparentMesh: 1 +--- !u!114 &4199357195424995409 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6776010374572791816} + 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: 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: 16 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 40 + m_Alignment: 8 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 100 diff --git a/Assets/TcgEngine/Prefabs/UI/Task/RewardItem.prefab.meta b/Assets/TcgEngine/Prefabs/UI/Task/RewardItem.prefab.meta new file mode 100644 index 0000000..32f12e7 --- /dev/null +++ b/Assets/TcgEngine/Prefabs/UI/Task/RewardItem.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 29d0d9614b5b8f542aff9d019ec8ce8d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TcgEngine/Prefabs/UI/Task/TaskItem.prefab b/Assets/TcgEngine/Prefabs/UI/Task/TaskItem.prefab index 4b16b6a..7dc21c3 100644 --- a/Assets/TcgEngine/Prefabs/UI/Task/TaskItem.prefab +++ b/Assets/TcgEngine/Prefabs/UI/Task/TaskItem.prefab @@ -17,7 +17,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &284419844733056354 RectTransform: m_ObjectHideFlags: 0 @@ -158,8 +158,8 @@ RectTransform: 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: 23.84, y: 46.900017} - m_SizeDelta: {x: 153.18, y: 35.6} + m_AnchoredPosition: {x: 23.84, y: 39.894127} + m_SizeDelta: {x: 153.18, y: 49.6118} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5317638606691184681 CanvasRenderer: @@ -191,18 +191,18 @@ MonoBehaviour: m_Calls: [] m_FontData: m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 22 + m_FontSize: 20 m_FontStyle: 0 m_BestFit: 0 m_MinSize: 2 m_MaxSize: 40 - m_Alignment: 3 + m_Alignment: 0 m_AlignByGeometry: 0 m_RichText: 1 m_HorizontalOverflow: 0 m_VerticalOverflow: 0 m_LineSpacing: 1 - m_Text: "\u6D88\u706D\u6240\u6709\u654C\u4EBA" + m_Text: "\u53EC\u552410\u4E2A\u738B\u56FD\u519B\u6216\u81EA\u7531\u4EBA\u82F1\u96C4" --- !u!1 &5317638606723811022 GameObject: m_ObjectHideFlags: 0 @@ -240,7 +240,7 @@ RectTransform: 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: 13.24, y: 16.9} + m_AnchoredPosition: {x: 13.24, y: 6.3} m_SizeDelta: {x: 127.33, y: 12.6} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &5317638606723811020 @@ -468,7 +468,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!224 &5317638607177714484 RectTransform: m_ObjectHideFlags: 0 @@ -950,8 +950,9 @@ MonoBehaviour: progressBar_slider: {fileID: 5317638606723811020} progressBar_text: {fileID: 5317638606810153107} reward_button: {fileID: 4730874702436785540} - reward_icon: {fileID: 5317638608707530455} taskEnd_img: {fileID: 6541735992704929191} + rewardItem: {fileID: 3773603359716521685, guid: 29d0d9614b5b8f542aff9d019ec8ce8d, + type: 3} --- !u!225 &5368359024977481613 CanvasGroup: m_ObjectHideFlags: 0 @@ -976,6 +977,7 @@ GameObject: - component: {fileID: 5317638608707530452} - component: {fileID: 5317638608707530455} - component: {fileID: 4730874702436785540} + - component: {fileID: 1766748350975125263} m_Layer: 5 m_Name: Reward m_TagString: Untagged @@ -1000,8 +1002,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 1} m_AnchorMax: {x: 0.5, y: 1} - m_AnchoredPosition: {x: 3.1375, y: -112.3} - m_SizeDelta: {x: 69.7, y: 69.7} + m_AnchoredPosition: {x: 3.1375, y: -118} + m_SizeDelta: {x: 162.8714, y: 69.7} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5317638608707530452 CanvasRenderer: @@ -1024,7 +1026,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0} m_RaycastTarget: 1 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 @@ -1085,6 +1087,32 @@ MonoBehaviour: m_OnClick: m_PersistentCalls: m_Calls: [] +--- !u!114 &1766748350975125263 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5317638608707530441} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 --- !u!1 &6862293603468694699 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/TcgEngine/Resources/TaskReward.meta b/Assets/TcgEngine/Resources/TaskReward.meta new file mode 100644 index 0000000..8d6681d --- /dev/null +++ b/Assets/TcgEngine/Resources/TaskReward.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c78997bb3ac4c4440a7d4efefec17f69 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TcgEngine/Resources/TaskReward/TaskReward.asset b/Assets/TcgEngine/Resources/TaskReward/TaskReward.asset new file mode 100644 index 0000000..7372fba --- /dev/null +++ b/Assets/TcgEngine/Resources/TaskReward/TaskReward.asset @@ -0,0 +1,19 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b5b19a5996046508584e1eb649f43dd, type: 3} + m_Name: TaskReward + m_EditorClassIdentifier: + entries: + - type: 0 + icon: {fileID: 21300000, guid: bf707d878df66f9439ba474fb8d9ef55, type: 3} + - type: 1 + icon: {fileID: 21300000, guid: 9f88fcf9a8fd4114ba8a71a53024535b, type: 3} diff --git a/Assets/TcgEngine/Resources/TaskReward/TaskReward.asset.meta b/Assets/TcgEngine/Resources/TaskReward/TaskReward.asset.meta new file mode 100644 index 0000000..5ec3e49 --- /dev/null +++ b/Assets/TcgEngine/Resources/TaskReward/TaskReward.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d87b140f0a18c5b42b9cfa74e5448e95 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TcgEngine/Scenes/Menu/Menu.unity b/Assets/TcgEngine/Scenes/Menu/Menu.unity index 6b769c9..5388691 100644 --- a/Assets/TcgEngine/Scenes/Menu/Menu.unity +++ b/Assets/TcgEngine/Scenes/Menu/Menu.unity @@ -57205,7 +57205,6 @@ MonoBehaviour: ladderRank: {fileID: 360370754} lines: [] ladderLines: [] - returnToHome_button: {fileID: 1260207039} hideGameObject: - {fileID: 1674082196} - {fileID: 0} @@ -57219,7 +57218,7 @@ CanvasGroup: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 4526323995250171124} m_Enabled: 1 - m_Alpha: 0 + m_Alpha: 1 m_Interactable: 1 m_BlocksRaycasts: 1 m_IgnoreParentGroups: 0 diff --git a/Assets/TcgEngine/Scripts/Api/ApiClient.cs b/Assets/TcgEngine/Scripts/Api/ApiClient.cs index 44a5aca..1d95711 100644 --- a/Assets/TcgEngine/Scripts/Api/ApiClient.cs +++ b/Assets/TcgEngine/Scripts/Api/ApiClient.cs @@ -241,7 +241,7 @@ namespace TcgEngine if (res.success) { udata = ApiTool.JsonToObject(res.data); - Debug.Log($"获取玩家数据:{res.data}"); + // Debug.Log($"获取玩家数据:{res.data}"); } return udata; diff --git a/Assets/TcgEngine/Scripts/Data/TaskData.cs b/Assets/TcgEngine/Scripts/Data/TaskData.cs index eee2582..63f67c1 100644 --- a/Assets/TcgEngine/Scripts/Data/TaskData.cs +++ b/Assets/TcgEngine/Scripts/Data/TaskData.cs @@ -94,7 +94,8 @@ namespace TcgEngine public enum TaskRewardType { - Coins = 0, // 金币 + Coins = 0, // 金币 + Crystal = 1, // 后续可扩展其他奖励类型 } diff --git a/Assets/TcgEngine/Scripts/Data/TaskRewardData.cs b/Assets/TcgEngine/Scripts/Data/TaskRewardData.cs new file mode 100644 index 0000000..584a765 --- /dev/null +++ b/Assets/TcgEngine/Scripts/Data/TaskRewardData.cs @@ -0,0 +1,44 @@ +using System.Collections.Generic; +using UnityEngine; +using TcgEngine.UI; + +namespace TcgEngine +{ + + [System.Serializable] + public class PrizeIconEntry + { + public TaskRewardType type; + public Sprite icon; + } + + [CreateAssetMenu(fileName = "NewTaskRewardData", menuName = "TcgEngine/TaskRewardData")] + public class TaskRewardData : ScriptableObject + { + public PrizeIconEntry[] entries; + + private Dictionary iconDict = new Dictionary(); + + public void Init() + { + iconDict.Clear(); + foreach (var entry in entries) + { + Debug.Log($"录入: {entry.type} => {entry.icon?.name}"); + iconDict[entry.type] = entry.icon; + } + } + + public Sprite GetIcon(TaskRewardType type) + { + if (iconDict.Count == 0) Init(); + + if (iconDict.TryGetValue(type, out Sprite sprite)) + return sprite; + + Debug.LogWarning($"未找到 {type} 的图标,请检查 TaskRewardData 的 entries 配置"); + return null; + } + + } +} \ No newline at end of file diff --git a/Assets/TcgEngine/Scripts/Data/TaskRewardData.cs.meta b/Assets/TcgEngine/Scripts/Data/TaskRewardData.cs.meta new file mode 100644 index 0000000..4fdd4e4 --- /dev/null +++ b/Assets/TcgEngine/Scripts/Data/TaskRewardData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3b5b19a5996046508584e1eb649f43dd +timeCreated: 1757580421 \ No newline at end of file diff --git a/Assets/TcgEngine/Scripts/GameLogic/TaskManager.cs b/Assets/TcgEngine/Scripts/GameLogic/TaskManager.cs index f6adaf6..4964e12 100644 --- a/Assets/TcgEngine/Scripts/GameLogic/TaskManager.cs +++ b/Assets/TcgEngine/Scripts/GameLogic/TaskManager.cs @@ -422,31 +422,37 @@ namespace TcgEngine.Gameplay } task.status = TaskStatus.Claimed; - SavePlayerData(); return true; } private void GiveReward(TaskRewardType rewardType, int amount) { + UserData userData = Authenticator.Get().UserData; // 根据奖励类型发放奖励 switch (rewardType) { case TaskRewardType.Coins: // 增加金币(需要与游戏现有金币系统集成) - UserData userData = Authenticator.Get().UserData; + if (userData != null) { userData.coins += amount; Debug.Log($"Gave {amount} coins as reward"); - - // 保存用户数据更新 - if (ApiClient.Get() != null && ApiClient.Get().IsLoggedIn()) - { - Authenticator.Get().SaveUserData(); - } } break; + case TaskRewardType.Crystal: + if (userData != null) + { + userData.crystal += amount; + Debug.Log($"获取{amount}个钻石"); + } + break; + } + // 保存用户数据更新 + if (ApiClient.Get() != null && ApiClient.Get().IsLoggedIn()) + { + Authenticator.Get().SaveUserData(); } } diff --git a/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs b/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs index 9d5c946..ef60edb 100644 --- a/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs +++ b/Assets/TcgEngine/Scripts/Menu/LeaderboardPanel.cs @@ -37,9 +37,6 @@ namespace TcgEngine.UI public List lines = new List(); public List ladderLines = new List(); - - [Header("返回主页")] - public Button returnToHome_button; private const string DefaultAvatarId = "bear"; @@ -59,28 +56,6 @@ namespace TcgEngine.UI my_line.onClick += OnClickLine; my_ladderLine.onClick += OnClickRankLine; InitLines(); - - returnToHome_button.onClick.AddListener(OnReturnToHome); - } - - /// - /// 返回主页 - /// - public void OnReturnToHome() - { - isHideObject = !isHideObject; - if (isHideObject) - { - Show(); - } - else - { - Hide(); - } - foreach (var obj in hideGameObject) - { - obj.SetActive(!isHideObject); - } } private void OnDestroy() @@ -257,7 +232,7 @@ namespace TcgEngine.UI } } - // + // private void RankPanelColl() // { // if (isLadderRank) diff --git a/Assets/TcgEngine/Scripts/Menu/UIFrame.cs b/Assets/TcgEngine/Scripts/Menu/UIFrame.cs new file mode 100644 index 0000000..c397d30 --- /dev/null +++ b/Assets/TcgEngine/Scripts/Menu/UIFrame.cs @@ -0,0 +1,29 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; + +namespace TcgEngine.UI +{ + public class UIFrame : UIPanel + { + public Button uiFrameHideButton; + + protected override void Awake() + { + base.Awake(); + Hide(); + } + + protected override void Start() + { + uiFrameHideButton.onClick.AddListener(OnUiFrameHide); + } + + private void OnUiFrameHide() + { + Hide(); + } + } + +} diff --git a/Assets/TcgEngine/Scripts/Menu/UIFrame.cs.meta b/Assets/TcgEngine/Scripts/Menu/UIFrame.cs.meta new file mode 100644 index 0000000..8bbdb51 --- /dev/null +++ b/Assets/TcgEngine/Scripts/Menu/UIFrame.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9379c33c33779f64a94d441f6a521411 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TcgEngine/Scripts/Tasks/TaskItem.cs b/Assets/TcgEngine/Scripts/Tasks/TaskItem.cs index 3c9b064..0de8cb7 100644 --- a/Assets/TcgEngine/Scripts/Tasks/TaskItem.cs +++ b/Assets/TcgEngine/Scripts/Tasks/TaskItem.cs @@ -17,13 +17,13 @@ namespace TcgEngine.UI public Text progressBar_text; public Button reward_button; - public Image reward_icon; public Image taskEnd_img; private PlayerTask playerTask; private TaskData taskConfig; + public GameObject rewardItem; protected override void Awake() { @@ -50,12 +50,25 @@ namespace TcgEngine.UI reward_button.interactable = task.status == TaskStatus.Completed; reward_button.onClick.RemoveAllListeners(); reward_button.onClick.AddListener(OnClickReward); + + // 奖品 + for (int i = 0; i < config.rewardTypes.Length; i++) + { + TaskRewardType rewardType = config.rewardTypes[i]; + int rewardNum = (config.rewardNums != null && i < config.rewardNums.Length) + ? config.rewardNums[i] : 1; // 没配数量就默认为1 + GameObject go = Instantiate(rewardItem, reward_button.transform); + var reward = go.GetComponent(); + reward.SetPrize(rewardType, rewardNum, reward_button.interactable); // 改成传两个参数 + } + if (task.status == TaskStatus.Expired || task.status == TaskStatus.Claimed) { taskEnd_img.gameObject.SetActive(true); } - + + RefreshStatus(); } @@ -74,13 +87,5 @@ namespace TcgEngine.UI progressBar_slider.value = playerTask.progress; progressBar_text.text = playerTask.progress + "/" + taskConfig.value1; } - - private void RewardColl(Sprite icon) - { - if (reward_icon != null) - { - reward_icon.sprite = icon; - } - } } } \ No newline at end of file diff --git a/Assets/TcgEngine/Scripts/Tasks/TaskReward.cs b/Assets/TcgEngine/Scripts/Tasks/TaskReward.cs new file mode 100644 index 0000000..2f01d3c --- /dev/null +++ b/Assets/TcgEngine/Scripts/Tasks/TaskReward.cs @@ -0,0 +1,52 @@ +using System; +using UnityEngine; +using UnityEngine.UI; + +namespace TcgEngine.UI +{ + public class TaskReward : MonoBehaviour + { + public TaskRewardData database; // 存放所有奖励图标的 ScriptableObject + + public Image rewardIcon; // 图标 Image + public Text amountText; // 数量文本 + public float fixedHeight = 80f; // 固定高度 + + private RectTransform rect; + + public void SetPrize(TaskRewardType type, int amount,bool isVis) + { + if (!isVis) + { + rewardIcon.color = Color.gray; + amountText.color = Color.gray; + } + else + { + rewardIcon.color = Color.white; + amountText.color = Color.white; + } + + + // 图标 + Sprite sprite = database.GetIcon(type); + rewardIcon.sprite = sprite; + + // 数量 + if (amountText != null) + { + amountText.text = amount > 1 ? "x" + amount.ToString() : ""; + } + + // 高度固定80,等比例缩放 + if (sprite != null) + { + float ratio = sprite.rect.width / sprite.rect.height; + + rect = rewardIcon.GetComponent(); + rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, fixedHeight); + rect.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, fixedHeight * ratio); + } + } + } +} \ No newline at end of file diff --git a/Assets/TcgEngine/Scripts/Tasks/TaskReward.cs.meta b/Assets/TcgEngine/Scripts/Tasks/TaskReward.cs.meta new file mode 100644 index 0000000..f3ed13f --- /dev/null +++ b/Assets/TcgEngine/Scripts/Tasks/TaskReward.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55af7dcd22f203d43b3ff26368c1ef5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/TcgEngine/Sprites/GlobalButton/global_Leaderboard.png b/Assets/TcgEngine/Sprites/GlobalButton/global_Leaderboard.png new file mode 100644 index 0000000..06f644c Binary files /dev/null and b/Assets/TcgEngine/Sprites/GlobalButton/global_Leaderboard.png differ diff --git a/Assets/TcgEngine/Sprites/GlobalButton/global_Leaderboard.png.meta b/Assets/TcgEngine/Sprites/GlobalButton/global_Leaderboard.png.meta new file mode 100644 index 0000000..54d2642 --- /dev/null +++ b/Assets/TcgEngine/Sprites/GlobalButton/global_Leaderboard.png.meta @@ -0,0 +1,135 @@ +fileFormatVersion: 2 +guid: 7b08e38b67a99d041856ff178ebd6758 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: