using UnityEngine; using UnityEngine.UI; using XMLTool; using System.Collections.Generic; using TMPro; using System.Drawing; using UnityEngine.Assertions.Must; namespace QFramework.Example { public class UIBody3DMenuTreeData : UIPanelData { public Body3D.Body body; } public partial class UIBody3DMenuTree : UIPanel { class ObjBtnData { public Button btn; public Body3D.Body body; public ObjToggleStatus status; public Dictionary objBtnDataMap = new Dictionary(); public ObjBtnData(Dictionary objBtnDataMap, Button btn, Body3D.Body body) { this.objBtnDataMap = objBtnDataMap; this.btn = btn; this.body = body; btn.onClick.AddListener(() => { switch (status) { case ObjToggleStatus.None: case ObjToggleStatus.Half: SetStatus(ObjToggleStatus.Full); break; case ObjToggleStatus.Full: SetStatus(ObjToggleStatus.None); break; } }); } public void SetStatus(ObjToggleStatus status) { this.status = status; RefreshStatus(); } public void RefreshStatus() { switch (status) { case ObjToggleStatus.None: Utility.FindObj(body.Path).gameObject.SetActive(false); foreach (var sub in body.subBody) { if (objBtnDataMap.ContainsKey(sub.Value)) { objBtnDataMap[sub.Value].SetStatus(status); } } break; case ObjToggleStatus.Half: break; case ObjToggleStatus.Full: Utility.FindObj(body.Path).gameObject.SetActive(true); foreach (var sub in body.subBody) { if (objBtnDataMap.ContainsKey(sub.Value)) { objBtnDataMap[sub.Value].SetStatus(status); } } break; } SetUpStatus(body.parent); RefreshUI(); } public void SetUpStatus(Body3D.Body body) { //if (body != null) //{ // foreach (var sub in body.subBody) // { // if (objBtnDataMap.ContainsKey(sub.Value)) // { // objBtnDataMap[sub.Value] // } // } //} //if (objBtnDataMap.ContainsKey(body)) //{ // objBtnDataMap[body].SetStatus(this.status); //} //if (body.parent != null) //{ // SetUpStatus(body.parent); //} } public void RefreshUI() { switch (status) { case ObjToggleStatus.None: btn.transform.Find("Full").gameObject.SetActive(false); btn.transform.Find("Half").gameObject.SetActive(false); break; case ObjToggleStatus.Half: btn.transform.Find("Full").gameObject.SetActive(false); btn.transform.Find("Half").gameObject.SetActive(true); break; case ObjToggleStatus.Full: btn.transform.Find("Full").gameObject.SetActive(true); btn.transform.Find("Half").gameObject.SetActive(false); break; } } } /// /// ���������ť��˵���ť�Ķ�Ӧ /// Dictionary searchItemMap = new Dictionary(); Dictionary objBtnDataMap = new Dictionary(); enum ObjToggleStatus { None, Half, Full } protected override void OnInit(IUIData uiData = null) { // please add init code here Close.onClick.AddListener(() => { Hide(); UIKit.OpenPanelAsync().ToAction().StartGlobal(); }); Input.onSelect.AddListener(str => { Debug.LogError("onSelect:" + str); SearchContent.gameObject.SetActive(true); Content.gameObject.SetActive(false); }); Input.onEndEdit.AddListener(str => { Debug.LogError("onEndEdit:" + str); if (string.IsNullOrEmpty(str)) { SearchContent.gameObject.SetActive(false); Content.gameObject.SetActive(true); SearchContent.RemoveAllChildren(); } else { SearchContent.gameObject.SetActive(true); Content.gameObject.SetActive(false); RefreshSearchContent(str); } }); } protected override void OnOpen(IUIData uiData = null) { mData = uiData as UIBody3DMenuTreeData ?? new UIBody3DMenuTreeData(); Content.RemoveAllChildren(); BuildTreeUI(mData.body); } private void BuildTreeUI(Body3D.Body data, int depth = 0, Transform parent = null) { foreach (var bodyPair in data.subBody) { Body3D.Body body = bodyPair.Value; // ȷ�������� Transform targetParent = parent != null ? parent : Content; // ����Toggle GameObject toggleObj = GameObject.Instantiate(Item.gameObject, targetParent); toggleObj.name = body.Name; Toggle uiToggle = toggleObj.transform.Find("ToggleContent/UI").GetComponent(); Button objBtn = toggleObj.transform.Find("ToggleContent/Obj").GetComponent