77 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Unity.VisualScripting
 | |
| {
 | |
|     [TypeIcon(typeof(StateGraph))]
 | |
|     [UnitCategory("Nesting")]
 | |
|     public sealed class StateUnit : NesterUnit<StateGraph, StateGraphAsset>
 | |
|     {
 | |
|         public StateUnit() : base() { }
 | |
| 
 | |
|         public StateUnit(StateGraphAsset macro) : base(macro) { }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// The entry point to start the state graph.
 | |
|         /// </summary>
 | |
|         [DoNotSerialize]
 | |
|         public ControlInput start { get; private set; }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// The entry point to stop the state graph.
 | |
|         /// </summary>
 | |
|         [DoNotSerialize]
 | |
|         public ControlInput stop { get; private set; }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// The action to execute after the state graph has been started.
 | |
|         /// </summary>
 | |
|         [DoNotSerialize]
 | |
|         public ControlOutput started { get; private set; }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// The action to execute after the state graph has been stopped.
 | |
|         /// </summary>
 | |
|         [DoNotSerialize]
 | |
|         public ControlOutput stopped { get; private set; }
 | |
| 
 | |
|         public static StateUnit WithStart()
 | |
|         {
 | |
|             var stateUnit = new StateUnit();
 | |
|             stateUnit.nest.source = GraphSource.Embed;
 | |
|             stateUnit.nest.embed = StateGraph.WithStart();
 | |
|             return stateUnit;
 | |
|         }
 | |
| 
 | |
|         protected override void Definition()
 | |
|         {
 | |
|             start = ControlInput(nameof(start), Start);
 | |
|             stop = ControlInput(nameof(stop), Stop);
 | |
| 
 | |
|             started = ControlOutput(nameof(started));
 | |
|             stopped = ControlOutput(nameof(stopped));
 | |
| 
 | |
|             Succession(start, started);
 | |
|             Succession(stop, stopped);
 | |
|         }
 | |
| 
 | |
|         private ControlOutput Start(Flow flow)
 | |
|         {
 | |
|             flow.stack.EnterParentElement(this);
 | |
|             nest.graph.Start(flow);
 | |
|             flow.stack.ExitParentElement();
 | |
|             return started;
 | |
|         }
 | |
| 
 | |
|         private ControlOutput Stop(Flow flow)
 | |
|         {
 | |
|             flow.stack.EnterParentElement(this);
 | |
|             nest.graph.Stop(flow);
 | |
|             flow.stack.ExitParentElement();
 | |
|             return stopped;
 | |
|         }
 | |
| 
 | |
|         public override StateGraph DefaultGraph()
 | |
|         {
 | |
|             return StateGraph.WithStart();
 | |
|         }
 | |
|     }
 | |
| }
 |