Exemple #1
0
    void Start()
    {
        formation = GetComponent <EnemyFormationManager>();

        //States
        FSMState idle = new FSMState();

        idle.enterActions.Add(GoToCamp);
        idle.stayActions.Add(Watch);
        idle.exitActions.Add(ExitIdleState);

        FSMState chase = new FSMState();

        chase.enterActions.Add(StartChase);
        chase.stayActions.Add(Chase);
        chase.exitActions.Add(StopChase);

        FSMState attack = new FSMState();

        attack.enterActions.Add(StartAttack);
        attack.stayActions.Add(Fight);
        attack.exitActions.Add(StopAttack);

        FSMState dead = new FSMState();

        dead.enterActions.Add(Dead);

        FSMState returnInPosition = new FSMState();

        returnInPosition.enterActions.Add(ReturnToPosition);
        returnInPosition.stayActions.Add(Returning);
        returnInPosition.exitActions.Add(StopReturning);

        //Transitions
        FSMTransition t1 = new FSMTransition(ScanField);
        FSMTransition t2 = new FSMTransition(ScanFieldMoreNear);
        FSMTransition t3 = new FSMTransition(OutOfAttackRange);
        FSMTransition t4 = new FSMTransition(OutOfMaximumDistance);
        FSMTransition t5 = new FSMTransition(NoEnemiesInRange);
        FSMTransition t6 = new FSMTransition(NearEnemy);
        FSMTransition t7 = new FSMTransition(IsDead);
        FSMTransition t8 = new FSMTransition(InitialPosition);

        // Link states with transitions
        idle.AddTransition(t1, chase);
        chase.AddTransition(t2, attack);
        attack.AddTransition(t3, chase);
        chase.AddTransition(t4, returnInPosition);
        attack.AddTransition(t5, returnInPosition);
        returnInPosition.AddTransition(t6, attack);
        attack.AddTransition(t7, dead);
        returnInPosition.AddTransition(t8, idle);

        // Setup a FSA at initial state
        fsm = new FSM(idle);

        // Start monitoring
        StartCoroutine(Patrol());
    }
Exemple #2
0
    void Start()
    {
        formation = GetComponent <EnemyFormationManager>();

        //States
        FSMState patrol = new FSMState();

        patrol.enterActions.Add(SetGoal);
        patrol.stayActions.Add(Walk);
        patrol.exitActions.Add(StopPatrol);

        FSMState chase = new FSMState();

        chase.enterActions.Add(StartChase);
        chase.stayActions.Add(Chase);
        chase.exitActions.Add(StopChase);

        FSMState attack = new FSMState();

        attack.enterActions.Add(StartAttack);
        attack.stayActions.Add(Fight);
        attack.exitActions.Add(StopAttack);

        FSMState dead = new FSMState();

        dead.enterActions.Add(Dead);

        FSMState flee = new FSMState();

        flee.enterActions.Add(StartFleeing);
        flee.stayActions.Add(Flee);

        FSMState recoverHP = new FSMState();

        recoverHP.enterActions.Add(StartRecovery);
        recoverHP.stayActions.Add(RechargeHP);
        recoverHP.exitActions.Add(StopRecovery);

        //Transitions
        FSMTransition t1  = new FSMTransition(ScanField);
        FSMTransition t2  = new FSMTransition(ScanFieldMoreNear);
        FSMTransition t3  = new FSMTransition(OutOfLargeRange);
        FSMTransition t4  = new FSMTransition(OutOfRange);
        FSMTransition t5  = new FSMTransition(CompletedBattle);
        FSMTransition t6  = new FSMTransition(LowHp);
        FSMTransition t7  = new FSMTransition(IsDead);
        FSMTransition t8  = new FSMTransition(DeadDuringEscape);
        FSMTransition t9  = new FSMTransition(DistanceFromRecovery);
        FSMTransition t10 = new FSMTransition(CompletedRecharge);
        FSMTransition t11 = new FSMTransition(ChaseDuringRecharge);

        // Link states with transitions
        patrol.AddTransition(t1, chase);
        chase.AddTransition(t2, attack);
        chase.AddTransition(t3, patrol);
        attack.AddTransition(t4, chase);
        attack.AddTransition(t5, patrol);
        attack.AddTransition(t6, flee);
        attack.AddTransition(t7, dead);
        flee.AddTransition(t8, dead);
        flee.AddTransition(t9, recoverHP);
        recoverHP.AddTransition(t10, patrol);
        recoverHP.AddTransition(t11, chase);

        // Setup a FSA at initial state
        fsm = new FSM(patrol);

        // Start monitoring
        StartCoroutine(Patrol());
    }