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); } }
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); }