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;
 | |
|       }
 | |
| 
 | |
|        
 | |
| 
 | |
|     }
 | |
|   }
 | |
| } |