Create UI for DlgQuest, fix the proplem with quest have deep not equal 3
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<LinkCommand> linkCommands =new List<LinkCommand>();
|
||||
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 $"<color=#{hexColor}>";
|
||||
}, 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);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8bc89f863b5ec42b49f149d7363144f3
|
||||
PrefabImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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($"<link=\"coord_{nDNPC}\"><color=#00FF00>{npcName}</color></link>");
|
||||
|
||||
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<TaskTreeViewItem>();
|
||||
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<TaskTreeViewItem>();
|
||||
var child = pTreeTask.transform.GetChild(i).GetComponent<TaskTreeViewHolder>();
|
||||
if (child == null) continue;
|
||||
uint nType = pTreeTask.GetItemData(child);
|
||||
items.Add((nType, child));
|
||||
|
||||
@@ -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<RectTransform>();
|
||||
}
|
||||
|
||||
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<TaskTreeViewItem>(true);
|
||||
m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewHolder>(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<TaskTreeViewItem>(true);
|
||||
m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewHolder>(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<Transform> childrenCopy = new();
|
||||
foreach (Transform child in transform)
|
||||
{
|
||||
// Destroy(child.GetComponent<TaskTreeViewItem>());
|
||||
// Destroy(child.GetComponent<TaskTreeViewHolder>());
|
||||
childrenCopy.Add(child);
|
||||
}
|
||||
|
||||
@@ -127,18 +119,18 @@ namespace BrewMonster.Scripts.Task.UI
|
||||
}
|
||||
|
||||
m_aTreeViewItems = null;
|
||||
// m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewItem>(true);
|
||||
// m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewHolder>(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<TaskTreeViewItem>(true);
|
||||
m_aTreeViewItems = new TaskTreeViewHolder[this.transform.childCount];
|
||||
m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewHolder>(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<TaskTreeViewItem>();
|
||||
return transform.childCount == 0 ? null : transform.GetChild(0).GetComponent<TaskTreeViewHolder>();
|
||||
}
|
||||
|
||||
public TaskTreeViewItem GetSelectedItem()
|
||||
public TaskTreeViewHolder GetSelectedItem()
|
||||
{
|
||||
return _currentSelectedItem;
|
||||
}
|
||||
@@ -170,11 +162,39 @@ namespace BrewMonster.Scripts.Task.UI
|
||||
|
||||
public void RefreshLayout()
|
||||
{
|
||||
var parent = GetComponent<RectTransform>();
|
||||
|
||||
var parent = _rectTransform;
|
||||
foreach(var child in GetComponentsInChildren<TaskTreeViewHolder>(true))
|
||||
{
|
||||
child.RefreshSelf();
|
||||
}
|
||||
// Force Unity to rebuild layout immediately
|
||||
parent.ForceUpdateRectTransforms();
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(parent);
|
||||
Debug.Log($"[TaskTreeView] RefreshLayout");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Resolve all prefabs after quest loading is complete
|
||||
/// This should be called after all items are added and SetLastItem() calls are done
|
||||
/// 在任务加载完成后解析所有预制体
|
||||
/// 这应该在所有项目添加完成且SetLastItem()调用完成后调用
|
||||
/// </summary>
|
||||
public void ResolveAllPrefabs()
|
||||
{
|
||||
// Refresh cache to get all items
|
||||
m_aTreeViewItems = GetComponentsInChildren<TaskTreeViewHolder>(true);
|
||||
|
||||
if (m_aTreeViewItems == null) return;
|
||||
|
||||
// Resolve prefab for each item
|
||||
foreach (var item in m_aTreeViewItems)
|
||||
{
|
||||
if (item != null)
|
||||
{
|
||||
item.ResolvePrefab();
|
||||
item.RefreshSelf();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<RectTransform>();
|
||||
}
|
||||
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<TaskTreeViewHolder>(true);
|
||||
|
||||
for (int i=1; i<children.Length; i++)
|
||||
{
|
||||
if(children[i].GetTreeLevel() == _treeLevel + 1)
|
||||
{
|
||||
children[i].gameObject.SetActive(expand);
|
||||
}
|
||||
}
|
||||
}
|
||||
public void RefreshLayout()
|
||||
{
|
||||
var rectTransform = _rectTransform;
|
||||
if (rectTransform == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
Debug.Log($"[TaskTreeViewHolder] RefreshLayout");
|
||||
foreach(var child in GetComponentsInChildren<TaskTreeViewHolder>(true))
|
||||
{
|
||||
child.RefreshSelf();
|
||||
}
|
||||
|
||||
if (transform.parent &&
|
||||
transform.parent.TryGetComponent<IRefreshLayout>(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}");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dfe78f833120b411d915fcd9c9793515
|
||||
@@ -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<uint> OnClick = new UnityEvent<uint>();
|
||||
[SerializeField] private RectTransform _rectTransform;
|
||||
public UnityEvent OnClick = new UnityEvent();
|
||||
public UnityEvent<bool> OnExpand = new UnityEvent<bool>();
|
||||
|
||||
#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<RectTransform>();
|
||||
}
|
||||
|
||||
@@ -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<TaskTreeViewItem>(true);
|
||||
|
||||
for (int i=1; i<children.Length; i++)
|
||||
{
|
||||
if(children[i].GetTreeLevel() == _treeLevel + 1)
|
||||
children[i].gameObject.SetActive(expand);
|
||||
}
|
||||
_expandBG.sprite = expand ? ExpandBGActive : ExpandBGInactive;
|
||||
//_expandButton.gameObject.SetActive(!expand);
|
||||
//_collapseButton.gameObject.SetActive(expand);
|
||||
|
||||
//RefreshLayout();
|
||||
Debug.Log($"[TaskTreeViewItem] RefreshLayout: {expand}");
|
||||
OnExpand.Invoke(expand);
|
||||
RefreshLayout();
|
||||
}
|
||||
|
||||
@@ -129,51 +98,26 @@ namespace BrewMonster.Scripts.Task.UI
|
||||
|
||||
public void RefreshLayout()
|
||||
{
|
||||
var rectTransform = _rectTransform;
|
||||
if (rectTransform == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Force Unity to rebuild layout immediately
|
||||
rectTransform.ForceUpdateRectTransforms();
|
||||
LayoutRebuilder.ForceRebuildLayoutImmediate(rectTransform);
|
||||
|
||||
if (transform.parent &&
|
||||
transform.parent.TryGetComponent<IRefreshLayout>(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("+");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user