2025-12-09 01:04:14 +08:00

82 lines
2.3 KiB
C#

// AnimationTask.cs
using System;
using System.Collections;
using RuntimeData;
using TH1_Anim;
using TH1_Anim.Fragments;
using TH1_Logic.Core;
using UnityEngine;
namespace TH1_Presentation.Sequencer.Task
{
public class FragmentSequencerTask : ISequencerTask
{
public FragmentBase Fragment;
private Action _onCompleteCallback; // 保存来自 PresentationManager 的完成回调
private bool _callbackRegistered = false;
public FragmentSequencerTask(FragmentBase fragment)
{
Fragment = fragment;
}
public string GetDescString()
{
return "FragmentSequencerTask : " + Fragment.GetType();
}
public void Execute(Action onComplete)
{
_onCompleteCallback = onComplete;
Fragment.OnFinishedCallback += OnFragmentFinished;
}
public void Update()
{
FragmentManager.Instance.UpdateFragment(Fragment);
}
private void OnFragmentFinished()
{
// step #1 在通知前,立刻注销自己的回调
if (_callbackRegistered)
{
Fragment.OnFinishedCallback -= OnFragmentFinished;
_callbackRegistered = false;
}
_onCompleteCallback?.Invoke();
}
}
public class InputSequencerTask : ISequencerTask
{
public GridData ClickGrid;
private Action _onCompleteCallback; // 保存来自 PresentationManager 的完成回调
private bool _callbackRegistered = false;
public InputSequencerTask(GridData grid)
{
ClickGrid = grid;
}
public string GetDescString()
{
return "InputSequencerTask";
}
public void Execute(Action onComplete)
{
_onCompleteCallback = onComplete;
Main.Instance.MapInteractionLogic.OnTileClicked(Main.MapData,ClickGrid);
OnFinished();
}
private void OnFinished()
{
// step #1 在通知前,立刻注销自己的回调
if (_callbackRegistered)
_callbackRegistered = false;
// step #2. 通知 PresentationManager 任务已完成
_onCompleteCallback?.Invoke();
}
}
}