private void Aim(Vector3 target)
{
Vector3 targetYawOffset;
Vector3 targetPitchOffset;
targetDistance = (target - part.transform.position).magnitude;
spotlightIntensity = Mathf.Clamp(0.005f * targetDistance, 1, 4.5f);
targetYawOffset = yawTransform.position - target;
targetYawOffset = Quaternion.Inverse(yawTransform.rotation) * targetYawOffset; //sets offset relative to the turret's rotation
targetYawOffset = Quaternion.AngleAxis(90, yawAxis) * targetYawOffset; //fix difference in coordinate system.
targetPitchOffset = pitchTransform.position - target;
targetPitchOffset = Quaternion.Inverse(pitchTransform.rotation) * targetPitchOffset;
targetPitchOffset = Quaternion.AngleAxis(180, pitchAxis) * targetPitchOffset;
float rotationSpeedYaw = Mathf.Clamp (Mathf.Abs (10*targetYawOffset.x/Mathf.Clamp (targetDistance,10, maxTargetingRange)), 0, rotationSpeed);
float rotationSpeedPitch = Mathf.Clamp (Mathf.Abs (10*targetPitchOffset.z/Mathf.Clamp (targetDistance,10, maxTargetingRange)), 0, rotationSpeed);
targetPosition = target;
if(TimeWarp.WarpMode!=TimeWarp.Modes.HIGH || TimeWarp.CurrentRate == 1)
{
//yaw movement
if(yawRange >= 0)
{
float minYaw = -(yawRange/2);
float maxYaw = yawRange/2;
if(targetYawOffset.x > 0 && yawTransform.localRotation.Roll () < maxYaw*Mathf.Deg2Rad)
{
yawTransform.localRotation *= Quaternion.AngleAxis(rotationSpeedYaw, yawAxis);
}
else if(targetYawOffset.x < 0 && yawTransform.localRotation.Roll () > minYaw*Mathf.Deg2Rad)
{
yawTransform.localRotation *= Quaternion.AngleAxis(-rotationSpeedYaw, yawAxis);
}
}
else{
if(targetYawOffset.x > 0)
{
yawTransform.localRotation *= Quaternion.AngleAxis(rotationSpeedYaw, yawAxis);
}
if(targetYawOffset.x < 0)
{
yawTransform.localRotation *= Quaternion.AngleAxis(-rotationSpeedYaw, yawAxis);
}
}
//pitch movement
if(targetPitchOffset.z > 0 && pitchTransform.localRotation.Yaw ()>-maxPitch*Mathf.Deg2Rad)
{
pitchTransform.localRotation *= Quaternion.AngleAxis(rotationSpeedPitch, pitchAxis);
}
else if(targetPitchOffset.z < 0 && pitchTransform.localRotation.Yaw () < - minPitch*Mathf.Deg2Rad)
{
pitchTransform.localRotation *= Quaternion.AngleAxis(-rotationSpeedPitch, pitchAxis);
}
}
}