2025-04-21 21:14:23 +08:00

224 lines
6.6 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using UnityEngine;
using Object = UnityEngine.Object;
namespace Launcher
{
/// <summary>
/// 热更界面加载管理器。
/// </summary>
public static class LauncherMgr
{
private static Transform _uiRoot;
private static readonly Dictionary<string, string> _uiList = new Dictionary<string, string>();
private static readonly Dictionary<string, UIBase> _uiMap = new Dictionary<string, UIBase>();
/// <summary>
/// 初始化根节点。
/// </summary>
public static void Initialize()
{
_uiRoot = GameObject.Find("UIRoot/UICanvas")?.transform;
if (_uiRoot == null)
{
Debug.LogError("Failed to Find UIRoot. Please check the resource path");
return;
}
RegisterUI();
}
public static void RegisterUI()
{
UIDefine.RegisterUI(_uiList);
}
/// <summary>
/// show ui
/// </summary>
/// <param name="uiInfo">对应的ui的名称。</param>
/// <param name="param">参数。</param>
public static void Show(string uiInfo, object param = null)
{
if (string.IsNullOrEmpty(uiInfo))
{
return;
}
if (!_uiList.ContainsKey(uiInfo))
{
Debug.LogError($"not define ui:{uiInfo}");
return;
}
GameObject ui = null;
if (!_uiMap.ContainsKey(uiInfo))
{
Object obj = Resources.Load(_uiList[uiInfo]);
if (obj != null)
{
ui = Object.Instantiate(obj) as GameObject;
if (ui != null)
{
ui.transform.SetParent(_uiRoot.transform);
ui.transform.localScale = Vector3.one;
ui.transform.localPosition = Vector3.zero;
RectTransform rect = ui.GetComponent<RectTransform>();
rect.sizeDelta = Vector2.zero;
}
}
UIBase component = ui.GetComponent<UIBase>();
if (component != null)
{
_uiMap.Add(uiInfo, component);
}
}
_uiMap[uiInfo].gameObject.SetActive(true);
if (param != null)
{
UIBase component = _uiMap[uiInfo].GetComponent<UIBase>();
if (component != null)
{
component.OnEnter(param);
}
}
}
/// <summary>
/// 隐藏ui对象。
/// </summary>
/// <param name="uiName">对应的ui的名称。</param>
public static void Hide(string uiName)
{
if (string.IsNullOrEmpty(uiName))
{
return;
}
if (!_uiMap.TryGetValue(uiName, out var ui))
{
return;
}
ui.gameObject.SetActive(false);
Object.DestroyImmediate(_uiMap[uiName].gameObject);
_uiMap.Remove(uiName);
}
/// <summary>
/// 获取显示的ui对象。
/// </summary>
/// <param name="uiName">对应的ui的名称。</param>
/// <returns></returns>
public static UIBase GetActiveUI(string uiName)
{
return _uiMap.GetValueOrDefault(uiName);
}
/// <summary>
/// 隐藏所有热更相关UI。
/// </summary>
public static void HideAll()
{
foreach (var item in _uiMap)
{
if (item.Value && item.Value.gameObject)
{
Object.Destroy(item.Value.gameObject);
}
}
_uiMap.Clear();
}
#region
/// <summary>
/// 显示提示框,目前最多支持三个按钮
/// </summary>
/// <param name="desc">描述</param>
/// <param name="showtype">类型MessageShowType</param>
/// <param name="style">StyleEnum</param>
/// <param name="onOk">点击事件</param>
/// <param name="onCancel">取消事件</param>
/// <param name="onPackage">更新事件</param>
public static void ShowMessageBox(string desc, MessageShowType showtype = MessageShowType.OneButton,
LoadStyle.StyleEnum style = LoadStyle.StyleEnum.Style_Default,
Action onOk = null,
Action onCancel = null,
Action onPackage = null)
{
LauncherMgr.Show(UIDefine.UILoadTip, desc);
var ui = LauncherMgr.GetActiveUI(UIDefine.UILoadTip) as UILoadTip;
if (ui == null)
{
return;
}
ui.OnOk = onOk;
ui.OnCancel = onCancel;
ui.Showtype = showtype;
ui.OnEnter(desc);
var loadStyleUI = ui.GetComponent<LoadStyle>();
if (loadStyleUI)
{
loadStyleUI.SetStyle(style);
}
}
/// <summary>
/// 刷新UI版本号。
/// </summary>
/// <param name="appId">AppID。</param>
/// <param name="resId">资源ID。</param>
public static void RefreshVersion(string appId, string resId)
{
LauncherMgr.Show(UIDefine.UILoadUpdate);
var ui = LauncherMgr.GetActiveUI(UIDefine.UILoadUpdate) as UILoadUpdate;
if (ui == null)
{
return;
}
ui.OnRefreshVersion(appId, resId);
}
/// <summary>
/// 更新UI文本。
/// </summary>
/// <param name="label">文本ID。</param>
public static void UpdateUILabel(string label)
{
LauncherMgr.Show(UIDefine.UILoadUpdate);
var ui = LauncherMgr.GetActiveUI(UIDefine.UILoadUpdate) as UILoadUpdate;
if (ui == null)
{
return;
}
ui.OnEnter(label);
}
/// <summary>
/// 更新UI进度。
/// </summary>
/// <param name="progress">当前进度。</param>
public static void UpdateUIProgress(float progress)
{
LauncherMgr.Show(UIDefine.UILoadUpdate);
var ui = LauncherMgr.GetActiveUI(UIDefine.UILoadUpdate) as UILoadUpdate;
if (ui == null)
{
return;
}
ui.OnUpdateUIProgress(progress);
}
#endregion
}
}