private bool CheckCollision() { var posColObjs = m_owner.GetObjectsInRadius(m_owner.BoundingCollisionRadius, ObjectTypes.Unit, false); posColObjs.Remove(m_owner); var totalX = 0f; var totalY = 0f; foreach (Unit worldObject in posColObjs) { var colDist = m_owner.IsCollisionWith(worldObject); if (colDist > 0) { var x = (m_owner.Position.X - worldObject.Position.X); var y = (m_owner.Position.Y - worldObject.Position.Y); var vect = new Vector3(x, y); vect.Normalize(); totalX += vect.X * colDist; totalY += vect.Y * colDist; } } var totalVector = new Vector3(totalX, totalY); if (totalVector != Vector3.Zero) { var len = totalVector.Length(); if (len > m_owner.BoundingRadius / 2) { m_destination = new Vector3(m_owner.Position.X + totalX, m_owner.Position.Y + totalY); MoveToDestination(); } return(true); } return(false); }
private bool CheckCollision() { IList <WorldObject> objectsInRadius = m_owner.GetObjectsInRadius(m_owner.BoundingCollisionRadius, ObjectTypes.Unit, false, int.MaxValue); objectsInRadius.Remove(m_owner); float x = 0.0f; float y = 0.0f; foreach (Unit unit in objectsInRadius) { float num = m_owner.IsCollisionWith(unit); if (num > 0.0) { Vector3 vector3 = new Vector3(m_owner.Position.X - unit.Position.X, m_owner.Position.Y - unit.Position.Y); vector3.Normalize(); x += vector3.X * num; y += vector3.Y * num; } } Vector3 vector3_1 = new Vector3(x, y); if (!(vector3_1 != Vector3.Zero)) { return(false); } if (vector3_1.Length() > m_owner.BoundingRadius / 2.0) { m_destination = new Vector3(m_owner.Position.X + x, m_owner.Position.Y + y); MoveToDestination(); } return(true); }