Files
BingoGrassland/Assets/BingoSun/Scripts/Keril/BaseUI.cs
T
2026-04-20 13:49:36 +08:00

500 lines
12 KiB
C#

using FairyGUI;
using System.Collections.Generic;
namespace BingoBrain.Core
{
public abstract class BaseUI
{
#region Field
protected UI MUI;
protected ModuleBoardk ModuleBoardk;
protected ModelDispatcher modelDispatcher;
protected CtrlDispatcher ctrlDispatcher;
protected UICtrlDispatcher uiCtrlDispatcher;
protected DataDispatcher dataDispatcher;
protected GameDispatcher gameDispatcher;
public string uiName;
public string rawGameObjectName;
public string gameObjectName;
public UIInfo uiInfo;
public uint uiOpenCumsumId;
public int currLayer;
public BaseUICtrl baseUICtrl;
public object uiArgs;
public GObject baseGObj;
public GComponent baseUI;
public Window windowUI;
public GGraph uiMask;
public List<SubUI> subUIs;
public bool isOpen;
public bool isVisible;
public bool isClose;
public GTweener openUiGTweener;
public GTweener closeUiGTweener;
#endregion
#region Constructor
public BaseUI()
{
}
public BaseUI(BaseUICtrl baseUICtrl)
{
New(baseUICtrl);
}
public void New(BaseUICtrl baseUICtrl)
{
this.baseUICtrl = baseUICtrl;
Assignment();
OnNew();
Process_Init();
}
protected virtual void Assignment()
{
MUI = UI.Instance;
ModuleBoardk = ModuleBoardk.Instance;
modelDispatcher = ModelDispatcher.Instance;
ctrlDispatcher = CtrlDispatcher.Instance;
uiCtrlDispatcher = UICtrlDispatcher.Instance;
dataDispatcher = DataDispatcher.Instance;
gameDispatcher = GameDispatcher.Instance;
}
protected virtual void UnAssignment()
{
MUI = null;
ModuleBoardk = null;
modelDispatcher = null;
ctrlDispatcher = null;
uiCtrlDispatcher = null;
dataDispatcher = null;
gameDispatcher = null;
}
#endregion
#region Interface: UI
public void Open(object args = null)
{
uiArgs = args;
MUI.Internal_OpenUI(this, args);
}
public void OpenUISequence(object args = null)
{
uiArgs = args;
MUI.Internal_OpenUISequence(this, args);
}
public void Close()
{
if (isClose) return;
MUI.Internal_CloseUI(this);
}
public void Hide()
{
MUI.Internal_HideUI(this);
}
public void Display(object args = null)
{
uiArgs = args;
MUI.Internal_DisplayUI(this, args);
}
#endregion
#region Interface: SubUI
protected SubUI OpenSubUI(string subUiName, string assetName, bool needStandardResolution = false)
{
return OpenSubUI(subUiName, uiInfo.packageName, assetName, needStandardResolution);
}
protected SubUI OpenSubUI(string subUiName, string packageName, string assetName,
bool needStandardResolution = false)
{
return MUI.OpenSubUI(this, subUiName, packageName, assetName, needStandardResolution);
}
protected void CloseSubUI(SubUI subUI)
{
MUI.CloseSubUI(this, subUI);
}
protected void CloseAllSubUI()
{
MUI.CloseAllSubUI(this);
}
#endregion
#region Process
private void Process_Init()
{
isOpen = false;
isVisible = false;
isClose = false;
uiInfo = new UIInfo();
SetUIInfo(uiInfo);
PostProcess_UIInfo();
OnInit();
}
private void PostProcess_UIInfo()
{
}
public void Process_Bind()
{
OnBind();
}
public void Process_OpenBefore(object args)
{
OnOpenBefore(args);
}
public void Process_Open(object args)
{
OnOpen(args);
AddListener();
AddServerListener();
isOpen = true;
}
public void Process_OpenUIAnimEnd()
{
OnOpenUIAnimEnd();
}
public void Process_Close()
{
RemoveListener();
RemoveServerListener();
OnClose();
isClose = true;
}
public void Process_CloseUIAnimEnd()
{
OnCloseUIAnimEnd();
}
public void Process_Destroy()
{
OnDestroy();
UnAssignment();
isOpen = false;
isVisible = false;
isClose = true;
baseGObj = null;
baseUI = null;
windowUI = null;
}
public void Process_Hide()
{
isVisible = false;
baseUI.visible = isVisible;
OnHide();
}
public void Process_Display(object args)
{
isVisible = true;
baseUI.visible = isVisible;
OnDisplay(args);
}
public void ProcessFunc_SwitchLanguage()
{
if (isClose) return;
if (baseUI == null) return;
if (baseUI.isDisposed) return;
InternaProcesslFunc_GComponentSwitchLanguage(baseUI);
OnSwitchLanguage();
}
private void InternaProcesslFunc_GComponentSwitchLanguage(GComponent switchCom)
{
if (switchCom == null) return;
if (switchCom.isDisposed) return;
for (int i = 0; i < switchCom.GetChildrenCount(); i++)
{
GObject gObject = switchCom.GetChildAt(i);
if (gObject == null || gObject.isDisposed) continue;
GComponent childCom = gObject.asCom;
if (childCom != null)
{
InternaProcesslFunc_GComponentSwitchLanguage(childCom);
continue;
}
else
{
if (gObject.packageItem != null) continue;
if (gObject.parent == null) continue;
string text = null;
if (gObject is GTextField)
{
GTextField gTextField = gObject.asTextField;
if (gTextField == null) continue;
if (!gTextField.Ex_IsAutoMultiLang) continue;
text = gObject.Ex_GetMultiLangText();
if (text != null)
{
gTextField.text = text;
continue;
}
}
}
}
}
#endregion
#region Virtual Logic
protected virtual void OnNew()
{
}
protected abstract void SetUIInfo(UIInfo uiInfo);
protected virtual void OnInit()
{
}
protected virtual void OnBind()
{
}
protected virtual void OnOpenBefore(object args)
{
}
protected virtual void OnOpen(object args)
{
}
protected virtual void OnOpenUIAnimEnd()
{
}
protected virtual void OnClose()
{
}
protected virtual void OnCloseUIAnimEnd()
{
}
protected virtual void OnDestroy()
{
}
protected virtual void OnHide()
{
}
protected virtual void OnDisplay(object args)
{
}
public virtual void OnUpdate()
{
}
public virtual void OnSwitchLanguage()
{
}
protected virtual void AddListener()
{
}
protected virtual void RemoveListener()
{
}
protected virtual void AddServerListener()
{
}
protected virtual void RemoveServerListener()
{
}
#endregion
#region Event
protected void AutoBindButtonEvent(EventCallback1 callback)
{
AutoBindButtonEvent(baseUI, callback);
}
protected void AutoBindButtonEvent(GComponent gComponent, EventCallback1 callback)
{
GObject[] gObjects = gComponent.GetChildren();
for (int i = 0; i < gObjects.Length; i++)
{
GObject gObject = gObjects[i];
if (gObject.asButton != null)
{
gObject.onClick.Remove(callback);
gObject.onClick.Add(callback);
continue;
}
GComponent otherGComponent = gObject.asCom;
if (otherGComponent != null)
{
AutoBindButtonEvent(otherGComponent, callback);
continue;
}
}
}
protected void BaseUIClickEvent(GComponent gComponent)
{
}
#endregion
#region Anim
public void KillOpenUIAnim()
{
if (openUiGTweener != null)
{
if (!openUiGTweener.allCompleted)
{
openUiGTweener.Kill(complete: false);
}
openUiGTweener = null;
}
}
public void KillCloseUIAnim()
{
if (closeUiGTweener != null)
{
if (!closeUiGTweener.allCompleted)
{
closeUiGTweener.Kill(complete: false);
}
closeUiGTweener = null;
}
}
#endregion
#region Func
public uint GetOpenUIMsgId()
{
if (uiInfo.openUIMsgId == 0)
{
if (baseUICtrl == null) return 0;
uiInfo.openUIMsgId = baseUICtrl.GetOpenUIMsg(uiName);
}
return uiInfo.openUIMsgId;
}
public uint GetCloseUIMsgId()
{
if (uiInfo.closeUIMsgId == 0)
{
if (baseUICtrl == null) return 0;
uiInfo.closeUIMsgId = baseUICtrl.GetCloseUIMsg(uiName);
}
return uiInfo.closeUIMsgId;
}
public void CtrlCloseUI()
{
if (baseUICtrl == null) return;
baseUICtrl.DispatchCloseUI(uiName);
}
public UILayerType GetCurrRenderLayer()
{
string uiLayer = baseUI.parent.name;
switch (uiLayer)
{
case RyerConst.Background:
return UILayerType.Background;
case RyerConst.Bottom:
return UILayerType.Bottom;
case RyerConst.Normal:
return UILayerType.Normal;
case RyerConst.Top:
return UILayerType.Top;
case RyerConst.FullScreen:
return UILayerType.FullScreen;
case RyerConst.Popup:
return UILayerType.Popup;
case RyerConst.Highest:
return UILayerType.Highest;
case RyerConst.Animation:
return UILayerType.Animation;
case RyerConst.Tips:
return UILayerType.Tips;
case RyerConst.Loading:
return UILayerType.Loading;
case RyerConst.System:
return UILayerType.System;
case RyerConst.NetworkError:
return UILayerType.NetworkError;
default:
return UILayerType.None;
}
}
public int GetCurrRenderQueueIdx()
{
return baseUI.parent.GetChildIndex(baseUI);
}
#endregion
}
}