Пример #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);
            }
        }
    }
Пример #2
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);
 }
Пример #3
0
 public override void Update(BaseCharacter character)
 {
     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)
         {
             // Angle Rotation
             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);
             character.MarkedEnemy = character.Stats.EnemySet.Items[i];
             character.ChangeState(character.Chase);
             return;
         }
     }
 }
Пример #4
0
 public override void Update(BaseCharacter character)
 {
     SetSpeed(character);
     if (character.NavMeshAgent.remainingDistance <= character.NavMeshAgent.stoppingDistance)
     {
         if (Vector3.Angle(character.transform.forward, character.DestinationRotation) <= RotationThreshold)
         {
             character.ChangeState(character.Idle);
         }
         else
         {
             float   step    = ((character.NavMeshAgent.angularSpeed / 2) * Time.deltaTime * Mathf.PI) / 180;
             Vector3 forward = new Vector3(character.transform.forward.x, character.DestinationRotation.y, character.transform.forward.z);
             Vector3 newDir  = Vector3.RotateTowards(forward, character.DestinationRotation, step, 0);
             character.transform.rotation = Quaternion.LookRotation(newDir);
         }
     }
 }
Пример #5
0
 public override void Update(BaseCharacter character)
 {
     if (character.ScheduledAttack.IsActive)
     {
         character.ScheduledAttack.CurrentTime += Time.deltaTime;
         DebugColor = Color.red;
         if (character.ScheduledAttack.Progress() >= 0.5 && !character.ScheduledAttack.HitOccurred)
         {
             character.ScheduledAttack.Hit();
             DebugColor = Color.yellow;
         }
         else if (character.ScheduledAttack.Progress() >= 1)
         {
             character.ChangeState(character.Idle);
         }
     }
     else
     {
         character.ScheduleAttack(character.CurrentAttackSkill);
     }
 }