public void Update(BehaviourStateMachine stateMachine) { for (int i = 1; i <= memoryInterruptions.Count; ++i) { var it = memoryInterruptions[i - 1]; MemoryEvent ev = stateMachine.memory.SearchInMemory(it.eventType); if (ev != null && ev.GetState() == it.eventState) { //Debug.Log(i + "; " + it.eventType + "; " + it.eventState); stateMachine.target = ev; if (lastInterruptionType != i) { lastInterruptionType = i; stateMachine.SetCurrentBehaviour(it.entry); } return; } } { //Debug.Log("neutral"); stateMachine.target = null; if (lastInterruptionType != 0) { lastInterruptionType = 0; stateMachine.SetCurrentBehaviour(neutralEntry); } } }
void InitNeutral() { var neutralEntry = stateMachine.AddNewBehaviour(); interruption.neutralEntry = neutralEntry; var patrol = stateMachine.AddNewBehaviour(); var search = stateMachine.AddNewBehaviour(); var lookAround = stateMachine.AddNewBehaviour(); var idle = stateMachine.AddNewBehaviour(); patrol .AddFilter(new BFilterResetInput(false, false, true, true)) .AddFilter(new BFilterPatrol(20f)) .AddFilter(new BFilterTimedExecution(2f, 10f)) .AddFilter(new BFilterKeyPressIndicator()) .AddTransition(neutralEntry); ; idle.AddFilter(new BFilterResetInputBeggin(true, true, true, true)) .AddFilter(new BFilterTimedExecution(0.5f, 1.5f)) .AddTransition(neutralEntry) ; search .AddFilter(new BFilterResetInput(false, false, true, true)) .AddFilter(new BFilterTimedExecution(1.5f, 3f)) .AddFilter(new BFilterSearch().SetBaseSearchArea(10f)) .AddFilter(new BFilterKeyPressIndicator()) .AddFilter(new BFilterAllignDirectionToPosition(0.2f)) .AddTransition(search, 1f) .AddTransition(idle, 2f) .AddTransition(lookAround, 2f) ; lookAround .AddFilter(new BFilterResetInputBeggin(true, true, false, true)) .AddFilter(new BFilterTimedExecution(0.75f, 1f)) .AddFilter(new BFilterLookAround(0.1f, BehaviourFilterBase.EBehaviourStateReturn.EStillExecute) .SetCloseAngle(3f, BehaviourFilterBase.EBehaviourStateReturn.ENextStateIfAll)) .AddTransition(idle, 1f) .AddTransition(search, 3f) .AddTransition(lookAround, 1f) ; neutralEntry .AddFilter(new BFilterSwitchAnimationIndicator(2, false)) .AddFilter(new BFilterSwitchAnimationIndicator(3, false)) .AddTransition(idle, 4f) .AddTransition(patrol, 0.5f) .AddTransition(search, 0.125f) .AddTransition(lookAround, 1.25f) ; stateMachine.SetCurrentBehaviour(neutralEntry); }