protected internal override void UpdateDetectorPosition()
{
#if !WINDOWS
Vector3 newPosition = new Vector3();
#else
Vector3 newPosition;
#endif
newPosition.X = wheel.suspension.worldAttachmentPoint.X + wheel.suspension.worldDirection.X * wheel.suspension.restLength * .5f;
newPosition.Y = wheel.suspension.worldAttachmentPoint.Y + wheel.suspension.worldDirection.Y * wheel.suspension.restLength * .5f;
newPosition.Z = wheel.suspension.worldAttachmentPoint.Z + wheel.suspension.worldDirection.Z * wheel.suspension.restLength * .5f;
detector.Position = newPosition;
if (IncludeSteeringTransformInCast)
{
Quaternion localSteeringTransform;
Quaternion.CreateFromAxisAngle(ref wheel.suspension.localDirection, steeringAngle, out localSteeringTransform);
detector.Orientation = Quaternion.Concatenate(localSteeringTransform, wheel.Vehicle.Body.orientation);
}
else
{
detector.Orientation = wheel.Vehicle.Body.orientation;
}
Vector3 linearVelocity;
Vector3.Subtract(ref newPosition, ref wheel.vehicle.Body.position, out linearVelocity);
Vector3.Cross(ref linearVelocity, ref wheel.vehicle.Body.angularVelocity, out linearVelocity);
Vector3.Add(ref linearVelocity, ref wheel.vehicle.Body.linearVelocity, out linearVelocity);
detector.LinearVelocity = linearVelocity;
detector.AngularVelocity = wheel.vehicle.Body.angularVelocity;
}
}