44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| namespace Unity.VisualScripting
 | |
| {
 | |
|     /// <summary>
 | |
|     /// A special state that can trigger transitions to other states,
 | |
|     /// no matter which state is currently active. This state cannot receive
 | |
|     /// transitions.
 | |
|     /// </summary>
 | |
|     public sealed class AnyState : State
 | |
|     {
 | |
|         [DoNotSerialize]
 | |
|         public override bool canBeDestination => false;
 | |
| 
 | |
|         public AnyState() : base()
 | |
|         {
 | |
|             isStart = true;
 | |
|         }
 | |
| 
 | |
|         public override void OnExit(Flow flow, StateExitReason reason)
 | |
|         {
 | |
|             // Don't exit this state from branching.
 | |
|             if (reason == StateExitReason.Branch)
 | |
|             {
 | |
|                 return;
 | |
|             }
 | |
| 
 | |
|             base.OnExit(flow, reason);
 | |
|         }
 | |
| 
 | |
|         public override void OnBranchTo(Flow flow, IState destination)
 | |
|         {
 | |
|             // Before entering the destination destination state,
 | |
|             // exit all other connected states.
 | |
| 
 | |
|             foreach (var outgoingTransition in outgoingTransitionsNoAlloc)
 | |
|             {
 | |
|                 if (outgoingTransition.destination != destination)
 | |
|                 {
 | |
|                     outgoingTransition.destination.OnExit(flow, StateExitReason.AnyBranch);
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |