예제 #1
0
    private void MakeFSM()
    {
        mFSMSystem = new FSMSystem();

        FSMState standbyState = new StateStandby(mFSMSystem);

        ///standbyState StateID.StandbyState,转换条件分别为
        ///Transition.SeeEnemy
        standbyState.AddTransition(Transition.SeeEnemy, StateID.ChaseState);

        FSMState chaseState = new StateChase(mFSMSystem);

        ///由ChaseState状态可以转换到 StateID.StandbyState StateID.AttackState,转换条件分别为
        ///Transition.DonotSeeEnemy  Transition.EnemyInTheAttackRange
        chaseState.AddTransition(Transition.DonotSeeEnemy, StateID.StandbyState);
        chaseState.AddTransition(Transition.EnemyInTheAttackRange, StateID.AttackState);

        FSMState attackState = new StateAttack(mFSMSystem);

        ///由attackState状态可以转换到 StateID.StandbyState StateID.ChaseState,转换条件分别为
        ///Transition.DonotSeeEnemy  Transition.EnemyOutOfTheAttackRange
        attackState.AddTransition(Transition.DonotSeeEnemy, StateID.StandbyState);
        attackState.AddTransition(Transition.EnemyOutOfTheAttackRange, StateID.ChaseState);

        mFSMSystem.AddState(standbyState);
        mFSMSystem.AddState(chaseState);
        mFSMSystem.AddState(attackState);
    }
예제 #2
0
        public Enemy()
        {
            sightRadius = 100f;

            //Init states
            idle   = new StateIdle(this);
            chase  = new StateChase(this);
            attack = new StateAttack(this);

            //Linking states NB: questo è brutto
            idle.Chase   = chase;
            chase.Idle   = idle;
            chase.Attack = attack;
            attack.Idle  = idle;
            attack.Chase = chase;

            //Turn on the FSM and set currentstate to idle
            idle.OnStateEnter();
            currentState = idle;
        }
예제 #3
0
	public virtual StateChase Chase(){
		StateChase state = new StateChase (this);
		StateContext.SetState (state);
		return state;
	}