geometry-tower-defense/Assets/GameFramework/Scripts/Runtime/UI/UIForm.cs

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);
}
}
}
}