using System;
using System.Collections.Generic;
using UnityEngine;
namespace XGame.Framework.UI
{
///
/// UGUI的实现
///
public class UITree : MonoBehaviour, IUITree, IDisposable
{
[SerializeField]
private UILayerBehaviour _sample;
[SerializeField]
private Camera _uiCamera;
private Dictionary _layerBehaviourMap = new Dictionary();
private void Start()
{
InitLayers();
}
private void InitLayers()
{
Assert.IsNotNull(_sample);
var layerVals = Enum.GetValues(typeof(UILayer));
for (int i = 0; i < layerVals.Length; i++)
{
var layer = (UILayer)layerVals.GetValue(i);
var behaviour = Instantiate(_sample);
behaviour.transform.SetParent(transform, false);
behaviour.Layer = layer;
behaviour.gameObject.SetActive(true);
_layerBehaviourMap[layer] = behaviour;
}
}
#region 接口实现
public Camera Camera => _uiCamera;
public Canvas GetCanvas(UILayer layer)
{
var layerBehaviour = _layerBehaviourMap[layer];
return layerBehaviour.UiCanvas;
}
public void AddPanel(IUIPanel panel)
{
var layerBehaviour = _layerBehaviourMap[panel.Layer];
layerBehaviour.AddPanel(panel);
}
public void SetAsLastSibling(IUIPanel panel)
{
(panel as UIPanel).transform.SetAsLastSibling();
}
public void RemovePanel(IUIPanel panel)
{
var layerBehaviour = _layerBehaviourMap[panel.Layer];
layerBehaviour.RemovePanel(panel);
}
void IDisposable.Dispose()
{
GameObject.Destroy(gameObject);
}
#endregion
}
}