コード例 #1
0
    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);
            }
        }
    }
コード例 #2
0
    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);
    }