Exemple #1
0
        /// <summary>
        ///   Awake.
        /// </summary>
        private void Awake()
        {
            _stateMachineController = new StateMachineController();
            _navMeshAgent           = GetComponent <NavMeshAgent>();
            _entity = GetComponent <Entity>();

            EntityIdle        entityIdle        = new EntityIdle();
            EntityChasePlayer entityChasePlayer = new EntityChasePlayer(_navMeshAgent);
            EntityAttack      entityAttack      = new EntityAttack();
            EntityDead        entityDead        = new EntityDead();

            _stateMachineController.Add(entityIdle);
            _stateMachineController.Add(entityChasePlayer);
            _stateMachineController.Add(entityAttack);

            _stateMachineController.AddAnyStateTransition(entityDead, () => _entity.IsDead);

            Player player = FindObjectOfType <Player>();

            _stateMachineController.AddStateTransition(entityIdle,
                                                       entityChasePlayer,
                                                       () => FlatDistance(_navMeshAgent.transform.position, player.transform.position) < 5);
            _stateMachineController.AddStateTransition(entityChasePlayer,
                                                       entityAttack,
                                                       () => FlatDistance(_navMeshAgent.transform.position, player.transform.position) < 2);

            _stateMachineController.ChangeState(entityIdle);
        }
Exemple #2
0
        public void transition_from_any_state_switch_state_when_condition_is_met()
        {
            StateMachineController stateMachineController = new StateMachineController();
            IState firstState = Substitute.For <IState>();

            stateMachineController.Add(firstState);
            IState secondState = Substitute.For <IState>();

            stateMachineController.Add(secondState);

            bool ShouldTransitionToState() => true;

            stateMachineController.AddAnyStateTransition(secondState, ShouldTransitionToState);

            stateMachineController.ChangeState(firstState);
            Assert.AreSame(firstState, stateMachineController.CurrentState);

            stateMachineController.Tick();
            Assert.AreSame(secondState, stateMachineController.CurrentState);
        }