예제 #1
0
 public JointVehicleMotor ConnectWheel(VehiclePartEntity wheel, bool driving, bool powered)
 {
     wheel.SetFriction(2.5f);
     Vector3 left = Quaternion.Transform(new Vector3(-1, 0, 0), wheel.GetOrientation());
     Vector3 up = Quaternion.Transform(new Vector3(0, 0, 1), wheel.GetOrientation());
     JointSlider pointOnLineJoint = new JointSlider(this, wheel, -new Location(up));
     JointLAxisLimit suspensionLimit = new JointLAxisLimit(this, wheel, 0f, 0.1f, wheel.GetPosition(), wheel.GetPosition(), -new Location(up));
     JointPullPush spring = new JointPullPush(this, wheel, -new Location(up), true);
     BEPUphysics.CollisionRuleManagement.CollisionRules.AddRule(wheel.Body, this.Body, BEPUphysics.CollisionRuleManagement.CollisionRule.NoBroadPhase); // TODO: How necessary is this? Should we replicate this clientside?
     if (driving)
     {
         JointSpinner spinner = new JointSpinner(this, wheel, new Location(-left));
         TheRegion.AddJoint(spinner);
     }
     else
     {
         JointSwivelHinge swivelhinge = new JointSwivelHinge(this, wheel, new Location(up), new Location(-left));
         TheRegion.AddJoint(swivelhinge);
     }
     TheRegion.AddJoint(pointOnLineJoint);
     TheRegion.AddJoint(suspensionLimit);
     TheRegion.AddJoint(spring);
     if (powered)
     {
         JointVehicleMotor motor = new JointVehicleMotor(this, wheel, new Location(driving ? left : up), !driving);
         TheRegion.AddJoint(motor);
         return motor;
     }
     return null;
 }
예제 #2
0
        public JointVehicleMotor ConnectWheel(VehiclePartEntity wheel, bool driving, bool powered)
        {
            wheel.SetFriction(2.5f);
            Vector3         left             = Quaternion.Transform(new Vector3(-1, 0, 0), wheel.GetOrientation());
            Vector3         up               = Quaternion.Transform(new Vector3(0, 0, 1), wheel.GetOrientation());
            JointSlider     pointOnLineJoint = new JointSlider(this, wheel, -new Location(up));
            JointLAxisLimit suspensionLimit  = new JointLAxisLimit(this, wheel, 0f, 0.1f, wheel.GetPosition(), wheel.GetPosition(), -new Location(up));
            JointPullPush   spring           = new JointPullPush(this, wheel, -new Location(up), true);

            BEPUphysics.CollisionRuleManagement.CollisionRules.AddRule(wheel.Body, this.Body, BEPUphysics.CollisionRuleManagement.CollisionRule.NoBroadPhase); // TODO: How necessary is this? Should we replicate this clientside?
            if (driving)
            {
                JointSpinner spinner = new JointSpinner(this, wheel, new Location(-left));
                TheRegion.AddJoint(spinner);
            }
            else
            {
                JointSwivelHinge swivelhinge = new JointSwivelHinge(this, wheel, new Location(up), new Location(-left));
                TheRegion.AddJoint(swivelhinge);
            }
            TheRegion.AddJoint(pointOnLineJoint);
            TheRegion.AddJoint(suspensionLimit);
            TheRegion.AddJoint(spring);
            if (powered)
            {
                JointVehicleMotor motor = new JointVehicleMotor(this, wheel, new Location(driving ? left : up), !driving);
                TheRegion.AddJoint(motor);
                return(motor);
            }
            return(null);
        }
예제 #3
0
        public JointVehicleMotor ConnectWheel(VehiclePartEntity wheel, bool driving, bool powered, double susp)
        {
            TheRegion.AddJoint(new ConstWheelStepUp(wheel, wheel.StepHeight));
            wheel.SetFriction(2.5f);
            Vector3         left             = BEPUutilities.Quaternion.Transform(new Vector3(-1, 0, 0), wheel.GetOrientation());
            Vector3         up               = BEPUutilities.Quaternion.Transform(new Vector3(0, 0, 1), wheel.GetOrientation());
            JointSlider     pointOnLineJoint = new JointSlider(this, wheel, -new Location(up));
            JointLAxisLimit suspensionLimit  = new JointLAxisLimit(this, wheel, 0f, susp, wheel.GetPosition(), wheel.GetPosition(), -new Location(up));
            JointPullPush   spring           = new JointPullPush(this, wheel, -new Location(up), true);

            if (driving)
            {
                JointSpinner spinner = new JointSpinner(this, wheel, new Location(-left));
                TheRegion.AddJoint(spinner);
            }
            else
            {
                JointSwivelHinge swivelhinge = new JointSwivelHinge(this, wheel, new Location(up), new Location(-left));
                TheRegion.AddJoint(swivelhinge);
            }
            TheRegion.AddJoint(pointOnLineJoint);
            TheRegion.AddJoint(suspensionLimit);
            TheRegion.AddJoint(spring);
            JointNoCollide jnc = new JointNoCollide(this, wheel);

            TheRegion.AddJoint(jnc);
            if (powered)
            {
                JointVehicleMotor motor = new JointVehicleMotor(this, wheel, new Location(driving ? left : up), !driving);
                TheRegion.AddJoint(motor);
                return(motor);
            }
            return(null);
        }