2
0
Fork 0
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
3.6 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
using FairyGUI;
using Articy.Unity;
namespace Game
{
public interface IUIPageBase
{
void Update();
void FixedUpdate();
void Destroy();
void Create(EuiPage pageType);
void Open(params object[] values);
void Close();
bool IsActive();
bool IsFullPage();
List<EuiPage> GetSubPages();
void AddSubPage(EuiPage subPage);
void RemoveSubPage(EuiPage subPage);
void RemoveSubPageAll();
}
public class UIPageBase<T> : MetaDataHandler, IUIPageBase where T : GComponent, new()
{
protected T View;
private EuiPage _mPageType;
private bool _isFullScreenUI;
private readonly List<EuiPage> _subPageList;
protected UIPageBase()
{
_subPageList = new List<EuiPage>();
}
public virtual void Update()
{
}
public virtual void FixedUpdate()
{
}
public bool IsActive()
{
return View.visible;
}
public bool IsFullPage()
{
return _isFullScreenUI;
}
protected virtual void OnInput(PPlayerInput context)
{
}
protected virtual void OnDestroy()
{
}
protected virtual void OnCreate()
{
}
protected virtual void OnOpen()
{
}
protected virtual void OnOpen(params object[] values)
{
}
protected virtual void OnClose()
{
}
public void Create(EuiPage pageType)
{
_mPageType = pageType;
OnCreate();
}
public void Destroy()
{
OnDestroy();
}
public void Open(params object[] values)
{
View.visible = true;
EventManager.Instance.AddEvent<PPlayerInput>(EEvent.PlayerInput, OnInput);
if (values.Length > 0)
{
OnOpen(values);
}
else
{
OnOpen();
}
CreateBind();
}
public void Close()
{
View.visible = false;
EventManager.Instance.RemoveEvent<PPlayerInput>(EEvent.PlayerInput, OnInput);
ClearBind();
OnClose();
}
protected void CreateUI(bool isFull = false)
{
View = (T)typeof(T).GetMethod("CreateInstance")?.Invoke(null, null);
if (View == null) return;
View.sortingOrder = (int)_mPageType;
View.fairyBatching = true;
_isFullScreenUI = isFull;
GRoot.inst.AddChild(View);
}
public List<EuiPage> GetSubPages()
{
return _subPageList;
}
public void AddSubPage(EuiPage subPage)
{
_subPageList.Add(subPage);
}
public void RemoveSubPage(EuiPage subPage)
{
_subPageList.Remove(subPage);
}
public void RemoveSubPageAll()
{
_subPageList.Clear();
}
protected Vector3 GetScreenPos(Vector3 pos)
{
return CameraManager.Instance.GetScreenPos(pos);
}
protected NTexture Texture(ArticyObject icon)
{
var texture = Util.LoadDraft<Texture2D>(icon);
return new NTexture(texture);
}
}
}