99 lines
2.8 KiB
C#
99 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using DefaultNamespace.ProcessMode;
|
|
using Framework.Dto;
|
|
using MotionFramework;
|
|
|
|
public static class EventRegistrationCenter
|
|
{
|
|
private static Action onAllEventsRegistered; // 注册所有事件后的回调,用于跳转步骤
|
|
|
|
// 存储所有步骤的事件信息
|
|
private static List<EventStepInfo> allStepEvents = new List<EventStepInfo>();
|
|
|
|
/// <summary>
|
|
/// 使用下标注册目标事件
|
|
/// </summary>
|
|
public static void RegisterEvent(
|
|
int stepIndex,
|
|
int actionIndex,
|
|
string objectName,
|
|
Action customEvent
|
|
) // 注册事件完成后的回调
|
|
{
|
|
// 场景已加载,直接注册
|
|
InternalRegisterEvent(stepIndex, actionIndex, objectName, customEvent);
|
|
}
|
|
|
|
private static void InternalRegisterEvent(
|
|
int stepIndex,
|
|
int actionIndex,
|
|
string objectName,
|
|
Action customEvent)
|
|
{
|
|
var processManager = MotionEngine.GetModule<ProcessManager>();
|
|
var processCollection = processManager.CurrentProcessCollection;
|
|
|
|
// 检查步骤索引和动作索引有效性
|
|
if (stepIndex < 0 || stepIndex >= processCollection.Steps.Count)
|
|
{
|
|
Debug.LogError($"步骤索引 {stepIndex} 超出范围!");
|
|
return;
|
|
}
|
|
|
|
var step = processCollection.Steps[stepIndex];
|
|
|
|
if (actionIndex < 0 || actionIndex >= step.Actions.Count)
|
|
{
|
|
Debug.LogError($"动作索引 {actionIndex} 超出范围!");
|
|
return;
|
|
}
|
|
|
|
var action = step.Actions[actionIndex];
|
|
action.BindEventToObject(objectName, customEvent); // 将事件绑定到目标物体
|
|
Debug.Log($"事件绑定成功:步骤 {step.StepDescription} -> 动作 {action.Title} -> {objectName}");
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 添加事件到 AllStepEvents
|
|
/// </summary>
|
|
public static void AddEventsToAllStepEvents(EventStepInfo eventStep)
|
|
{
|
|
if (allStepEvents != null)
|
|
{
|
|
allStepEvents.Add(eventStep);
|
|
Debug.Log($"事件已添加,当前事件总数: {allStepEvents.Count}");
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("AllStepEvents is not loaded.");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 注册所有步骤的事件
|
|
/// </summary>
|
|
public static void RegisterAllEvents()
|
|
{
|
|
if (allStepEvents != null)
|
|
{
|
|
foreach (var stepEvent in allStepEvents)
|
|
{
|
|
RegisterEvent(
|
|
stepEvent.StepIndex,
|
|
stepEvent.ActionIndex,
|
|
stepEvent.ObjectName,
|
|
stepEvent.Event
|
|
);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("AllStepEvents is not loaded.");
|
|
}
|
|
}
|
|
}
|