Files
Continentis/Assets/Scripts/MainGame/Commands/Cmd_Function.cs

41 lines
1.3 KiB
C#
Raw Normal View History

2025-10-03 00:02:43 -04:00
using System;
using SoulliesFramework.General;
using UniRx;
using UnityEngine;
using UnityEngine.Events;
namespace Continentis.MainGame.Commands
{
public class Cmd_Function : CommandBase
{
private readonly float functionDuration;
private readonly UnityAction function;
private readonly bool executeAtStart;
public Cmd_Function(float functionDuration, UnityAction function, bool executeAtStart = true)
{
this.functionDuration = functionDuration;
this.function = function;
this.executeAtStart = executeAtStart;
}
protected override IObservable<Unit> OnExecute(CommandContext context)
{
if (functionDuration > 0)
{
if (executeAtStart) //在持续时间开始时执行
{
function?.Invoke();
return Observable.Timer(TimeSpan.FromSeconds(functionDuration)).AsUnitObservable();
}
return Observable.Timer(TimeSpan.FromSeconds(functionDuration))
.Do(_ => function?.Invoke())
.AsUnitObservable(); //在持续时间结束时执行
}
function?.Invoke();
return Observable.Return(Unit.Default); //如果持续时间为0立即完成
}
}
}