74 lines
1.2 KiB
C#
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;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
} |