Exemplo n.º 1
0
        internal DigitalRuneDistanceRangeJoint(DistanceRangeJointDescriptor descriptor)
        {
            WrappedDistanceRangeJoint = new DistanceLimit();

            #region set RigidBodies
            if (!(descriptor.RigidBodyA is RigidBody))
            {
                throw new ArgumentException(String.Format("The type of the property 'RigidBodyA' must be '{0}'.", typeof(RigidBody)));
            }
            WrappedDistanceRangeJoint.BodyA = ((RigidBody)descriptor.RigidBodyA).WrappedRigidBody;
            _rigidBodyA = descriptor.RigidBodyA;

            if (!(descriptor.RigidBodyB is RigidBody))
            {
                throw new ArgumentException("The type of the property 'RigidBodyB' must be 'System.Physics.DigitalRune.RigidBody'.");
            }
            WrappedDistanceRangeJoint.BodyB = ((RigidBody)descriptor.RigidBodyB).WrappedRigidBody;
            _rigidBodyB = descriptor.RigidBodyB;
            #endregion
            WrappedDistanceRangeJoint.AnchorPositionALocal = descriptor.AnchorPositionALocal.ToDigitalRune();
            WrappedDistanceRangeJoint.AnchorPositionBLocal = descriptor.AnchorPositionBLocal.ToDigitalRune();
            WrappedDistanceRangeJoint.MinDistance          = descriptor.MinimumDistance;
            WrappedDistanceRangeJoint.MaxDistance          = descriptor.MaximumDistance;

            Descriptor = descriptor;
        }
            public IDistanceRangeJoint Create(DistanceRangeJointDescriptor descriptor)
            {
                var constraint = new DigitalRuneDistanceRangeJoint(descriptor);

                _simulator._wrappedSimulation.Constraints.Add(constraint.WrappedDistanceRangeJoint);
                return(constraint);
            }
Exemplo n.º 3
0
        private void CreateChain <TShape, TShapeDescriptor>(MaterialDescriptor materialDescriptor,
                                                            TShapeDescriptor shapeDescriptor,
                                                            DistanceRangeJointDescriptor constraintDescriptor,
                                                            int count, float space, int staticBall, float xOffset, float yOffset, float zOffset)
            where TShapeDescriptor : struct, IDescriptor
            where TShape : IShape, IDescriptible <TShapeDescriptor>
        {
            var bodies = new IRigidBody[count];
            var rigidBodyDescriptor = new RigidBodyDescriptor(MotionType.Static, Matrices.I, true);

            for (int i = 0; i < count; i++)
            {
                rigidBodyDescriptor.Pose = Matrices.Translate(xOffset + (space + i * space - ((count - 1) * space / 2)), yOffset, zOffset);
                bodies[i]          = _simulator.ActorsFactory.Create <IRigidBody, RigidBodyDescriptor>(rigidBodyDescriptor);
                bodies[i].UserData = String.Format("chain {0}", i);
                var fixture = bodies[i].FixtureFactory.Create <ISimpleFixture, FixtureDescriptor>(new FixtureDescriptor(Matrices.I));
                fixture.ShapeFactory.Create <TShape, TShapeDescriptor>(shapeDescriptor);
                fixture.MaterialFactory.Create <IMaterial, MaterialDescriptor>(materialDescriptor);
                if (i > 0)
                {
                    constraintDescriptor.RigidBodyA = bodies[i - 1];
                    constraintDescriptor.RigidBodyB = bodies[i];
                    _simulator.ConstraintsFactory.Create <IDistanceRangeJoint, DistanceRangeJointDescriptor>(
                        constraintDescriptor);
                }
                else
                {
                    rigidBodyDescriptor.MotionType = MotionType.Static;
                }
            }
        }
 public DefaultDistanceRangeJoint(DistanceRangeJointDescriptor descriptor)
 {
     Descriptor = descriptor;
 }
Exemplo n.º 5
0
 public static IDistanceRangeJoint CreateDistanceRangeJoint(this IFactory <IConstraint> factory,
                                                            DistanceRangeJointDescriptor descriptor)
 {
     return(factory.Create <IDistanceRangeJoint, DistanceRangeJointDescriptor>(descriptor));
 }