//------------------- //State update, perform any actions for the given state // //Return bool: Has this state been completed, e.g. Attack has completed, idle would always return true //------------------- public override bool UpdateState() { if (!TargetInRange() || !m_targetPlayer.IsAlive()) //Early break out when target is no onger in range, or dead { return(true); } Vector3 targetDir = m_targetPlayer.transform.position - transform.position; targetDir.y = 0; //Rotate towards target transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(targetDir), m_rotationSpeed * Time.fixedDeltaTime); //Move forwards if (MOARMaths.SqrDistance(m_targetPlayer.gameObject, gameObject) > m_attackRangeSqr) { m_NPC.m_customPhysics.m_velocity.z = m_forwardSpeed; } else // Close enough to attack { // } return(false); }
private bool TargetInRange() { if (m_targetPlayer != null) { if (MOARMaths.SqrDistance(gameObject, m_targetPlayer.gameObject) < m_detectionRangeSqr) { return(true); //Early breakout } m_targetPlayer = null; } //See if any close target foreach (Player player in m_possibleTargets) { if (MOARMaths.SqrDistance(gameObject, player.gameObject) < m_detectionRangeSqr) { m_targetPlayer = player; return(true); //Early breakout } } return(false); }