using UnityEngine; using UnityEngine.UI; using QFramework; using System.Collections.Generic; namespace QFramework { public class ToolDisplayFormData : UIPanelData { public List m_ToolConfigs = new List(); } public partial class ToolDisplayForm : UIPanel { /// /// 包含所有生成的工具元素 /// List m_ToolItemElements = new List(); protected override void ProcessMsg(int eventId, QMsg msg) { throw new System.NotImplementedException(); } protected override void OnInit(IUIData uiData = null) { mData = uiData as ToolDisplayFormData ?? new ToolDisplayFormData(); } protected override void OnOpen(IUIData uiData = null) { mData = uiData as ToolDisplayFormData ?? new ToolDisplayFormData(); HideAllToolItemElements(); if (mData.m_ToolConfigs == null || mData.m_ToolConfigs.Count == 0) { ToolDisplayList.gameObject.SetActive(false); Bottom.gameObject.SetActive(false); return; }else { ToolDisplayList.gameObject.SetActive(true); Bottom.gameObject.SetActive(true); } GenerateToolDisplay(mData.m_ToolConfigs); } protected override void OnShow() { } protected override void OnHide() { } protected override void OnClose() { } private void GenerateToolDisplay(List toolConfigs) { HideAllToolItemElements(); foreach (ToolConfig toolConfig in toolConfigs) { ToolItemElement toolItemElement = GetToolItemElement(); toolItemElement.InitData(toolConfig); toolItemElement.gameObject.SetActive(true); } ToolConent.gameObject.SetActive(GetToolItemElementActiveCount() > 0); Mask.gameObject.SetActive(GetToolItemElementActiveCount() >= 7); } /// /// 获取一个可用的ToolItemElement /// /// private ToolItemElement GetToolItemElement() { ToolItemElement toolItemElement = null; toolItemElement = m_ToolItemElements.Find(t => t.gameObject.activeSelf == false); if (toolItemElement == null) { GameObject toolElement = Instantiate(ToolItemElement.gameObject, Conent.transform); toolItemElement = toolElement.GetComponent(); m_ToolItemElements.Add(toolItemElement); } return toolItemElement; } private void HideAllToolItemElements() { foreach (var item in m_ToolItemElements) { item.gameObject.SetActive(false); } ToolConent.gameObject.SetActive(false); } public int GetToolItemElementActiveCount() { return m_ToolItemElements.FindAll(t => t.gameObject.activeSelf).Count; } } }