124 lines
4.1 KiB
C#
124 lines
4.1 KiB
C#
using System.Collections.Generic;
|
|
using MotionFramework;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace DefaultNamespace.ProcessMode
|
|
{
|
|
[ScriptDescription("流程模式管理器")]
|
|
public class AnimationProcessManager : MonoBehaviour
|
|
{
|
|
private Dictionary<string, AnimationProcess> processes; // 存储不同类型流程的字典
|
|
public ProcessMode currentMode; // 当前模式
|
|
private int currentStepIndex; // 当前步骤索引
|
|
private ProcessUIManager uiManager; // 引用UIManager实例
|
|
|
|
/// <summary>
|
|
/// 构造函数
|
|
/// </summary>
|
|
/// <param name="uiManager">UIManager实例</param>
|
|
public AnimationProcessManager(ProcessUIManager uiManager)
|
|
{
|
|
this.uiManager = uiManager;
|
|
processes = new Dictionary<string, AnimationProcess>();
|
|
InitializeProcesses(); // 初始化流程
|
|
currentStepIndex = 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 初始化所有流程
|
|
/// </summary>
|
|
private void InitializeProcesses()
|
|
{
|
|
AddProcess("Teaching"); // 添加教学流程
|
|
AddProcess("Training"); // 添加培训流程
|
|
AddProcess("Practice"); // 添加练习流程
|
|
AddProcess("Assessment"); // 添加考核流程
|
|
}
|
|
|
|
/// <summary>
|
|
/// 添加一个新的流程
|
|
/// </summary>
|
|
/// <param name="type">流程类型</param>
|
|
public void AddProcess(string type)
|
|
{
|
|
if (!processes.ContainsKey(type))
|
|
{
|
|
processes[type] = new AnimationProcess(type);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 向指定类型的流程中添加步骤
|
|
/// </summary>
|
|
/// <param name="type">流程类型</param>
|
|
/// <param name="step">要添加的步骤</param>
|
|
public void AddStepToProcess(string type, AnimationStep step)
|
|
{
|
|
if (processes.ContainsKey(type))
|
|
{
|
|
processes[type].AddStep(step);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取指定类型流程的总评分
|
|
/// </summary>
|
|
/// <param name="type">流程类型</param>
|
|
/// <returns>总评分</returns>
|
|
public float GetTotalScoreForProcess(string type)
|
|
{
|
|
if (processes.ContainsKey(type))
|
|
{
|
|
return processes[type].CalculateTotalScore();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 处理用户点击事件
|
|
/// </summary>
|
|
/// <param name="clickedObject">被点击的对象</param>
|
|
public void HandleClick(GameObject clickedObject)
|
|
{
|
|
string type = currentMode.ToString();
|
|
|
|
if (processes.ContainsKey(type))
|
|
{
|
|
AnimationProcess process = processes[type];
|
|
|
|
if (currentStepIndex < process.Steps.Count)
|
|
{
|
|
AnimationStep step = process.Steps[currentStepIndex];
|
|
|
|
if (step.CorrectObject == clickedObject)
|
|
{
|
|
step.PlayAnimation();
|
|
|
|
switch (currentMode)
|
|
{
|
|
case ProcessMode.Teaching:
|
|
uiManager.HighlightNextStep(step); // 高亮下一个步骤
|
|
break;
|
|
case ProcessMode.Training:
|
|
uiManager.ShowTrainingStep(step); // 显示培训步骤
|
|
break;
|
|
case ProcessMode.Practice:
|
|
uiManager.ShowPracticeStep(step); // 显示练习步骤
|
|
break;
|
|
case ProcessMode.Assessment:
|
|
// 无提示
|
|
break;
|
|
}
|
|
|
|
currentStepIndex++;
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Incorrect object clicked.");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |