63 lines
1.1 KiB
C#
63 lines
1.1 KiB
C#
|
|
using Godot;
|
|
using System.Collections.Generic;
|
|
|
|
|
|
namespace Rokojori
|
|
{
|
|
[Tool]
|
|
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/ConditionalAction.svg")]
|
|
public partial class CoolDown : Action
|
|
{
|
|
[Export]
|
|
public Action action;
|
|
|
|
[Export]
|
|
public Duration coolDownDuration;
|
|
|
|
bool _isCoolingDown = false;
|
|
int _coolDownID = -1;
|
|
|
|
public void ResetCoolDown()
|
|
{
|
|
if ( _coolDownID == -1 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
_isCoolingDown = false;
|
|
_coolDownID = -1;
|
|
}
|
|
|
|
protected override void _OnTrigger()
|
|
{
|
|
if ( _isCoolingDown )
|
|
{
|
|
return;
|
|
}
|
|
|
|
_isCoolingDown = coolDownDuration != null;
|
|
Trigger( action );
|
|
|
|
if ( coolDownDuration != null )
|
|
{
|
|
var te = TimeLineManager.ScheduleEventIn(
|
|
coolDownDuration.timeLine, coolDownDuration.GetDurationInSeconds(),
|
|
ev =>
|
|
{
|
|
if ( _coolDownID != ev.id )
|
|
{
|
|
return;
|
|
}
|
|
|
|
_isCoolingDown = false;
|
|
}
|
|
);
|
|
|
|
_coolDownID = te.id;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
} |