- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
168 lines
5.2 KiB
C#
168 lines
5.2 KiB
C#
using UnityEngine;
|
||
|
||
namespace XFramework
|
||
{
|
||
/// <summary>
|
||
/// 所有UI的父类
|
||
/// 用来控制UI的状态
|
||
/// 通过构造函数注入参数时 只能在该面板首次弹出时生效 后续只能通过Change 函数实现 因此除非确保构造函数使用的参数不会发生变化 否则不建议使用有参构造
|
||
/// </summary>
|
||
public abstract class BasePanel
|
||
{
|
||
private Transform activePanel;
|
||
private UIManager uiManager;
|
||
private UIType ui;
|
||
protected GameMain Game { get => GameMain.Instance; }
|
||
/// <summary>
|
||
/// 当前活动面板
|
||
/// </summary>
|
||
public Transform ActivePanel { get => activePanel; set => activePanel = value; }
|
||
public UIType UI { get => ui;}
|
||
//更新面板数据类
|
||
public BasePanel(UIType ui)
|
||
{
|
||
this.ui = ui;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 初始化面板管理器
|
||
/// </summary>
|
||
/// <param name="manager"></param>
|
||
public void Initializa(UIManager manager)
|
||
{
|
||
uiManager = manager;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 推入一个面板
|
||
/// 重复推入的面板 只保留首次推入的实例引用
|
||
/// </summary>
|
||
/// <param name="newPanel"></param>
|
||
public BasePanel Push(BasePanel newPanel)
|
||
{
|
||
return uiManager?.Push(newPanel);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 隐藏一个面板
|
||
/// </summary>
|
||
public void Pop()
|
||
{
|
||
uiManager?.Pop();
|
||
}
|
||
|
||
/// <summary>
|
||
/// 用于初始化
|
||
/// 在UI销毁之前只会执行一次
|
||
/// 默认UI不会销毁该方法只执行一次
|
||
/// 可重写OnDestory实现销毁改变本方法执行时机
|
||
/// </summary>
|
||
protected abstract void InitEvent();
|
||
|
||
|
||
/// <summary>
|
||
/// 每次推出一个面板执行的操作 被push时执行
|
||
/// </summary>
|
||
public virtual void OnStart()
|
||
{
|
||
activePanel.PanelAppearance(true);
|
||
activePanel.SetSiblingIndex(activePanel.parent.childCount - 1);
|
||
if (!ui.Init)
|
||
{
|
||
InitEvent();
|
||
ui.Init = true;
|
||
}
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 退出时执行的操作 被pop时执行
|
||
/// isDestroy默认值为false,表示不销毁对象
|
||
/// 频繁销毁和生成是比较消耗性能的,如果非必要情况建议使isDestroy为false
|
||
/// </summary>
|
||
/// <param name="isDestroy">是否销毁</param>
|
||
public virtual void OnDestroy(bool isDestroy = false)
|
||
{
|
||
uiManager?.DestroyUI(ui, isDestroy);
|
||
}
|
||
|
||
/// <summary>
|
||
/// 每次激活时执行的操作
|
||
/// 只有被覆盖后 接触覆盖才会执行
|
||
/// </summary>
|
||
public virtual void OnEnable()
|
||
{
|
||
activePanel.GetOrAddComponent<CanvasGroup>().blocksRaycasts = true;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 每次失去激活时执行的操作
|
||
/// 比如新推出了一个面板导致本面板被覆盖,当前面板就会执行此方法
|
||
/// </summary>
|
||
public virtual void OnDisable()
|
||
{
|
||
activePanel.GetOrAddComponent<CanvasGroup>().blocksRaycasts = false;
|
||
}
|
||
|
||
|
||
|
||
/// <summary>
|
||
/// 改变该面板的变量
|
||
/// 如果在执行OnDestroy时isDestroy值为false
|
||
/// 并且有些Panel类需要在new的时候传递参数
|
||
/// 那么就需要使用此方法将新new的类的参数传递给以前的类
|
||
///
|
||
/// </summary>
|
||
/// <param name="newPanel">新的面板</param>
|
||
public virtual void Change(object newData)
|
||
{
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 引用类型的数据 避免拆装箱
|
||
/// </summary>
|
||
/// <param name="newData"></param>
|
||
public virtual void Change(float newData)
|
||
{
|
||
|
||
}
|
||
|
||
/// <summary>
|
||
/// 当一个面板可能有多种参数且多种参数发生变化时间不一致时 使用该方法指定参数类型
|
||
/// </summary>
|
||
/// <param name="msgType"></param>
|
||
/// <param name="value"></param>
|
||
public virtual void Change(string msgType, object value)
|
||
{
|
||
|
||
}
|
||
|
||
///// <summary>
|
||
///// 为下一面板注入参数时调用
|
||
///// </summary>
|
||
///// <param name="data"></param>
|
||
//public virtual void ChangeNextPanel(float data)
|
||
//{
|
||
// uiManager.ChangePanel(data);
|
||
//}
|
||
|
||
//public virtual void ChangeNextPanel(object data)
|
||
//{
|
||
// uiManager.ChangePanel(data);
|
||
//}
|
||
|
||
/// <summary>
|
||
/// 显示提示文字
|
||
/// </summary>
|
||
/// <param name="text">文字信息</param>
|
||
/// <param name="textColor">文字颜色</param>
|
||
/// <param name="anchorePos">文字位置---当前预制件以屏幕中心为锚点</param>
|
||
public virtual void ShowPromoptText(string text,Color textColor,Vector2 anchorePos)
|
||
{
|
||
ResourcesCreater.InstantiatePrefab("Text_dynamicPrompt",activePanel.transform).GetComponent<DynamicText>().ShowPromptText(text,textColor, anchorePos);
|
||
}
|
||
|
||
}
|
||
}
|