完善菜单功能

This commit is contained in:
shenjianxing 2025-02-19 09:48:26 +08:00
parent 178e12968e
commit ca82f68f37

View File

@ -3,6 +3,7 @@ using UnityEngine.UI;
using XMLTool;
using System.Collections.Generic;
using TMPro;
using UnityEditor.Hardware;
namespace QFramework.Example
{
@ -48,7 +49,7 @@ namespace QFramework.Example
switch (status)
{
case ObjToggleStatus.None:
Utility.FindObj(body.Path).gameObject.SetActive(false);
CheckActive();
foreach (var sub in body.subBody)
{
if (objBtnDataMap.ContainsKey(sub.Value))
@ -56,11 +57,14 @@ namespace QFramework.Example
objBtnDataMap[sub.Value].SetStatus(status);
}
}
SetUpStatus(body, true);
break;
case ObjToggleStatus.Half:
CheckActive();
SetUpStatus(body, false);
break;
case ObjToggleStatus.Full:
Utility.FindObj(body.Path).gameObject.SetActive(true);
CheckActive();
foreach (var sub in body.subBody)
{
if (objBtnDataMap.ContainsKey(sub.Value))
@ -68,35 +72,100 @@ namespace QFramework.Example
objBtnDataMap[sub.Value].SetStatus(status);
}
}
SetUpStatus(body, true);
break;
}
SetUpStatus(body.parent);
RefreshUI();
}
public void SetUpStatus(Body3D.Body body)
public void CheckActive()
{
//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);
//}
switch (status)
{
case ObjToggleStatus.None:
Utility.FindObj(body.Path).SetActive(false);
break;
case ObjToggleStatus.Half:
case ObjToggleStatus.Full:
Utility.FindObj(body.Path).SetActive(true);
break;
}
}
public void RefreshParent(ObjToggleStatus status)
{
this.status = status;
CheckActive();
RefreshUI();
}
public void SetUpStatus(Body3D.Body body, bool needCheck)
{
var parent = body.parent;
if (parent != null && objBtnDataMap.ContainsKey(parent))
{
if (needCheck)
{
bool allOn = true;
bool allNone = true;
// 遍历 body 的子元素 subBody
foreach (var sub in parent.subBody)
{
// 检查 objBtnDataMap 中是否包含当前子元素的值
if (objBtnDataMap.ContainsKey(sub.Value))
{
// 获取当前子元素对应的按钮数据的状态
var status = objBtnDataMap[sub.Value].status;
// 如果当前子元素的状态不是 Full说明不是所有子元素都是 Full 状态
if (status != ObjToggleStatus.Full)
{
allOn = false;
}
// 如果当前子元素的状态不是 None说明不是所有子元素都是 None 状态
if (status != ObjToggleStatus.None)
{
allNone = false;
}
}
else
{
// 如果 objBtnDataMap 中不包含当前子元素的值,说明不是所有状态都符合要求
allOn = false;
allNone = false;
break;
}
}
// 如果所有子元素的状态都是 Full
if (allOn)
{
// 将当前 body 的状态设置为 Full
objBtnDataMap[parent].RefreshParent(ObjToggleStatus.Full);
}
// 如果所有子元素的状态都是 None
else if (allNone)
{
// 将当前 body 的状态设置为 None
objBtnDataMap[parent].RefreshParent(ObjToggleStatus.None);
}
else
{
objBtnDataMap[parent].RefreshParent(ObjToggleStatus.Half);
}
SetUpStatus(parent, true);
}
else
{
if (objBtnDataMap.ContainsKey(parent))
{
objBtnDataMap[parent].SetStatus(ObjToggleStatus.Half);
SetUpStatus(parent, false);
}
}
}
}