using System;
using System.Collections.Generic;
using System.Globalization;
using System.Reflection;
using Core.Audio;
using Core.Event.Event;
using Core.UI.UTool;
using Fort23.Core;
using Fort23.UTool;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using Utility;
using EventSystem = UnityEngine.EventSystems.EventSystem;
namespace Fort23.Mono
{
public enum UILayer
{
Bottom, //最底层UI(主界面)
Middle, //中间UI(各种Panel)
Top, //最顶层UI节点
Loading, // 加载界面
}
///
/// 销毁类型
///
public enum UIDestroyType
{
DelayDestroy,
ImmediatelyDestroy,
NotDestroy,
}
///
/// 如果有同时弹出多个UI界面冲突的地方,推荐用async/await的方法一次操作,这样就不用单独去为了适配打开多个UI的需求而改动太多的代码(主要是这样改动会牺牲大部分情况下的性能)
///
public class UIManager : Entity
{
public static UIManager Instance { get; set; }
public readonly Material uiGray = new Material(Shader.Find("MyShader/UIImageGray"));
// public RectTransform UIRootTransform;
public Vector2 sizeDelta;
public EventSystem current;
///
/// 父节点(InitClip)
///
private Transform _parent;
///
/// 所有展示BG的ui
///
public List AllShowBGUIs = new List();
///
/// 顶部ui列表 可以通过导航栏跳转的界面
///
public List TopUIPanels = new List();
///
/// 所有top层ui
///
public List NoFocusTopUIPanels = new List();
///
/// 预先定好的几个层,数量和UILayer对应
///
// public Canvas[] canvases = new Canvas[3];
public Camera UICamera;
public Canvas Canvas;
public Transform[] UILayers = new Transform[4];
///
/// 当前打开的ui
///
public UIPanel currOpenPanel;
///
/// UI布局大小
///
private Vector2 UIScale;
private BetterList _lastShowPanel = new BetterList();
private Graphic currDeapthGraphic;
///
/// 需要销毁的UI
///
public Dictionary destroyUI = new Dictionary();
public CustomCameraStack CurrCustomCameraStack
{
get { return _currCustomCameraStack; }
set
{
_currCustomCameraStack = value;
RefreshFull();
}
}
public void CleanLastShowPanel()
{
_lastShowPanel.Clear();
}
private CustomCameraStack _currCustomCameraStack;
///
/// 屏蔽字库
///
public string MaskWordData;
///
/// 展示文字提示长度
///
public int ShowTextCount;
///
/// 展示文字提示最大长度
///
public int ShowTextMaxCount = 1;
///
/// 上一个界面
///
public UIPanel LastUIPanel;
[CustomMethod(CustomMethodType.Awake)]
public async void Awake(Transform parent)
{
Instance = this;
_parent = parent;
}
public async CTask InitUI()
{
UGUIIamgeTool.SpriteLoad = new UISpriteLoad();
if (Canvas == null)
{
AssetHandle assetBundle =
await AssetBundleLoadManager.Instance.LoadAssetAsyncTask("Canvas.prefab");
GameObject prefab = assetBundle.AssetObject();
prefab.SetActive(false);
// UIRootTransform = prefab.GetComponent();
sizeDelta = prefab.GetComponent().sizeDelta;
// if (1.0f * Screen.width / Screen.height < 1334f / 750f)
// {
// sizeDelta = new Vector2(1334, 750);
// }
// return;
Canvas = prefab.GetComponent