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); }
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(); }
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."); } }
public override void SetGravity(Vector3D gravity) { jitterWorld.Gravity = JitterDatatypesMapping.Convert(ref gravity); }
public override void ApplyAngularImpulse(Vector3D impulse) { jitterBody.ApplyImpulse(JitterDatatypesMapping.Convert(ref impulse)); }
/// <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)); }
/// <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)); }
/// <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)); }