82 lines
2.3 KiB
C#
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();
|
|
}
|
|
}
|
|
} |