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