rj-action-library/Runtime/Actions/OnTick.cs

74 lines
1.2 KiB
C#

using Godot;
namespace Rokojori
{
[Tool]
[GlobalClass, Icon("res://addons/rokojori_action_library/Icons/OnEvent.svg") ]
public partial class OnTick : Node
{
[Export]
public Action action;
bool _active = false;
[Export]
public bool active
{
get => _active;
set
{
SetActive( value );
}
}
[Export]
public float duration;
[Export]
public float offset;
[Export]
public TimeLine timeLine;
int _eventID = -1;
void SetActive( bool active )
{
if ( active == _active || Engine.IsEditorHint() )
{
return;
}
_active = active;
if ( _active )
{
if ( _eventID != -1 )
{
TimeLineManager.RemoveEvent( timeLine, _eventID );
return;
}
var tle = TimeLineManager.ScheduleLoopEvent( timeLine, duration, offset, tle => Action.Trigger( action ) );
_eventID = tle.id;
}
else
{
if ( _eventID == -1 )
{
return;
}
TimeLineManager.RemoveEvent( timeLine, _eventID );
_eventID = -1;
}
}
}
}