Exemplo n.º 1
0
 public MoveToTarget(NavMeshAgent navMeshAgent, TargetDetector <PlayerController> targetDetector, Animator animator, float moveSpeed, float chaseSpeed, float attackDistance, Transform transform)
 {
     _targetDetector = targetDetector;
     _animator       = animator;
     _moveSpeed      = moveSpeed;
     _chaseSpeed     = chaseSpeed;
     _attackDistance = attackDistance;
     _transform      = transform;
 }
Exemplo n.º 2
0
 public MoveToPlayer(ICharacter character, NavMeshAgent navMeshAgent, TargetDetector targetDetector, Animator animator, float moveSpeed, float chaseSpeed, float chaseDistance, float attackDistance, Transform transform)
 {
     _character      = character;
     _targetDetector = targetDetector;
     _animator       = animator;
     _moveSpeed      = moveSpeed;
     _chaseSpeed     = chaseSpeed;
     _chaseDistance  = chaseDistance;
     _attackDistance = attackDistance;
     _transform      = transform;
 }
Exemplo n.º 3
0
        private void InitActionStateMachine(NavMeshAgent navMeshAgent, Animator animator, TargetDetector <PlayerController> playerDetector)
        {
            _actionStateMachine = new AIStateMachine();

            Fighter fighter = new Fighter();
            Stamina stamina = new Stamina();

            var attack       = new Attack(navMeshAgent, animator, stamina, maxNumberOfAttack, timeBetweenAttack);
            var moveToPlayer = new MoveToTarget(navMeshAgent, playerDetector, animator, moveSpeed, chaseSpeed,
                                                1f,//replace with weapon attack distance
                                                transform);
            var idle = new Idle(navMeshAgent, animator);


            Func <bool> CanAttack() => () => fighter.CanAttack(playerDetector.GetTarget());
            Func <bool> PlayerInRange() => () => playerDetector.TargetInRange;

            Func <bool> ShouldIdle() => () => { return(!(fighter.CanAttack(playerDetector.GetTarget()) && playerDetector.TargetInRange)); };

            _actionStateMachine.AddAnyTransition(attack, CanAttack());
            _actionStateMachine.AddAnyTransition(moveToPlayer, PlayerInRange());

            _actionStateMachine.AddTransition(moveToPlayer, idle, ShouldIdle());
        }