public void EventsQueueing( IStateMachine <string, int> machine) { const int FirstEvent = 0; const int SecondEvent = 1; var arrived = false; "establish a passive state machine with transitions".x(() => { var stateMachineDefinitionBuilder = new StateMachineDefinitionBuilder <string, int>(); stateMachineDefinitionBuilder.In("A").On(FirstEvent).Goto("B"); stateMachineDefinitionBuilder.In("B").On(SecondEvent).Goto("C"); stateMachineDefinitionBuilder.In("C").ExecuteOnEntry(() => arrived = true); machine = stateMachineDefinitionBuilder .WithInitialState("A") .Build() .CreatePassiveStateMachine(); }); "when firing an event onto the state machine".x(() => { machine.Fire(FirstEvent); machine.Fire(SecondEvent); machine.Start(); }); "it should queue event at the end".x(() => arrived .Should() .BeTrue("state machine should arrive at destination state")); }
public void EventsQueueing( IStateMachine <string, int> machine, AutoResetEvent signal) { const int FirstEvent = 0; const int SecondEvent = 1; "establish an active state machine with transitions".x(() => { signal = new AutoResetEvent(false); var stateMachineDefinitionBuilder = new StateMachineDefinitionBuilder <string, int>(); stateMachineDefinitionBuilder.In("A").On(FirstEvent).Goto("B"); stateMachineDefinitionBuilder.In("B").On(SecondEvent).Goto("C"); stateMachineDefinitionBuilder.In("C").ExecuteOnEntry(() => signal.Set()); machine = stateMachineDefinitionBuilder .WithInitialState("A") .Build() .CreateActiveStateMachine(); }); "when firing an event onto the state machine".x(() => { machine.Fire(FirstEvent); machine.Fire(SecondEvent); machine.Start(); }); "it should queue event at the end".x(() => signal .WaitOne(1000) .Should() .BeTrue("state machine should arrive at destination state")); }
public void PriorityFire(string dummyName, Func <StateMachineDefinition <States, Events>, IStateMachine <States, Events> > createStateMachine) { const int Transitions = 3; var exceptions = new List <EventArgs>(); var transitionCompletedMessages = new List <TransitionCompletedEventArgs <States, Events> >(); var transitionDeclinedMessages = new List <TransitionEventArgs <States, Events> >(); IStateMachine <States, Events> testee = null; var stateMachineDefinitionBuilder = new StateMachineDefinitionBuilder <States, Events>(); stateMachineDefinitionBuilder .In(States.A) .On(Events.B).Goto(States.B).Execute(() => { FireD(); FirePriorityC(); }); stateMachineDefinitionBuilder .In(States.B) .On(Events.C).Goto(States.C); stateMachineDefinitionBuilder .In(States.C) .On(Events.D).Goto(States.D); var stateMachineDefinition = stateMachineDefinitionBuilder .WithInitialState(States.A) .Build(); testee = createStateMachine(stateMachineDefinition); void FireD() => testee.Fire(Events.D); void FirePriorityC() => testee.FirePriority(Events.C); testee.TransitionExceptionThrown += (sender, e) => exceptions.Add(e); testee.TransitionCompleted += (sender, e) => transitionCompletedMessages.Add(e); testee.TransitionDeclined += (sender, e) => transitionDeclinedMessages.Add(e); var allTransitionsCompleted = SetUpWaitForAllTransitions(testee, 1); testee.Start(); testee.Fire(Events.B); WaitForAllTransitions(allTransitionsCompleted); transitionCompletedMessages.Count.Should().Be(Transitions); transitionDeclinedMessages.Should().BeEmpty(); exceptions.Should().BeEmpty(); testee.Stop(); }
private async Task FindTaskAsync(CancellationToken ct) { GameObject player = null; while (player == null) { if (ct.IsCancellationRequested) { return; } player = CheckFoundPlayer(canFollowingDistance); await Task.Delay((int)(Time.deltaTime * 1000)); } partrolTaskCTS?.Cancel(); playerTansform = player.transform; fsm.Fire(BlackKnightTrigger.Found); //fsm.Fire(BlackKnightTrigger.Confrontation); //await MoveToThePointAsync(playerTansform, ct); }
static void Fire(IStateMachine <State, Trigger> phoneCall, Trigger trigger) { Debug.Log("[Firing:] " + trigger); phoneCall.Fire(trigger); }
public void onMessageGenerated() { ImsgStateMachine.Fire(E_Msg_EVENT.HasBeenGenerated); }
static void Fire(IStateMachine <State, Trigger> motionStateMachine, Trigger trigger) { Debug.Log("Triggering: " + trigger); motionStateMachine.Fire(trigger); }