using System;
using System.Collections.Generic;
using AlicizaX.Runtime;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.UI;
using Object = UnityEngine.Object;
namespace AlicizaX.UI.Runtime
{
public abstract partial class UIWindow : UIBase
{
internal Canvas _canvas;
internal Canvas[] _childCanvas;
internal GraphicRaycaster _raycaster;
internal GraphicRaycaster[] _childRaycaster;
public override string AssetName
{
get => gameObject.name;
}
private bool mVisible;
public override bool Visible
{
get
{
if (_canvas != null)
{
return _canvas.gameObject.layer == UIComponent.WINDOW_SHOW_LAYER;
}
else
{
return false;
}
}
set
{
if (value == mVisible)
{
return;
}
if (value)
{
OnRegisterEvent();
}
else
{
RemoveAllUIEvent();
}
mVisible = value;
if (_canvas != null)
{
int setLayer = value ? UIComponent.WINDOW_SHOW_LAYER : UIComponent.WINDOW_HIDE_LAYER;
if (_canvas.gameObject.layer == setLayer)
return;
_canvas.gameObject.layer = setLayer;
for (int i = 0; i < _childCanvas.Length; i++)
{
_childCanvas[i].gameObject.layer = setLayer;
}
Interactable = value;
}
}
}
private bool Interactable
{
get
{
if (_raycaster != null)
{
return _raycaster.enabled;
}
else
{
return false;
}
}
set
{
if (_raycaster != null)
{
_raycaster.enabled = value;
for (int i = 0; i < _childRaycaster.Length; i++)
{
_childRaycaster[i].enabled = value;
}
}
}
}
///
/// 窗口深度值。
///
public int Depth
{
get
{
if (_canvas != null)
{
return _canvas.sortingOrder;
}
else
{
return 0;
}
}
set
{
if (_canvas != null)
{
if (_canvas.sortingOrder == value)
{
return;
}
// 设置父类
_canvas.sortingOrder = value;
// 设置子类
int depth = value;
for (int i = 0; i < _childCanvas.Length; i++)
{
var canvas = _childCanvas[i];
if (canvas != _canvas)
{
depth += 5; //注意递增值
canvas.sortingOrder = depth;
}
}
}
}
}
internal void InternalCreate(GameObject panel)
{
if (panel == null)
{
return;
}
panel.name = GetType().Name;
gameObject = panel;
panel.transform.localPosition = Vector3.zero;
rectTransform.pivot = new Vector2(0.5f, 0.5f);
rectTransform.anchorMin = Vector2.zero;
rectTransform.anchorMax = Vector2.one;
rectTransform.offsetMin = Vector2.zero;
rectTransform.offsetMax = Vector2.zero;
rectTransform.localScale = Vector3.one;
// 获取组件
_canvas = panel.GetComponent