private r_Client GetClosestTarget() { r_Client bestTarget = null; for (int i = 0; i < r_ClientManager.m_Clients.Count; i++) { float closestDistanceSqr = UnityEngine.Mathf.Infinity; Vector3 currentPosition = new Vector3(m_Position.x, m_Position.y, m_Position.z); foreach (var potentialTarget in r_ClientManager.m_Clients) { Vector3 directionToTarget = potentialTarget.Value.GetPositionToVector3() - currentPosition; float dSqrToTarget = directionToTarget.LengthSquared(); if (dSqrToTarget < closestDistanceSqr) { if (dSqrToTarget > 5 && dSqrToTarget < 0.9f) { return(null); } closestDistanceSqr = dSqrToTarget; bestTarget = potentialTarget.Value; } } } return(bestTarget); }
public void Update() { if (r_ClientManager.m_Clients.Count > 0) { if (GetClosestTarget() == null) { return; } r_Client _target = GetClosestTarget(); m_TargetPosition = _target.m_Position; } if (r_ClientManager.m_Clients.Count > 0) { r_SendWorldPacket.SendWorldObjectUpdateToClient(this.m_GUID, this.m_TargetPosition, this.m_Rotation, this.m_EntityType); } }