Beispiel #1
0
        public JitterRaycastResult(CollisionSystem collisionSystem, Ray ray)
        {
            float   fraction;
            JVector rayOrigin    = JitterDatatypesMapping.Convert(ref ray.Origin);
            JVector rayDirection = JitterDatatypesMapping.Convert(ref ray.Direction);

            Found = collisionSystem.Raycast(rayOrigin, rayDirection, null, out RigidBody,
                                            out JVectorNormal, out fraction);
            Vector3D surfaceNormal = Vector3D.Zero;

            JitterDatatypesMapping.Convert(ref JVectorNormal, ref surfaceNormal);
            SurfaceNormal = surfaceNormal;
        }
        private void CreatePointPointDistanceJoint()
        {
            JVector  anchor1;
            Vector3D tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                          PropertyType.Anchor1);

            JitterDatatypesMapping.Convert(ref tempVector, out anchor1);
            JVector anchor2;

            tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                 PropertyType.Anchor2);
            JitterDatatypesMapping.Convert(ref tempVector, out anchor2);
            Constraint = new PointPointDistance(RigidBodyA, RigidBodyB, anchor1, anchor2);
        }
        private void CreateSingleBodyPointOnLineJoint()
        {
            JVector  anchor;
            Vector3D tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                          PropertyType.Anchor1);

            JitterDatatypesMapping.Convert(ref tempVector, out anchor);
            JVector lineDirection;

            tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                 PropertyType.LineDirection);
            JitterDatatypesMapping.Convert(ref tempVector, out lineDirection);
            Constraint = new global::Jitter.Dynamics.Constraints.SingleBody.PointOnLine(RigidBodyA,
                                                                                        anchor, lineDirection);
        }
        private void CreateHingeJoint(JitterPhysics physicsManager)
        {
            JVector  position;
            Vector3D tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                          PropertyType.Position);

            JitterDatatypesMapping.Convert(ref tempVector, out position);
            JVector hingeAxis;

            tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                 PropertyType.HingeAxis);
            JitterDatatypesMapping.Convert(ref tempVector, out hingeAxis);
            Joint = new HingeJoint(physicsManager.jitterWorld, RigidBodyA, RigidBodyB, position,
                                   hingeAxis);
        }
Beispiel #5
0
 public JitterPhysics()
 {
     collisionSystem = new CollisionSystemSAP();
     jitterWorld     = new World(collisionSystem)
     {
         AllowDeactivation = true
     };
     jitterWorld.SetIterations(100, 100);
     jitterWorld.SetDampingFactors(0.95f, 0.95f);
     jitterWorld.SetInactivityThreshold(0.005f, 0.005f, 10);
     jitterWorld.Gravity = JitterDatatypesMapping.ConvertSlow(DefaultGravity);
     jitterWorld.Events.BodiesBeginCollide += BeginCollision;
     jitterWorld.Events.BodiesEndCollide   += EndCollision;
     CreateGroundBody();
 }
Beispiel #6
0
 public JitterBody(JitterPhysics physicsManager, PhysicsShape shape, Vector3D initialPosition,
                   float mass, float restitution)
     : base(shape)
 {
     CreateShape();
     RotationMatrix = Matrix.Identity;
     jitterBody     = new RigidBody(jitterShape)
     {
         IsStatic = false,
         Mass     = mass,
         Material = { Restitution = restitution },
         Position = JitterDatatypesMapping.Convert(ref initialPosition),
         Tag      = this
     };
     physicsManager.jitterWorld.AddBody(jitterBody);
 }
        private void CreatePointOnPointJoint()
        {
            JVector  localAnchor;
            Vector3D tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                          PropertyType.Anchor1);

            JitterDatatypesMapping.Convert(ref tempVector, out localAnchor);
            if (RigidBodyB != null)
            {
                Constraint = new PointOnPoint(RigidBodyA, RigidBodyB, localAnchor);
            }
            else
            {
                Constraint = new global::Jitter.Dynamics.Constraints.SingleBody.PointOnPoint(RigidBodyA,
                                                                                             localAnchor);
            }
        }
        private void CreatePointOnLineJoint()
        {
            JVector  lineStartPointBody1;
            Vector3D tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                          PropertyType.LineStartPointBody);

            JitterDatatypesMapping.Convert(ref tempVector, out lineStartPointBody1);
            JVector pointBody2;

            tempVector = ArrayExtensions.GetWithDefault <PropertyType, Vector3D>(Properties,
                                                                                 PropertyType.PointBody);
            JitterDatatypesMapping.Convert(ref tempVector, out pointBody2);
            if (RigidBodyB != null)
            {
                Constraint = new PointOnLine(RigidBodyA, RigidBodyB, lineStartPointBody1, pointBody2);
            }
            else
            {
                Logger.Warning("You're trying to create PointOnLine with second " +
                               "body at null.Maybe you should create SingleBodyPointOnLine.");
            }
        }
Beispiel #9
0
 public override void SetGravity(Vector3D gravity)
 {
     jitterWorld.Gravity = JitterDatatypesMapping.Convert(ref gravity);
 }
Beispiel #10
0
 public override void ApplyAngularImpulse(Vector3D impulse)
 {
     jitterBody.ApplyImpulse(JitterDatatypesMapping.Convert(ref impulse));
 }
Beispiel #11
0
 /// <summary>
 /// Apply an impulse at a point. This immediately modifies the velocity. It wakes up the body
 /// and modifies the angular velocity if the point of application is not at the center of mass.
 /// </summary>
 public override void ApplyLinearImpulse(Vector3D impulse, Vector3D impulsePosition)
 {
     jitterBody.ApplyImpulse(JitterDatatypesMapping.Convert(ref impulse),
                             JitterDatatypesMapping.Convert(ref impulsePosition));
 }
Beispiel #12
0
 /// <summary>
 /// Apply a torque. This affects the angular velocity without affecting the linear velocity of
 /// the center of mass. It wakes up the body.
 /// </summary>
 public override void ApplyTorque(Vector3D torque)
 {
     jitterBody.AddTorque(JitterDatatypesMapping.Convert(ref torque));
 }
Beispiel #13
0
 /// <summary>
 /// Apply a force at a world point. If the force is not applied at the center of mass, it will
 /// generate a torque and affect the angular velocity. This wakes up the body.
 /// </summary>
 public override void ApplyForce(Vector3D force, Vector3D forcePosition)
 {
     jitterBody.AddForce(JitterDatatypesMapping.Convert(ref force),
                         JitterDatatypesMapping.Convert(ref forcePosition));
 }