Exemplo n.º 1
0
        private void Update()
        {
            if (!Health.Alive)
            {
                return;
            }

            float distanceToPlayer = Vector3.Distance(transform.position, player.transform.position);
            var   playerInRange    = weaponSystem.IsInRange(player.transform.position);

            if (OutOfCombat && distanceToPlayer <= chaseRadius)
            {
                if (patrolCoroutine != null)
                {
                    StopCoroutine(patrolCoroutine);
                    patrolCoroutine = null;
                }
                character.AnimatorForwardMultiplier = 1f;
                state = States.Chasing;
                character.SetTarget(player.transform);
                return;
            }
            if (state == States.Chasing && playerInRange && player.Health.Alive)
            {
                state = States.Attacking;
                weaponSystem.StartAttacking(player.Health);
                return;
            }
            if (state == States.Attacking && !playerInRange ||
                state == States.Attacking && !player.Health.Alive)
            {
                state = States.Chasing;
                weaponSystem.StopAttacking();
                return;
            }
            if (state == States.Chasing && distanceToPlayer > chaseRadius)
            {
                TransitionOutOfCombat();
                return;
            }
            if (state == States.Patroling)
            {
                Patrol();
                return;
            }
        }