using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using CaoCao.Runtime;
using CaoCao.XAsset;
using UnityEngine.EventSystems;
using Game;
public enum eUINodeType
{
NodeBg = 0, // 游戏根层显示, 主要用来显示背景贴图
NodeScreen, // 全屏UI, 比如主场景的主UI, 战斗场景战斗UI.
NodeUI, // 功能UI等
NodeUIMidle, // 功能UI(中间层)等 以防止某些UI放于tip层 loading层的情况
NodeUITop, // 功能UI(最上层)等 以防止某些UI放于tip层 loading层的情况
NodeLoading, // 加载界面层
NodeTip, // 提示层
}
///
/// 为了兼容异步加载的问题定义的数据结构
///
public class CustomUserData
{
public UIBase ui;
public Type mType;
public string uiName;
public Transform tfParent;
public AssetBundle descBundle;
public object[] userData;
}
///
/// UIManager
/// UI管理器
/// 常用方法:
/// UIMgr.Instance.Open() 显示某个UI
/// UIMgr.Instance.OpenInChild() 在某个结点下显示UI
/// UIMgr.Instance.GetUI() 获取某个打开的UI实例
/// UIMgr.Instance.GetTopUI() 获取最外层UI
/// UIMgr.Instance.Hide() 隐藏某个UI
/// UIMgr.Instance.HideAll() 隐藏所有UI
/// UIMgr.Instance.CloseUI() 销毁某个UI
/// UIMgr.Instance.CloseUI(UIBase _ui) 销毁某个UI
/// UIMgr.Instance.Clean() 销毁所有UI
/// UIMgr.Instance.CleanExceptLoading() 销毁除LoadingUI外的所有UI
/// UIMgr.Instance.MoveRootUp() 移动UI上下位置
///
public class UIMgr : GameComponent
{
public static UIMgr Instance;
public static readonly string UIPrefabRootPath = "Assets/GameAssets/Prefabs/UI"; // UI Prefab根目录
public static readonly string UIPathConfigFile = "Assets/GameAssets/TextAssets/UIMgrPath.json"; // UI Prefab资源路径文件名
public Transform m_NodeBg; // 背景层
public Transform m_NodeScreen; // 全屏UI层, 比如主场景的主UI, 战斗场景战斗UI. 人物信息, 血条, 主界面的小地图等等
public Transform m_NodeUI; // UI层, 功能层. 比如强化, 宠物等
public Transform m_NodeUIMidle; // UI层, 功能层. 比如强化, 宠物等 功能UI,(中间层)等 以防止某些UI放于tip层 loading层的情况
public Transform m_NodeUITop; // UI层, 功能层. 比如强化, 宠物等 功能UI,(最上层)等 以防止某些UI放于tip层 loading层的情况
public Transform m_NodeLoading; // 加载界面层
public Transform m_NodeTip; // 弹窗提示层
public RectTransform m_RtfShelter; // 遮挡 用于4:3屏幕适配
private Transform m_NodeUIChildTop; // UI顶层
private static UIBase mTopUI; // 当前最外层UI
private List _unAudioList; //不播放声音UI
private static Dictionary m_UIDic;
public static Dictionary UIDic
{
get
{
if (m_UIDic == null)
m_UIDic = new Dictionary();
return m_UIDic;
}
}
// 同步方式 保留
private static Dictionary m_AllUIPath;
public static Dictionary AllUIPath
{
get
{
if (m_AllUIPath == null)
{
m_AllUIPath = new Dictionary();
m_AllUIPath = UIMgrPath.GetDic();
}
return m_AllUIPath;
}
}
public static Dictionary m_TypeParent;
private RawImage m_imgBg;
public Camera m_camera;
public Canvas m_Canvas;
public RectTransform m_CanvasRect;
private bool m_isScreenClip; // 屏幕是否用黑边裁剪了
public bool IsScreenClip
{
get { return m_isScreenClip; }
set { m_isScreenClip = true; }
}
//public Type hotResources = null;
//private float _checkRemoveTime;
protected override void Awake()
{
base.Awake();
Instance = this;
//DontDestroyOnLoad(this);
m_camera = transform.Find("Camera").GetComponent();
m_Canvas = transform.Find("Canvas").GetComponent