protected void ApplyAxisLimits(int funct, float low, float high)
{
DetailLog("{0} ApplyAxisLimits. op={1}, low={2}, high={3}", LocalID, funct, low, high);
float linearMax = 23000f;
float angularMax = (float)Math.PI;
switch (funct)
{
case ExtendedPhysics.PHYS_AXIS_LOCK_LINEAR:
LockedLinearAxis = new OMV.Vector3(LockedAxis, LockedAxis, LockedAxis);
LockedLinearAxisLow = OMV.Vector3.Zero;
LockedLinearAxisHigh = OMV.Vector3.Zero;
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_LINEAR_X:
LockedLinearAxis.X = LockedAxis;
LockedLinearAxisLow.X = 0f;
LockedLinearAxisHigh.X = 0f;
break;
case ExtendedPhysics.PHYS_AXIS_LIMIT_LINEAR_X:
LockedLinearAxis.X = LockedAxis;
LockedLinearAxisLow.X = Util.Clip(low, -linearMax, linearMax);
LockedLinearAxisHigh.X = Util.Clip(high, -linearMax, linearMax);
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_LINEAR_Y:
LockedLinearAxis.Y = LockedAxis;
LockedLinearAxisLow.Y = 0f;
LockedLinearAxisHigh.Y = 0f;
break;
case ExtendedPhysics.PHYS_AXIS_LIMIT_LINEAR_Y:
LockedLinearAxis.Y = LockedAxis;
LockedLinearAxisLow.Y = Util.Clip(low, -linearMax, linearMax);
LockedLinearAxisHigh.Y = Util.Clip(high, -linearMax, linearMax);
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_LINEAR_Z:
LockedLinearAxis.Z = LockedAxis;
LockedLinearAxisLow.Z = 0f;
LockedLinearAxisHigh.Z = 0f;
break;
case ExtendedPhysics.PHYS_AXIS_LIMIT_LINEAR_Z:
LockedLinearAxis.Z = LockedAxis;
LockedLinearAxisLow.Z = Util.Clip(low, -linearMax, linearMax);
LockedLinearAxisHigh.Z = Util.Clip(high, -linearMax, linearMax);
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR:
LockedAngularAxis = new OMV.Vector3(LockedAxis, LockedAxis, LockedAxis);
LockedAngularAxisLow = OMV.Vector3.Zero;
LockedAngularAxisHigh = OMV.Vector3.Zero;
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_X:
LockedAngularAxis.X = LockedAxis;
LockedAngularAxisLow.X = 0;
LockedAngularAxisHigh.X = 0;
break;
case ExtendedPhysics.PHYS_AXIS_LIMIT_ANGULAR_X:
LockedAngularAxis.X = LockedAxis;
LockedAngularAxisLow.X = Util.Clip(low, -angularMax, angularMax);
LockedAngularAxisHigh.X = Util.Clip(high, -angularMax, angularMax);
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_Y:
LockedAngularAxis.Y = LockedAxis;
LockedAngularAxisLow.Y = 0;
LockedAngularAxisHigh.Y = 0;
break;
case ExtendedPhysics.PHYS_AXIS_LIMIT_ANGULAR_Y:
LockedAngularAxis.Y = LockedAxis;
LockedAngularAxisLow.Y = Util.Clip(low, -angularMax, angularMax);
LockedAngularAxisHigh.Y = Util.Clip(high, -angularMax, angularMax);
break;
case ExtendedPhysics.PHYS_AXIS_LOCK_ANGULAR_Z:
LockedAngularAxis.Z = LockedAxis;
LockedAngularAxisLow.Z = 0;
LockedAngularAxisHigh.Z = 0;
break;
case ExtendedPhysics.PHYS_AXIS_LIMIT_ANGULAR_Z:
LockedAngularAxis.Z = LockedAxis;
LockedAngularAxisLow.Z = Util.Clip(low, -angularMax, angularMax);
LockedAngularAxisHigh.Z = Util.Clip(high, -angularMax, angularMax);
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_LINEAR:
LockedLinearAxis = LockedAxisFree;
LockedLinearAxisLow = new OMV.Vector3(-linearMax, -linearMax, -linearMax);
LockedLinearAxisHigh = new OMV.Vector3(linearMax, linearMax, linearMax);
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_LINEAR_X:
LockedLinearAxis.X = FreeAxis;
LockedLinearAxisLow.X = -linearMax;
LockedLinearAxisHigh.X = linearMax;
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_LINEAR_Y:
LockedLinearAxis.Y = FreeAxis;
LockedLinearAxisLow.Y = -linearMax;
LockedLinearAxisHigh.Y = linearMax;
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_LINEAR_Z:
LockedLinearAxis.Z = FreeAxis;
LockedLinearAxisLow.Z = -linearMax;
LockedLinearAxisHigh.Z = linearMax;
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR:
LockedAngularAxis = LockedAxisFree;
LockedAngularAxisLow = new OMV.Vector3(-angularMax, -angularMax, -angularMax);
LockedAngularAxisHigh = new OMV.Vector3(angularMax, angularMax, angularMax);
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR_X:
LockedAngularAxis.X = FreeAxis;
LockedAngularAxisLow.X = -angularMax;
LockedAngularAxisHigh.X = angularMax;
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR_Y:
LockedAngularAxis.Y = FreeAxis;
LockedAngularAxisLow.Y = -angularMax;
LockedAngularAxisHigh.Y = angularMax;
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR_Z:
LockedAngularAxis.Z = FreeAxis;
LockedAngularAxisLow.Z = -angularMax;
LockedAngularAxisHigh.Z = angularMax;
break;
case ExtendedPhysics.PHYS_AXIS_UNLOCK:
ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_UNLOCK_LINEAR, 0f, 0f);
ApplyAxisLimits(ExtendedPhysics.PHYS_AXIS_UNLOCK_ANGULAR, 0f, 0f);
break;
default:
break;
}
return;
}
#endregion // Extension