Universe.Physics.BulletSPlugin.BSPrim.ApplyAxisLimits C# (CSharp) Method

ApplyAxisLimits() protected method

protected ApplyAxisLimits ( int funct, float low, float high ) : void
funct int
low float
high float
return void
        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