306 lines
8.6 KiB
C#
306 lines
8.6 KiB
C#
//------------------------------------------------------------
|
|
// Game Framework
|
|
// Copyright © 2013-2021 Jiang Yin. All rights reserved.
|
|
// Homepage: https://gameframework.cn/
|
|
// Feedback: mailto:ellan@gameframework.cn
|
|
//------------------------------------------------------------
|
|
|
|
using GameFramework.UI;
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
namespace UnityGameFramework.Runtime
|
|
{
|
|
/// <summary>
|
|
/// 界面。
|
|
/// </summary>
|
|
public sealed class UIForm : MonoBehaviour, IUIForm
|
|
{
|
|
private int m_SerialId;
|
|
private string m_UIFormAssetName;
|
|
private IUIGroup m_UIGroup;
|
|
private int m_DepthInUIGroup;
|
|
private bool m_PauseCoveredUIForm;
|
|
private UIFormLogic m_UIFormLogic;
|
|
|
|
/// <summary>
|
|
/// 获取界面序列编号。
|
|
/// </summary>
|
|
public int SerialId
|
|
{
|
|
get
|
|
{
|
|
return m_SerialId;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取界面资源名称。
|
|
/// </summary>
|
|
public string UIFormAssetName
|
|
{
|
|
get
|
|
{
|
|
return m_UIFormAssetName;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取界面实例。
|
|
/// </summary>
|
|
public object Handle
|
|
{
|
|
get
|
|
{
|
|
return gameObject;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取界面所属的界面组。
|
|
/// </summary>
|
|
public IUIGroup UIGroup
|
|
{
|
|
get
|
|
{
|
|
return m_UIGroup;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取界面深度。
|
|
/// </summary>
|
|
public int DepthInUIGroup
|
|
{
|
|
get
|
|
{
|
|
return m_DepthInUIGroup;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取是否暂停被覆盖的界面。
|
|
/// </summary>
|
|
public bool PauseCoveredUIForm
|
|
{
|
|
get
|
|
{
|
|
return m_PauseCoveredUIForm;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取界面逻辑。
|
|
/// </summary>
|
|
public UIFormLogic Logic
|
|
{
|
|
get
|
|
{
|
|
return m_UIFormLogic;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化界面。
|
|
/// </summary>
|
|
/// <param name="serialId">界面序列编号。</param>
|
|
/// <param name="uiFormAssetName">界面资源名称。</param>
|
|
/// <param name="uiGroup">界面所处的界面组。</param>
|
|
/// <param name="pauseCoveredUIForm">是否暂停被覆盖的界面。</param>
|
|
/// <param name="isNewInstance">是否是新实例。</param>
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
public void OnInit(int serialId, string uiFormAssetName, IUIGroup uiGroup, bool pauseCoveredUIForm, bool isNewInstance, object userData)
|
|
{
|
|
m_SerialId = serialId;
|
|
m_UIFormAssetName = uiFormAssetName;
|
|
m_UIGroup = uiGroup;
|
|
m_DepthInUIGroup = 0;
|
|
m_PauseCoveredUIForm = pauseCoveredUIForm;
|
|
|
|
if (!isNewInstance)
|
|
{
|
|
return;
|
|
}
|
|
|
|
m_UIFormLogic = GetComponent<UIFormLogic>();
|
|
if (m_UIFormLogic == null)
|
|
{
|
|
Log.Error("UI form '{0}' can not get UI form logic.", uiFormAssetName);
|
|
return;
|
|
}
|
|
|
|
try
|
|
{
|
|
m_UIFormLogic.OnInit(userData);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnInit with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面回收。
|
|
/// </summary>
|
|
public void OnRecycle()
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnRecycle();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnRecycle with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
|
|
m_SerialId = 0;
|
|
m_DepthInUIGroup = 0;
|
|
m_PauseCoveredUIForm = true;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面打开。
|
|
/// </summary>
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
public void OnOpen(object userData)
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnOpen(userData);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnOpen with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面关闭。
|
|
/// </summary>
|
|
/// <param name="isShutdown">是否是关闭界面管理器时触发。</param>
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
public void OnClose(bool isShutdown, object userData)
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnClose(isShutdown, userData);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnClose with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面暂停。
|
|
/// </summary>
|
|
public void OnPause()
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnPause();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnPause with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面暂停恢复。
|
|
/// </summary>
|
|
public void OnResume()
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnResume();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnResume with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面遮挡。
|
|
/// </summary>
|
|
public void OnCover()
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnCover();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnCover with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面遮挡恢复。
|
|
/// </summary>
|
|
public void OnReveal()
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnReveal();
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnReveal with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面激活。
|
|
/// </summary>
|
|
/// <param name="userData">用户自定义数据。</param>
|
|
public void OnRefocus(object userData)
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnRefocus(userData);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnRefocus with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面轮询。
|
|
/// </summary>
|
|
/// <param name="elapseSeconds">逻辑流逝时间,以秒为单位。</param>
|
|
/// <param name="realElapseSeconds">真实流逝时间,以秒为单位。</param>
|
|
public void OnUpdate(float elapseSeconds, float realElapseSeconds)
|
|
{
|
|
try
|
|
{
|
|
m_UIFormLogic.OnUpdate(elapseSeconds, realElapseSeconds);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnUpdate with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 界面深度改变。
|
|
/// </summary>
|
|
/// <param name="uiGroupDepth">界面组深度。</param>
|
|
/// <param name="depthInUIGroup">界面在界面组中的深度。</param>
|
|
public void OnDepthChanged(int uiGroupDepth, int depthInUIGroup)
|
|
{
|
|
m_DepthInUIGroup = depthInUIGroup;
|
|
try
|
|
{
|
|
m_UIFormLogic.OnDepthChanged(uiGroupDepth, depthInUIGroup);
|
|
}
|
|
catch (Exception exception)
|
|
{
|
|
Log.Error("UI form '[{0}]{1}' OnDepthChanged with exception '{2}'.", m_SerialId, m_UIFormAssetName, exception);
|
|
}
|
|
}
|
|
}
|
|
}
|