using System.Collections.Generic; using UnityEngine; namespace SK.Framework { public class TaskManager { public static TaskManager Instance { get; } = new TaskManager(); private readonly List _tasks = new List(); private int _currentTaskIndex = -1; private TaskMode _mode = TaskMode.Teach; public TaskData CurrentTask => (_currentTaskIndex >= 0 && _currentTaskIndex < _tasks.Count) ? _tasks[_currentTaskIndex] : null; public void AddTask(TaskData task) { _tasks.Add(task); } public void SetMode(TaskMode mode) { _mode = mode; Debug.Log($"[TaskManager] Mode = {_mode}"); } public void Start() { if (_tasks.Count == 0) return; _currentTaskIndex = 0; StartCurrentTask(); } private void StartCurrentTask() { if (_currentTaskIndex >= _tasks.Count) { Debug.Log("[TaskManager] 所有任务完成"); return; } var task = _tasks[_currentTaskIndex]; task.OnTaskCompleted += OnTaskCompleted; task.OnTaskFailed += OnTaskFailed; task.Start(_mode); } private void OnTaskCompleted(TaskData task) { task.OnTaskCompleted -= OnTaskCompleted; task.OnTaskFailed -= OnTaskFailed; _currentTaskIndex++; StartCurrentTask(); } private void OnTaskFailed(TaskData task, string reason) { // 失败不自动跳任务,由上层系统处理 } /// /// 预留方法 /// public void Tick() { CurrentTask?.Tick(); } /// /// 外部调用:汇报当前 Step 的结果 /// public void ReportCurrentStepResult(bool isError) { CurrentTask?.CompleteCurrentStep(isError); } /// /// 通过stepID跳转步骤 /// /// public void JumpToStepById(int stepId) { CurrentTask?.JumpToStepById(stepId); } public void RestartCurrentTask() { if (CurrentTask == null) return; CurrentTask.Reset(); CurrentTask.Start(_mode); } //跳步s } }