Example #1
0
    public override void Update(BaseCharacter character)
    {
        SetSpeed(character);

        if (character.EnemiesInAttackShape().Contains(character.MarkedEnemy))
        {
            character.ChangeState(character.Combat);
            return;
        }

        float stoppingDistance = character.NavMeshAgent.stoppingDistance + character.Stats.Radius * 2;

        if (character.NavMeshAgent.remainingDistance <= stoppingDistance)
        {
            if (Vector3.Angle(character.transform.forward, character.DestinationRotation) < RotationThreshold)
            {
                character.MarkedEnemy = null;
                character.ChangeState(character.Idle);
            }
            else
            {
                character.transform.LookAt(character.NavMeshAgent.destination);
                // float speed = (character.NavMeshAgent.angularSpeed * Mathf.PI) / 180;
                //Vector3 to = character.NavMeshAgent.destination - character.transform.position;
                //Quaternion _lookRotation = Quaternion.LookRotation(to);
                //character.transform.rotation = Quaternion.Slerp(character.transform.rotation, _lookRotation, speed * Time.deltaTime);
            }
        }
    }
 public void Hit()
 {
     HitOccurred = true;
     foreach (BaseCharacter enemy in Attacker.EnemiesInAttackShape())
     {
         Attacker.Attack(enemy, Skill);
     }
 }
Example #3
0
 public override void Update(BaseCharacter character)
 {
     if (character.EnemiesInAttackShape().Count > 0)
     {
         character.ChangeState(character.Combat);
         return;
     }
     if (character.NavMeshAgent.remainingDistance > character.NavMeshAgent.stoppingDistance)
     {
         for (int i = 0; i < character.Stats.EnemySet.Items.Count; i++)
         {
             if (Vector3.Distance(character.transform.position, character.Stats.EnemySet.Items[i].transform.position) < character.Stats.AlertnessRadius)
             {
                 Vector3 pos      = new Vector3(character.transform.position.x, 0, character.transform.position.z);
                 Vector3 rotation = Vector3.RotateTowards(character.transform.forward, character.Stats.EnemySet.Items[i].transform.position - pos, 2 * Mathf.PI, 1);
                 character.SetDestination(character.Stats.EnemySet.Items[i].transform.position);
                 character.NavMeshAgent.SetDestination(character.Stats.EnemySet.Items[i].transform.position);
                 return;
             }
         }
     }
     character.MarkedEnemy = null;
     character.ChangeState(character.Idle);
 }