com.soviby.unity.ui.ugui-to.../Assets/Editor/Manager/EntityManager.cs

99 lines
3.3 KiB
C#
Raw Normal View History

2024-10-23 17:30:59 +00:00
#if UNITY_EDITOR
2024-10-28 16:31:38 +00:00
using System.Collections.Generic;
2024-10-23 17:30:59 +00:00
using UnityEngine;
namespace UguiToolkit.Editor
{
2024-10-28 16:31:38 +00:00
[ExecuteAlways]
2024-10-23 17:30:59 +00:00
public class EntityManager : MonoBehaviour, IManager
{
private PanelCache m_panelCache;
private Transform entityRoot;
2024-10-28 16:31:38 +00:00
private List<ImageEntity> imageEntities;
private List<TextEntity> textEntities;
private void Start()
{
GlobalManager.Instance.OnShowHierarchyOfEntityChange += UpdateHierarchyOfEntityAllEntity;
}
private void OnDestroy()
{
GlobalManager.Instance.OnShowHierarchyOfEntityChange -= UpdateHierarchyOfEntityAllEntity;
}
2024-10-23 17:30:59 +00:00
public void InitAllEntity(PanelCache panelCache)
{
this.m_panelCache = panelCache;
// 创建所有实例
CreateAllEntity();
}
2024-10-28 16:31:38 +00:00
private void UpdateHierarchyOfEntityAllEntity(bool show)
{
UpdateHierarchyOfEntity(show, entityRoot.gameObject);
foreach (var entity in imageEntities) UpdateHierarchyOfEntity(show, entity.gameObject);
foreach (var entity in textEntities) UpdateHierarchyOfEntity(show, entity.gameObject);
}
private void UpdateHierarchyOfEntity(in bool show, in GameObject entity)
{
EntityHelper.UpdateHierarchyOfEntity(show, entity.gameObject);
EntityHelper.UpdateSceneVisibilityOfEntity(show, entity.gameObject);
}
2024-10-23 17:30:59 +00:00
private void CreateAllEntity()
{
if (this.m_panelCache == null) return;
var go = new GameObject();
2024-10-28 16:31:38 +00:00
UpdateHierarchyOfEntity(false, go);
2024-10-23 17:30:59 +00:00
entityRoot = go.transform;
entityRoot.SetParent(transform);
entityRoot.localPosition = Vector3.zero;
entityRoot.localRotation = Quaternion.identity;
entityRoot.localScale = Vector3.one;
2024-10-28 16:31:38 +00:00
imageEntities = new(m_panelCache.layoutInfo.Count);
textEntities = new(m_panelCache.layoutInfo.Count);
foreach (var elementInfo in m_panelCache.GetLayoutElementInfos<LayoutInfo.ElementInfo>())
2024-10-23 17:30:59 +00:00
{
2024-10-28 16:31:38 +00:00
var imgInfo = elementInfo as LayoutInfo.ImageInfo;
if (imgInfo != null) // Image
{
go = new GameObject();
var entity = go.AddComponent<ImageEntity>();
entity.transform.SetParent(entityRoot);
entity.transform.SetSiblingIndex(0);
2024-10-23 17:30:59 +00:00
2024-10-28 16:31:38 +00:00
entity.SetData(imgInfo);
entity.InitPreviewImage();
imageEntities.Add(entity);
UpdateHierarchyOfEntity(false, entity.gameObject);
continue;
}
var textInfo = elementInfo as LayoutInfo.TextInfo;
if (textInfo != null) // Text
{
go = new GameObject();
var entity = go.AddComponent<TextEntity>();
entity.transform.SetParent(entityRoot);
entity.transform.SetSiblingIndex(0);
entity.SetData(textInfo);
entity.InitPreviewText();
2024-10-23 17:30:59 +00:00
2024-10-28 16:31:38 +00:00
textEntities.Add(entity);
UpdateHierarchyOfEntity(false, entity.gameObject);
continue;
}
}
2024-10-23 17:30:59 +00:00
}
}
}
#endif