From f9c7d0f04c83d4d966ea6f47f1b504f17b420901 Mon Sep 17 00:00:00 2001 From: Chomper9981 Date: Sat, 7 Feb 2026 14:57:35 +0700 Subject: [PATCH] Create UI for DlgQuest, fix the proplem with quest have deep not equal 3 --- .../Prefab/Task/TaskTrace/DlgTaskTrace.prefab | 26 +-- .../Task/TaskTrace/StyledTaskTraceText.cs | 74 ++++----- .../Prefab/Task/UI/TreeView.prefab | 4 +- .../Prefab/Task/UI/TreeViewHolder.prefab | 110 +++++++++++++ .../Prefab/Task/UI/TreeViewHolder.prefab.meta | 7 + .../Prefab/Task/UI/TreeViewIState1.prefab | 20 +-- .../Prefab/Task/UI/TreeViewIState2.prefab | 27 +-- .../Prefab/Task/UI/TreeViewIState3.prefab | 34 ++-- .../UI/Pw Nhiemvu-assets/dot.png.meta | 29 +++- .../PerfectWorld/Scripts/Task/UI/DlgTask.cs | 27 ++- .../Scripts/Task/UI/TaskTreeView.cs | 90 ++++++---- .../Scripts/Task/UI/TaskTreeViewHolder.cs | 154 ++++++++++++++++++ .../Task/UI/TaskTreeViewHolder.cs.meta | 2 + .../Scripts/Task/UI/TaskTreeViewItem.cs | 90 ++-------- .../Scripts/UI/Dialogs/AUIDialog.cs | 2 +- .../Scripts/UI/ShopUI/SubTypeButton.cs | 1 - .../PerfectWorld/Scripts/Utils/CECRTDebug.cs | 8 + 17 files changed, 488 insertions(+), 217 deletions(-) create mode 100644 Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab create mode 100644 Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab.meta create mode 100644 Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs create mode 100644 Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs.meta diff --git a/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab b/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab index 28c0d5415d..8ec9d87f0e 100644 --- a/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab +++ b/Assets/PerfectWorld/Prefab/Task/TaskTrace/DlgTaskTrace.prefab @@ -686,6 +686,8 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: bac01b5537b4341a7885fe2392d32eaa, type: 3} m_Name: m_EditorClassIdentifier: + skillNameText: {fileID: 0} + imageProgress: {fileID: 0} m_TargetName: m_TargetPos: {x: 0, y: 0, z: 0} m_Targets: [] @@ -733,9 +735,9 @@ RectTransform: - {fileID: 5334235739729266731} m_Father: {fileID: 3016039455618517900} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 131.66666, y: -25} m_SizeDelta: {x: 50, y: 50} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &6804128504798270830 @@ -759,7 +761,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + 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 @@ -1197,9 +1199,9 @@ RectTransform: - {fileID: 2700626918252070787} m_Father: {fileID: 3016039455618517900} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 25, y: -25} m_SizeDelta: {x: 50, y: 50} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &9058123560732067158 @@ -1223,7 +1225,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + 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 @@ -1877,9 +1879,9 @@ RectTransform: - {fileID: 8505317987590978995} m_Father: {fileID: 3016039455618517900} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 78.33333, y: -25} m_SizeDelta: {x: 50, y: 50} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &1266149729541302388 @@ -1903,7 +1905,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 1, g: 1, b: 1, a: 1} + 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 diff --git a/Assets/PerfectWorld/Prefab/Task/TaskTrace/StyledTaskTraceText.cs b/Assets/PerfectWorld/Prefab/Task/TaskTrace/StyledTaskTraceText.cs index b32ca5a109..989458dc9f 100644 --- a/Assets/PerfectWorld/Prefab/Task/TaskTrace/StyledTaskTraceText.cs +++ b/Assets/PerfectWorld/Prefab/Task/TaskTrace/StyledTaskTraceText.cs @@ -4,34 +4,21 @@ using UnityEngine.EventSystems; using BrewMonster.Scripts.Task.UI; using System.Collections.Generic; using BrewMonster.UI; +using System.Text; +using System.Text.RegularExpressions; namespace BrewMonster { - public class StyledTaskTraceText : MonoBehaviour, IPointerMoveHandler, IPointerExitHandler,IPointerClickHandler + public class StyledTaskTraceText : MonoBehaviour, IPointerMoveHandler,IPointerClickHandler { - public enum LinkType - { - coord, - npc, - monster, - item, - target - } public TMP_Text tmp; private List linkCommands =new List(); int hoveredLink = -1; - LinkType linkType = LinkType.coord; - Color32 normalColor = new Color32(77, 166, 255, 255); - Color32 hoverColor = new Color32(255, 200, 80, 255); - public void SetLinkType( LinkType linkType) - { - this.linkType = linkType; - } + private void Start() { tmp.raycastTarget = true; - ResetLinkColor(); tmp.ForceMeshUpdate(); } @@ -45,22 +32,31 @@ namespace BrewMonster if (linkIndex != hoveredLink) { - ResetLinkColor(); - hoveredLink = linkIndex; - - if (hoveredLink != -1) - SetLinkColor(hoveredLink, hoverColor); } } public void Set(string text) { - tmp.text = text; + tmp.text = FormatForTextMeshPro(text); } - public void OnPointerExit(PointerEventData eventData) + public static string FormatForTextMeshPro(string text) { - ResetLinkColor(); - hoveredLink = -1; + if (string.IsNullOrEmpty(text)) + return string.Empty; + + StringBuilder result = new StringBuilder(text); + result.Replace("\\r", "\n"); + return ProcessColorCodes(result); + } + + public static string ProcessColorCodes(StringBuilder text) + { + string pattern = @"\^([0-9A-Fa-f]{6})"; + return Regex.Replace(text.ToString(), pattern, match => + { + string hexColor = match.Groups[1].Value; + return $""; + }, RegexOptions.None); } public void AddToFirstPosition(LinkCommand linkCommand) @@ -110,34 +106,30 @@ namespace BrewMonster public void OnPointerClick(PointerEventData eventData) { - if (hoveredLink == -1) return; - TMP_LinkInfo linkInfo = tmp.textInfo.linkInfo[hoveredLink]; string linkText = linkInfo.GetLinkText(); string entityID = linkInfo.GetLinkID(); - switch (linkType) + switch (entityID) { - case LinkType.coord: - Debug.Log($"Clicked coord link: ID={entityID} Type={linkType} Text={linkText}"); + case "coord": + Debug.Log($"Clicked coord link: ID={entityID} Text={linkText}"); linkCommands[hoveredLink].Execute(tmp); //Debug.Log($"[StyledTaskTraceText] OnPointerClick: linkCommands[hoveredLink].Execute(tmp) => {linkCommands[hoveredLink].Execute(tmp)}"); break; - case LinkType.npc: - Debug.Log($"Clicked npc link: ID={entityID} Type={linkType} Text={linkText}"); + case "npc": + Debug.Log($"Clicked npc link: ID={entityID} Text={linkText}"); + linkCommands[hoveredLink].Execute(tmp); break; - case LinkType.monster: - Debug.Log($"Clicked monster link: ID={entityID} Type={linkType} Text={linkText}"); + case "monster": + Debug.Log($"Clicked monster link: ID={entityID} Text={linkText}"); break; + default: + Debug.Log($"Clicked unknown link: ID={entityID} Text={linkText}"); + break; } - ResetLinkColor(); hoveredLink = -1; } - void ResetLinkColor() - { - if (hoveredLink == -1) return; - SetLinkColor(hoveredLink, normalColor); - } } } diff --git a/Assets/PerfectWorld/Prefab/Task/UI/TreeView.prefab b/Assets/PerfectWorld/Prefab/Task/UI/TreeView.prefab index 6bee375522..48972ea7a5 100644 --- a/Assets/PerfectWorld/Prefab/Task/UI/TreeView.prefab +++ b/Assets/PerfectWorld/Prefab/Task/UI/TreeView.prefab @@ -50,9 +50,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 8688b7d87bac4c16b9eaa3408f8ea419, type: 3} m_Name: m_EditorClassIdentifier: - m_pTreeItemPrefab_Deep1: {fileID: 4314770845850481090, guid: 8752f9e95e4124abfb0d46a2cbe805e4, type: 3} - m_pTreeItemPrefab_Deep2: {fileID: 4314770845850481090, guid: 3cb6791423916496ea0a5b059419fdaa, type: 3} - m_pTreeItemPrefab_Deep3: {fileID: 4314770845850481090, guid: 7b4ec3e05f31a45138f72011c6bf7cf2, type: 3} + m_pTreeViewHolder: {fileID: 1273901548777618454, guid: 8bc89f863b5ec42b49f149d7363144f3, type: 3} _currentSelectedItem: {fileID: 0} m_aTreeViewItems: [] --- !u!114 &6404897883559725565 diff --git a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab new file mode 100644 index 0000000000..b8bcffd564 --- /dev/null +++ b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab @@ -0,0 +1,110 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &700152255263326765 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5053903421260846465} + - component: {fileID: 4986645933044111193} + - component: {fileID: 1062363862839909147} + - component: {fileID: 1273901548777618454} + - component: {fileID: 442295838974077123} + m_Layer: 5 + m_Name: TreeViewHolder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5053903421260846465 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700152255263326765} + 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_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: 312.2704, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &4986645933044111193 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700152255263326765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalFit: 0 + m_VerticalFit: 1 +--- !u!114 &1062363862839909147 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700152255263326765} + 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: 1 + 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!114 &1273901548777618454 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700152255263326765} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dfe78f833120b411d915fcd9c9793515, type: 3} + m_Name: + m_EditorClassIdentifier: + m_pTreeItemPrefab_Deep1: {fileID: 4314770845850481090, guid: 8752f9e95e4124abfb0d46a2cbe805e4, type: 3} + m_pTreeItemPrefab_Deep2: {fileID: 4314770845850481090, guid: 3cb6791423916496ea0a5b059419fdaa, type: 3} + m_pTreeItemPrefab_Deep3: {fileID: 4314770845850481090, guid: 7b4ec3e05f31a45138f72011c6bf7cf2, type: 3} + m_uItemData: 0 + _treeLevel: 0 + isLastItem: 1 + _itemTextColor: {r: 0, g: 0, b: 0, a: 0} + _itemText: + _expand: 0 +--- !u!222 &442295838974077123 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700152255263326765} + m_CullTransparentMesh: 1 diff --git a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab.meta b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab.meta new file mode 100644 index 0000000000..3987ee19c2 --- /dev/null +++ b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewHolder.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8bc89f863b5ec42b49f149d7363144f3 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState1.prefab b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState1.prefab index 229ef9130e..7ae875fdbc 100644 --- a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState1.prefab +++ b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState1.prefab @@ -218,10 +218,10 @@ RectTransform: - {fileID: 5827054231092576763} m_Father: {fileID: 2024997316782034639} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 200.71739, y: -45.5} + m_SizeDelta: {x: 224.56522, y: 91} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &2230410216357545400 CanvasRenderer: @@ -599,10 +599,10 @@ RectTransform: - {fileID: 5340186735755952146} m_Father: {fileID: 2024997316782034639} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 45, y: -45} + m_SizeDelta: {x: 150, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &885853373149276158 CanvasRenderer: @@ -661,7 +661,7 @@ MonoBehaviour: m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} - m_Transition: 1 + m_Transition: 0 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} @@ -773,7 +773,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7973684205123875483} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} m_Name: diff --git a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState2.prefab b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState2.prefab index a56a5bf1de..abb64a9a58 100644 --- a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState2.prefab +++ b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState2.prefab @@ -63,12 +63,13 @@ MonoBehaviour: _expandBG: {fileID: 6073336955970910715} ExpandBGActive: {fileID: 21300000, guid: 42074c4f5f76b4cbc9043df8f430af5f, type: 3} ExpandBGInactive: {fileID: 21300000, guid: e09a5d2cb3c3f4c858754a1e90a44abd, type: 3} - m_uItemData: 0 - _treeLevel: 0 - isLastItem: 0 + _rectTransform: {fileID: 0} OnClick: m_PersistentCalls: m_Calls: [] + OnExpand: + m_PersistentCalls: + m_Calls: [] --- !u!114 &4986645933044111193 MonoBehaviour: m_ObjectHideFlags: 0 @@ -143,10 +144,10 @@ RectTransform: - {fileID: 5827054231092576763} m_Father: {fileID: 2024997316782034639} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 184.67392, y: -33} + m_SizeDelta: {x: 220.65218, y: 66} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &2230410216357545400 CanvasRenderer: @@ -175,7 +176,7 @@ MonoBehaviour: m_SelectOnDown: {fileID: 0} m_SelectOnLeft: {fileID: 0} m_SelectOnRight: {fileID: 0} - m_Transition: 1 + m_Transition: 0 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} @@ -522,10 +523,10 @@ RectTransform: - {fileID: 5062486824527634889} m_Father: {fileID: 2024997316782034639} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 45.673943, y: -32} + m_SizeDelta: {x: 135.3478, y: 80} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &885853373149276158 CanvasRenderer: @@ -681,7 +682,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7973684205123875483} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} m_Name: diff --git a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState3.prefab b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState3.prefab index a6ff28a76c..71ebe6ad8a 100644 --- a/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState3.prefab +++ b/Assets/PerfectWorld/Prefab/Task/UI/TreeViewIState3.prefab @@ -143,10 +143,10 @@ RectTransform: - {fileID: 5827054231092576763} m_Father: {fileID: 2024997316782034639} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 149.49998, y: -30} + m_SizeDelta: {x: 281, y: 60} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &2230410216357545400 CanvasRenderer: @@ -254,8 +254,8 @@ RectTransform: 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.00000023841858} + m_AnchoredPosition: {x: 35, y: 0} + m_SizeDelta: {x: -70, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &5842649278580849339 CanvasRenderer: @@ -390,8 +390,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: -0.00048828125, y: 0} - m_SizeDelta: {x: 48, y: 48} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 25, y: 25} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &7099288759002186546 CanvasRenderer: @@ -415,13 +415,13 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 1} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 00976b2e066af4e1f85ff5f3c94b5d48, type: 3} + m_Sprite: {fileID: -1288565630, guid: 00976b2e066af4e1f85ff5f3c94b5d48, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -522,10 +522,10 @@ RectTransform: - {fileID: 5062486824527634889} m_Father: {fileID: 2024997316782034639} 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_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 45, y: -27} + m_SizeDelta: {x: 50, y: 50} m_Pivot: {x: 0.5, y: 0.5} --- !u!222 &885853373149276158 CanvasRenderer: @@ -549,13 +549,13 @@ MonoBehaviour: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 1, b: 1, a: 0} - m_RaycastTarget: 1 + m_RaycastTarget: 0 m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} m_Maskable: 1 m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_Sprite: {fileID: 21300000, guid: 00976b2e066af4e1f85ff5f3c94b5d48, type: 3} + m_Sprite: {fileID: -1288565630, guid: 00976b2e066af4e1f85ff5f3c94b5d48, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -681,7 +681,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 7973684205123875483} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} m_Name: diff --git a/Assets/PerfectWorld/Resources/UI/Pw Nhiemvu-assets/dot.png.meta b/Assets/PerfectWorld/Resources/UI/Pw Nhiemvu-assets/dot.png.meta index 48f327a19d..7399fd62d1 100644 --- a/Assets/PerfectWorld/Resources/UI/Pw Nhiemvu-assets/dot.png.meta +++ b/Assets/PerfectWorld/Resources/UI/Pw Nhiemvu-assets/dot.png.meta @@ -43,7 +43,7 @@ TextureImporter: nPOTScale: 0 lightmap: 0 compressionQuality: 50 - spriteMode: 1 + spriteMode: 2 spriteExtrude: 1 spriteMeshType: 1 alignment: 0 @@ -108,7 +108,29 @@ TextureImporter: forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 - sprites: [] + sprites: + - serializedVersion: 2 + name: dot_0 + rect: + serializedVersion: 2 + x: 2 + y: 4 + width: 20 + height: 20 + alignment: 0 + pivot: {x: 0, y: 0} + border: {x: 0, y: 0, z: 0, w: 0} + customData: + outline: [] + physicsShape: [] + tessellationDetail: 0 + bones: [] + spriteID: 4daa99dcd797c4c14abcb146f46af16e + internalID: -1288565630 + vertices: [] + indices: + edges: [] + weights: [] outline: [] customData: physicsShape: [] @@ -122,7 +144,8 @@ TextureImporter: secondaryTextures: [] spriteCustomMetadata: entries: [] - nameFileIdTable: {} + nameFileIdTable: + dot_0: -1288565630 mipmapLimitGroupName: pSDRemoveMatte: 0 userData: diff --git a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs index 8592f9d79e..01075401c7 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/DlgTask.cs @@ -202,6 +202,7 @@ namespace BrewMonster.Scripts.Task.UI } OnInitDialog(); + } // Convert exactly like C++ OnEventLButtonDown_Txt_QuestItem // 完全按照C++ OnEventLButtonDown_Txt_QuestItem转换 @@ -339,6 +340,10 @@ namespace BrewMonster.Scripts.Task.UI { CECUIHelper.FollowCoord(targetPos, targetName); } + public static void SetTraceNpc(int entityID, int taskID) + { + CECUIHelper.FollowCoord(entityID, taskID); + } private new void Update() { @@ -389,8 +394,9 @@ namespace BrewMonster.Scripts.Task.UI CECGameUIMan gameUIMan = GetGameUIMan(); auiManager = gameUIMan; } - AUIDialog pTrace = auiManager.GetDialog("Win_QuestMinion"); + int index = this.transform.GetSiblingIndex(); + pTrace.transform.SetSiblingIndex(index); if (pTrace) { pTrace.Show(m_bShowTrace); } @@ -706,7 +712,6 @@ namespace BrewMonster.Scripts.Task.UI // private bool Tick() { - Debug.Log("[DlgTask] Tick"); RefreshTaskTrace(); // Time-window task refresh: while in Search view, refresh the list when server time crosses a minute boundary. // This is throttled to avoid rebuilding large task lists every frame. @@ -817,7 +822,6 @@ namespace BrewMonster.Scripts.Task.UI } public void RefreshTaskTrace() { - Debug.Log("[DlgTask] RefreshTaskTrace"); // Get AUIManager, fallback to GetGameUIMan() if m_pAUIManager is not set yet // 获取AUIManager,如果m_pAUIManager尚未设置则回退到GetGameUIMan() AUIManager auiManager = GetAUIManager(); @@ -1066,6 +1070,9 @@ namespace BrewMonster.Scripts.Task.UI AddTaskNode(id); } SortTaskNodeByType(); + // Resolve all prefabs after quest loading is complete (after SetLastItem() calls are done) + // 在任务加载完成后解析所有预制体(在SetLastItem()调用完成后) + m_pTv_Quest.ResolveAllPrefabs(); string strTemp; int iMaxTaskCount = TaskInterfaceConstants.TASK_ACTIVE_LIST_MAX_LEN; strTemp = $"{pTask.GetTaskCount()}/{iMaxTaskCount}"; @@ -1188,6 +1195,9 @@ namespace BrewMonster.Scripts.Task.UI } SortTaskNodeByType(); + // Resolve all prefabs after quest loading is complete (after SetLastItem() calls are done) + // 在任务加载完成后解析所有预制体(在SetLastItem()调用完成后) + m_pTv_Quest.ResolveAllPrefabs(); // string strTemp; // ActiveTaskList pLst = (ActiveTaskList)pTask.GetActiveTaskList(); @@ -1377,7 +1387,7 @@ namespace BrewMonster.Scripts.Task.UI // virtual bool OnChangeLayout(PAUIOBJECT pMine, PAUIOBJECT pTheir); // virtual void OnChangeLayoutEnd(bool bAllDone); // - private void InsertTaskChildren(TaskTreeViewItem pRoot, uint idTask, bool bExpand, bool bKey) + private void InsertTaskChildren(TaskTreeViewHolder pRoot, uint idTask, bool bExpand, bool bKey) { var pTreeTask = m_pTv_Quest; var pMan = EC_Game.GetTaskTemplateMan(); @@ -1414,7 +1424,7 @@ namespace BrewMonster.Scripts.Task.UI // [中文] 仅插入“已接任务(Active)”中的子任务(基于 ActiveTaskList 的 Child/NextSbl 索引) // [English] Insert only active subtasks (based on ActiveTaskList Child/NextSbl indices) - private void InsertActiveTaskChildren(TaskTreeViewItem pRoot, uint idTask) + private void InsertActiveTaskChildren(TaskTreeViewHolder pRoot, uint idTask) { var pTreeTask = m_pTv_Quest; var pMan = EC_Game.GetTaskTemplateMan(); @@ -1757,6 +1767,7 @@ namespace BrewMonster.Scripts.Task.UI // Always create clickable link (even if coords aren't known yet). // 总是创建可点击链接(即使暂时不知道坐标)。 sb.Append($"{npcName}"); + sb.Append("\n"); strText += sb.ToString(); @@ -2069,7 +2080,7 @@ namespace BrewMonster.Scripts.Task.UI uint nTaskType = pTemp.m_FixedData.m_ulType; if (pTemp.m_FixedData.m_DynTaskType != 0) nTaskType = (uint)ENUM_TASK_TYPE.enumTTEvent; uint nAfterType = 0; - TaskTreeViewItem pAfter = null, pParent = null; + TaskTreeViewHolder pAfter = null, pParent = null; // P_AUITREEVIEW_ITEM pItem = pTreeTask->GetFirstChildItem(pTreeTask->GetRootItem()); // var pItem = pTreeTask.transform.parent.GetChild(0).GetComponent(); var pItem = pTreeTask.GetFirstChild(); @@ -2136,10 +2147,10 @@ namespace BrewMonster.Scripts.Task.UI // Collect direct children under the tree root (this component's transform) int childCount = pTreeTask.transform.childCount; - var items = new List<(uint type, TaskTreeViewItem item)>(childCount); + var items = new List<(uint type, TaskTreeViewHolder item)>(childCount); for (int i = 0; i < childCount; i++) { - var child = pTreeTask.transform.GetChild(i).GetComponent(); + var child = pTreeTask.transform.GetChild(i).GetComponent(); if (child == null) continue; uint nType = pTreeTask.GetItemData(child); items.Add((nType, child)); diff --git a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs index 2821aa610b..3aee5ef4d3 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeView.cs @@ -6,14 +6,17 @@ namespace BrewMonster.Scripts.Task.UI { public class TaskTreeView : MonoBehaviour, IRefreshLayout { - [SerializeField] private TaskTreeViewItem m_pTreeItemPrefab_Deep1; - [SerializeField] private TaskTreeViewItem m_pTreeItemPrefab_Deep2; - [SerializeField] private TaskTreeViewItem m_pTreeItemPrefab_Deep3; + [SerializeField] private TaskTreeViewHolder m_pTreeViewHolder; [Header("DEBUG")] - [SerializeField] private TaskTreeViewItem _currentSelectedItem = null; - [SerializeField] private TaskTreeViewItem[] m_aTreeViewItems; + [SerializeField] private TaskTreeViewHolder _currentSelectedItem = null; + [SerializeField] private TaskTreeViewHolder[] m_aTreeViewItems; + private RectTransform _rectTransform; + private void Awake() + { + _rectTransform = GetComponent(); + } private void Start() { @@ -23,24 +26,24 @@ namespace BrewMonster.Scripts.Task.UI }); } - public void SetItemData(TaskTreeViewItem item, uint taskType) + public void SetItemData(TaskTreeViewHolder item, uint taskType) { item.SetItemData(taskType); } - public uint GetItemData(TaskTreeViewItem item) + public uint GetItemData(TaskTreeViewHolder item) { if (item == null) return 0; return item.GetItemData(); } - public TaskTreeViewItem GetNextSiblingItem(TaskTreeViewItem item) + public TaskTreeViewHolder GetNextSiblingItem(TaskTreeViewHolder item) { if (m_aTreeViewItems == null) { - m_aTreeViewItems = GetComponentsInChildren(true); + m_aTreeViewItems = GetComponentsInChildren(true); } for (int i = 0; i < m_aTreeViewItems.Length - 1; i++) @@ -54,24 +57,13 @@ namespace BrewMonster.Scripts.Task.UI return null; } - public TaskTreeViewItem InsertItem(string text, TaskTreeViewItem pParent, TaskTreeViewItem pAfter) + public TaskTreeViewHolder InsertItem(string text, TaskTreeViewHolder pParent, TaskTreeViewHolder pAfter) { //caculate treelevel first int treeLevel = pParent != null ? pParent.GetTreeLevel() + 1 : 0; // Create a new item GameObject and component - TaskTreeViewItem pItem = null; - switch (treeLevel) - { - case 0: - pItem = Instantiate(m_pTreeItemPrefab_Deep1); - break; - case 1: - pItem = Instantiate(m_pTreeItemPrefab_Deep2); - break; - default: - pItem = Instantiate(m_pTreeItemPrefab_Deep3); - break; - } + TaskTreeViewHolder pItem = Instantiate(m_pTreeViewHolder); + if(pParent != null) { pParent.SetLastItem(false); @@ -103,10 +95,10 @@ namespace BrewMonster.Scripts.Task.UI pItem.SetTreeLevel(treeLevel); // Refresh local cache of items - m_aTreeViewItems = GetComponentsInChildren(true); + m_aTreeViewItems = GetComponentsInChildren(true); // pParent.RefreshLayout(); - if(pParent) pParent.SetExpand(false); // Collapse parent to show new item only when expanded + if(pParent) pParent.OnExpand(false); // Collapse parent to show new item only when expanded return pItem; } @@ -116,7 +108,7 @@ namespace BrewMonster.Scripts.Task.UI List childrenCopy = new(); foreach (Transform child in transform) { - // Destroy(child.GetComponent()); + // Destroy(child.GetComponent()); childrenCopy.Add(child); } @@ -127,18 +119,18 @@ namespace BrewMonster.Scripts.Task.UI } m_aTreeViewItems = null; - // m_aTreeViewItems = GetComponentsInChildren(true); + // m_aTreeViewItems = GetComponentsInChildren(true); _currentSelectedItem = null; } - public TaskTreeViewItem GetItemByData(uint taskType) + public TaskTreeViewHolder GetItemByData(uint taskType) { if (m_aTreeViewItems == null) { - m_aTreeViewItems = new TaskTreeViewItem[this.transform.childCount]; - m_aTreeViewItems = GetComponentsInChildren(true); + m_aTreeViewItems = new TaskTreeViewHolder[this.transform.childCount]; + m_aTreeViewItems = GetComponentsInChildren(true); } foreach (var item in m_aTreeViewItems) @@ -152,12 +144,12 @@ namespace BrewMonster.Scripts.Task.UI return null; } - public TaskTreeViewItem GetFirstChild() + public TaskTreeViewHolder GetFirstChild() { - return transform.childCount == 0 ? null : transform.GetChild(0).GetComponent(); + return transform.childCount == 0 ? null : transform.GetChild(0).GetComponent(); } - public TaskTreeViewItem GetSelectedItem() + public TaskTreeViewHolder GetSelectedItem() { return _currentSelectedItem; } @@ -170,11 +162,39 @@ namespace BrewMonster.Scripts.Task.UI public void RefreshLayout() { - var parent = GetComponent(); - + var parent = _rectTransform; + foreach(var child in GetComponentsInChildren(true)) + { + child.RefreshSelf(); + } // Force Unity to rebuild layout immediately parent.ForceUpdateRectTransforms(); LayoutRebuilder.ForceRebuildLayoutImmediate(parent); + Debug.Log($"[TaskTreeView] RefreshLayout"); + } + + /// + /// Resolve all prefabs after quest loading is complete + /// This should be called after all items are added and SetLastItem() calls are done + /// 在任务加载完成后解析所有预制体 + /// 这应该在所有项目添加完成且SetLastItem()调用完成后调用 + /// + public void ResolveAllPrefabs() + { + // Refresh cache to get all items + m_aTreeViewItems = GetComponentsInChildren(true); + + if (m_aTreeViewItems == null) return; + + // Resolve prefab for each item + foreach (var item in m_aTreeViewItems) + { + if (item != null) + { + item.ResolvePrefab(); + item.RefreshSelf(); + } + } } } diff --git a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs new file mode 100644 index 0000000000..a8bd8d5bc4 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs @@ -0,0 +1,154 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.UI; +using UnityEngine.Events; +namespace BrewMonster.Scripts.Task.UI +{ + public class TaskTreeViewHolder : MonoBehaviour,IRefreshLayout + { + [SerializeField] private TaskTreeViewItem m_pTreeItemPrefab_Deep1; + [SerializeField] private TaskTreeViewItem m_pTreeItemPrefab_Deep2; + [SerializeField] private TaskTreeViewItem m_pTreeItemPrefab_Deep3; + private TaskTreeViewItem _pTreeItemPrefab_Root; + [Header("DEBUG")] + [SerializeField] private uint m_uItemData; + [SerializeField] private int _treeLevel =999; + public bool isLastItem = true; + public Color _itemTextColor; + public string _itemText; + public bool _expand; + private RectTransform _rectTransform; + private void Awake() + { + _rectTransform = GetComponent(); + } + public void ResolvePrefab() + { + // Guard: prevent multiple calls to avoid duplicate prefab instances + // 防护:防止多次调用以避免重复的预制体实例 + if (_pTreeItemPrefab_Root != null) + { + return; + } + if(isLastItem) + { + _pTreeItemPrefab_Root = Instantiate(m_pTreeItemPrefab_Deep3,transform); + } + else if(_treeLevel == 0) + { + _pTreeItemPrefab_Root = Instantiate(m_pTreeItemPrefab_Deep1,transform); + } + else + { + _pTreeItemPrefab_Root = Instantiate(m_pTreeItemPrefab_Deep2,transform); + } + _pTreeItemPrefab_Root.OnClick.AddListener(OnBtnClick); + _pTreeItemPrefab_Root.OnExpand.AddListener(OnExpand); + _pTreeItemPrefab_Root.transform.SetAsFirstSibling(); + + // Apply stored text and color to the prefab after creation + // 创建后应用存储的文本和颜色到预制体 + if (!string.IsNullOrEmpty(_itemText)) + { + _pTreeItemPrefab_Root.SetItemText(_itemText); + } + if (_itemTextColor != default(Color)) + { + _pTreeItemPrefab_Root.SetItemTextColor(_itemTextColor); + } + _pTreeItemPrefab_Root.RefreshSelf(); + + } + public void SetItemData(uint uItemData) + { + m_uItemData = uItemData; + gameObject.name = $"Task_{uItemData}"; + } + + public uint GetItemData() + { + return m_uItemData; + } + + public void SetItemTextColor(Color color) + { + _itemTextColor = color; + // Apply to prefab if it exists + // 如果预制体存在,则应用颜色 + if (_pTreeItemPrefab_Root != null) + { + _pTreeItemPrefab_Root.SetItemTextColor(color); + } + } + public void SetLastItem(bool isLastItem) + { + this.isLastItem = isLastItem; + } + public void SetItemText(string text) + { + _itemText = text; + // Apply to prefab if it exists + // 如果预制体存在,则应用文本 + if (_pTreeItemPrefab_Root != null) + { + _pTreeItemPrefab_Root.SetItemText(text); + } + } + + public void SetTreeLevel(int level) + { + _treeLevel = level; + } + + public int GetTreeLevel() => _treeLevel; + + public void OnExpand(bool expand) + { + var children = GetComponentsInChildren(true); + + for (int i=1; i(true)) + { + child.RefreshSelf(); + } + + if (transform.parent && + transform.parent.TryGetComponent(out var refreshLayout)) + { + refreshLayout.RefreshLayout(); + } + } + public void RefreshSelf() + { + var rectTransform = _rectTransform; + if (rectTransform == null) + { + return; + } + rectTransform.ForceUpdateRectTransforms(); + LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform); + _pTreeItemPrefab_Root.RefreshSelf(); + } + void OnBtnClick() + { + EventBus.Publish(new TaskItemClickEvent() { Data = m_uItemData }); + Debug.Log($"[TaskTreeViewItem] OnBtnClick: {m_uItemData}"); + } + } + +} \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs.meta b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs.meta new file mode 100644 index 0000000000..8fa2ca8002 --- /dev/null +++ b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewHolder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: dfe78f833120b411d915fcd9c9793515 \ No newline at end of file diff --git a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs index a7b6891861..cf290164b4 100644 --- a/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs +++ b/Assets/PerfectWorld/Scripts/Task/UI/TaskTreeViewItem.cs @@ -12,28 +12,19 @@ namespace BrewMonster.Scripts.Task.UI [SerializeField] private TextOutlet m_text; [SerializeField] private Button m_Button; [SerializeField] private Toggle _expandToggle; - [SerializeField] private TextOutlet _expandText; - [SerializeField] private LayoutElement _space; [SerializeField] private Image _expandBG; [SerializeField] private Sprite ExpandBGActive; [SerializeField] private Sprite ExpandBGInactive; - [Header("DEBUG")] - [SerializeField] private uint m_uItemData; - [SerializeField] private int _treeLevel; - private RectTransform _rectTransform; - public bool isLastItem = true; - public UnityEvent OnClick = new UnityEvent(); + [SerializeField] private RectTransform _rectTransform; + public UnityEvent OnClick = new UnityEvent(); + public UnityEvent OnExpand = new UnityEvent(); #region UNITY_METHODS private void Awake() { - m_Button.onClick.AddListener(OnBtnClick); - //_expandButton.onClick.AddListener(OnExpandBtnClicked); - //_collapseButton.onClick.AddListener(OnCollapseBtnClicked); - // _expandButton.gameObject.SetActive(false); - // _collapseButton.gameObject.SetActive(false); - + m_Button.onClick.AddListener(OnClick.Invoke); + _expandToggle.onValueChanged.AddListener(SetExpand); _rectTransform = GetComponent(); } @@ -54,35 +45,25 @@ namespace BrewMonster.Scripts.Task.UI public void SetItemData(uint uItemData) { - m_uItemData = uItemData; gameObject.name = $"Task_{uItemData}"; } - - public uint GetItemData() - { - return m_uItemData; - } - + public void SetItemTextColor(Color color) { if (m_text != null) { m_text.SetColor(color); - _expandText.SetColor(color); } } public void SetLastItem(bool isLastItem) { - this.isLastItem = isLastItem; if(isLastItem) { - _expandText.Set("●"); // thís not show in tmp text _expandToggle.onValueChanged.RemoveAllListeners(); } else { - _expandText.Set("+"); _expandToggle.onValueChanged.AddListener(OnExpandToggleValueChanged); } } @@ -94,27 +75,15 @@ namespace BrewMonster.Scripts.Task.UI } } - public void SetTreeLevel(int level) - { - _treeLevel = level; - _space.preferredWidth = level * 40; - } - - public int GetTreeLevel() => _treeLevel; public void SetExpand(bool expand) { - var children = GetComponentsInChildren(true); - - for (int i=1; i(out var refreshLayout)) { refreshLayout.RefreshLayout(); } } - - void OnBtnClick() + public void RefreshSelf() { - OnClick.Invoke(m_uItemData); - EventBus.Publish(new TaskItemClickEvent() { Data = m_uItemData }); - Debug.Log($"[TaskTreeViewItem] OnBtnClick: {m_uItemData}"); - } - - void OnExpandBtnClicked() - { - SetExpand(expand: true); - } - - void OnCollapseBtnClicked() - { - SetExpand(false); + var rectTransform = _rectTransform; + if (rectTransform == null) + { + return; + } + rectTransform.ForceUpdateRectTransforms(); + LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform); } void OnExpandToggleValueChanged(bool isOn) { SetExpand(isOn); - if(isOn) - { - _expandText.Set("-"); - } - else - { - _expandText.Set("+"); - } } } diff --git a/Assets/PerfectWorld/Scripts/UI/Dialogs/AUIDialog.cs b/Assets/PerfectWorld/Scripts/UI/Dialogs/AUIDialog.cs index 829f91c2bd..12f8006cc1 100644 --- a/Assets/PerfectWorld/Scripts/UI/Dialogs/AUIDialog.cs +++ b/Assets/PerfectWorld/Scripts/UI/Dialogs/AUIDialog.cs @@ -23,7 +23,7 @@ namespace BrewMonster.UI public virtual void Show(bool value) { - BMLogger.LogError("AUIDialog::Show() not implemented i n gameObject.SetActive = " + value); + //BMLogger.LogError("AUIDialog::Show() not implemented i n gameObject.SetActive = " + value); gameObject.SetActive(value); m_bShow = value; OnShowDialogue(); diff --git a/Assets/PerfectWorld/Scripts/UI/ShopUI/SubTypeButton.cs b/Assets/PerfectWorld/Scripts/UI/ShopUI/SubTypeButton.cs index cf2a739f95..75b877bd12 100644 --- a/Assets/PerfectWorld/Scripts/UI/ShopUI/SubTypeButton.cs +++ b/Assets/PerfectWorld/Scripts/UI/ShopUI/SubTypeButton.cs @@ -53,7 +53,6 @@ public class SubTypeButton : MonoBehaviour public void SetAllButton(ShopUIManager manager) { - Debug.Log("SetAllButton: Tat ca"); subTypeText.text = "Tat ca"; subTypeName = ""; // Empty for "All" button shopUIManager = manager; diff --git a/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs b/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs index c61c542454..6012a4da6b 100644 --- a/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs +++ b/Assets/PerfectWorld/Scripts/Utils/CECRTDebug.cs @@ -64,6 +64,14 @@ namespace BrewMonster m_pCur += sizeof(short); return value; } + public ulong ReadULong() + { + BoundCheck(sizeof(ulong)); + + ulong value = System.BitConverter.ToUInt64(data, m_pCur); + m_pCur += sizeof(ulong); + return value; + } public ushort ReadUShort() { BoundCheck(sizeof(ushort));