- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
175 lines
4.3 KiB
C#
175 lines
4.3 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
//流程中步骤节点控制基类 管理所有的前置和后置步骤 定义步骤激活和步骤完成行为
|
|
public abstract class StepNodeBase : MonoBehaviour
|
|
{
|
|
protected ProcessEnum currentProcess;//流程名称
|
|
[SerializeField]
|
|
protected bool autoFinishedStep;//激活时自动完成的步骤
|
|
|
|
[SerializeField]
|
|
string nodeName;
|
|
/// <summary>
|
|
/// 节点名称
|
|
/// </summary>
|
|
public string NodeName
|
|
{
|
|
get
|
|
{
|
|
return nodeName;
|
|
}
|
|
}
|
|
|
|
//[HideInInspector]
|
|
//节点完成情况
|
|
public NodeFinishState stepState;
|
|
public NodeFinishState StepState
|
|
{
|
|
get
|
|
{
|
|
return stepState;
|
|
}
|
|
}
|
|
|
|
//当前节点激活状态 避免重复激活
|
|
protected NodeActiceState nodeActiceState;
|
|
|
|
public NodeActiceState NodeActiceState
|
|
{
|
|
get
|
|
{
|
|
return nodeActiceState;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 前置节点 所有的前置节点满足后 启动本节点
|
|
/// </summary>
|
|
public List<StepNodeBase> preconditionNodes = new List<StepNodeBase>();
|
|
|
|
/// <summary>
|
|
/// 后置节点 本节点完成后 通知后置节点
|
|
/// </summary>
|
|
public List<StepNodeBase> postpositionNodes = new List<StepNodeBase>();
|
|
|
|
|
|
public event UnityAction NodeFinished;//步骤完成
|
|
// Start is called before the first frame update
|
|
protected virtual void Awake()
|
|
{
|
|
ProcessManager.Instance.AddStep(this);//将操作物体加入当前流程控制器
|
|
}
|
|
|
|
/// <summary>
|
|
/// 前置节点通知完成时
|
|
/// </summary>
|
|
public void PreNodeFinished(StepNodeBase stepNode = null)
|
|
{
|
|
bool hasPNunFinised = false;
|
|
for (int i = 0; i < preconditionNodes.Count; i++)
|
|
{
|
|
if (preconditionNodes[i].StepState == NodeFinishState.unFinished)
|
|
{
|
|
hasPNunFinised = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!hasPNunFinised)//前置节点都完成了 或者没有前置节点
|
|
{
|
|
stepState = NodeFinishState.unFinished;
|
|
Active();
|
|
Debug.Log($"{currentProcess}流程,前置条件均满足,{nodeName}激活");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 开始前先设置 流程 避免某些节点激活时自动完成 导致后续流程异常
|
|
/// </summary>
|
|
/// <param name="processEnum"></param>
|
|
public void SetProcess(ProcessEnum processEnum)
|
|
{
|
|
currentProcess = processEnum;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 流程开始时执行
|
|
/// </summary>
|
|
/// <param name="active"></param>
|
|
public void ProcessStart()
|
|
{
|
|
stepState = NodeFinishState.unFinished;//开始时默认所有的 步骤均为完成
|
|
if (preconditionNodes.Count == 0)//无前置节点流程开始时 直接激活
|
|
{
|
|
//Debug.Log($"{currentProcess}流程开始时{nodeName}激活");
|
|
Active();
|
|
}
|
|
}
|
|
|
|
//流程结束时
|
|
public void ProcessStop()
|
|
{
|
|
UnActive();
|
|
}
|
|
|
|
/// <summary>
|
|
/// 节点激活时执行
|
|
/// </summary>
|
|
protected abstract void Active();
|
|
|
|
/// <summary>
|
|
/// 退出激活状态时执行
|
|
/// </summary>
|
|
protected abstract void UnActive();
|
|
|
|
/// <summary>
|
|
/// 节点行为完成 退出激活状态 通知后续节点 由节点行为结束时调用
|
|
/// </summary>
|
|
protected virtual void NodeFinised()
|
|
{
|
|
Debug.Log(NodeName + "步骤完成");
|
|
stepState = NodeFinishState.finished;
|
|
UnActive();
|
|
NodeFinished?.Invoke();//节点完成事件 通知外部的事件
|
|
ProcessManager.Instance.RecordFinisedStep(NodeName);//通知管理器本节点完成
|
|
//尝试启动后续节点
|
|
for (int i = 0; i < postpositionNodes.Count; i++)
|
|
{
|
|
postpositionNodes[i].PreNodeFinished(this);
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//节点完成状态
|
|
public enum NodeFinishState
|
|
{
|
|
/// <summary>
|
|
/// 已完成
|
|
/// </summary>
|
|
finished,
|
|
|
|
/// <summary>
|
|
/// 未完成
|
|
/// </summary>
|
|
unFinished,
|
|
}
|
|
|
|
/// <summary>
|
|
/// 节点激活状态
|
|
/// </summary>
|
|
public enum NodeActiceState
|
|
{
|
|
/// <summary>
|
|
/// 已激活状态
|
|
/// </summary>
|
|
active,
|
|
|
|
/// <summary>
|
|
/// 未激活状态
|
|
/// </summary>
|
|
unActice,
|
|
}
|