Exemple #1
0
        private static IRigidBody SetSnowman(ISimulator simulator, Matrix4x4 pose)
        {
            var rigidBody = simulator.ActorsFactory.CreateRigidBody(new RigidBodyDescriptor(MotionType.Dynamic, pose));

            var fixtureDescriptor = new FixtureDescriptor(Matrices.I);
            var compositeFixture  = rigidBody.FixtureFactory.CreateCompositeFixture(fixtureDescriptor);

            //head
            var simpleFixture = compositeFixture.FixtureFactory.CreateSimpleFixture(
                new FixtureDescriptor(Matrices.Translate(0, 4f, 0)));

            simpleFixture.ShapeFactory.CreateSphere(new SphereShapeDescriptor(0.7f));

            //body
            simpleFixture = compositeFixture.FixtureFactory.CreateSimpleFixture(
                new FixtureDescriptor(Matrices.Translate(0, 3, 0)));
            simpleFixture.ShapeFactory.CreateSphere(new SphereShapeDescriptor(1));

            //legs?
            simpleFixture = compositeFixture.FixtureFactory.CreateSimpleFixture(
                new FixtureDescriptor(Matrices.Translate(0, 1.5f, 0)));
            simpleFixture.ShapeFactory.CreateSphere(new SphereShapeDescriptor(1.5f));
            rigidBody.MassFrame.UpdateFromShape();
            return(rigidBody);
        }
Exemple #2
0
    /// <summary>
    /// Formats a fixture with the specified descriptor of it.
    /// </summary>
    /// <param name="descriptor">The descriptor of the fixture.</param>
    /// <returns>The formatted description.</returns>
    protected virtual FormattedDescription FormatFixture(FixtureDescriptor descriptor)
    {
        PreviousStepType = null;

        var fixtureName = FixtureNames.GetOrDefault(descriptor.FixtureAttributeType, () => ToDefaultFixtureName(descriptor)) ?? string.Empty;

        var lines = descriptor.Description.Split(new[] { Environment.NewLine }, StringSplitOptions.None);

        if (!string.IsNullOrEmpty(fixtureName))
        {
            lines[0] = FormatFixture(fixtureName, lines[0]);
        }

        var descriptionItems = new List <FormattedDescription>();

        descriptionItems.AddRange(FormatNarrative(descriptor.Benefit, descriptor.Role, descriptor.Feature));

        var backgroundDescription = FormatBackground(descriptor.Background);

        if (backgroundDescription is not null)
        {
            descriptionItems.Add(backgroundDescription);
        }

        return(new FormattedDescription
        {
            Lines = lines,
            FirstLineIndent = FixtureFirstLineIndent(fixtureName),
            LineIndent = FixtureLineIndent(fixtureName),
            Items = descriptionItems.AsReadOnly()
        });
    }
Exemple #3
0
        public static void SetFrictionScene(ISimulator simulator)
        {
            const int   maxI      = 8;
            const float alphaGrad = 33;

            for (int i = 0; i <= maxI; i++)
            {
                SetSimpleRigidBody <IBoxShape, BoxShapeDescriptor>(simulator,
                                                                   new RigidBodyDescriptor(MotionType.Dynamic,
                                                                                           GMath.mul(
                                                                                               Matrices.Translate(
                                                                                                   2 * i - maxI, 0.5f, 0),
                                                                                               Matrices.RotateZGrad(
                                                                                                   alphaGrad))),
                                                                   new BoxShapeDescriptor(1, 1, 1, _motionColor),
                                                                   new MaterialDescriptor(friction: (maxI - i) * 1f / maxI,
                                                                                          restitution: 0.5f));
            }

            //create inclined ground
            var groundRigidBody =
                simulator.ActorsFactory.CreateRigidBody(new RigidBodyDescriptor(MotionType.Static, Matrices.I));
            var fixtureDescriptor = new FixtureDescriptor(Matrices.RotateZGrad(alphaGrad));
            var simpleFixture     = groundRigidBody.FixtureFactory.CreateSimpleFixture(fixtureDescriptor);

            simpleFixture.ShapeFactory.Create <IPlaneShape, PlaneShapeDescriptor>(new PlaneShapeDescriptor(
                                                                                      Vectors.YAxis, 0, _groundColor));
            simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.0f, restitution: 0.5f));
            groundRigidBody.MassFrame.UpdateFromShape();
        }
Exemple #4
0
        public static void SetSimpleScene(ISimulator simulator)
        {
            #region Create a box

            //create a rigidBody
            var boxRigidBodyDescriptor = new RigidBodyDescriptor(MotionType.Dynamic, Matrices.Translate(0, 10, 0));
            var boxRigidBody           = simulator.ActorsFactory.CreateRigidBody(boxRigidBodyDescriptor);

            //create a simple fixture for the rigidBody
            var fixtureDescriptor = new FixtureDescriptor(Matrices.I);
            var simpleFixture     = boxRigidBody.FixtureFactory.CreateSimpleFixture(fixtureDescriptor);

            //define the shape for the simple fixture
            var boxShapeDescriptor = new BoxShapeDescriptor(3, 3, 3, _motionColor);
            simpleFixture.ShapeFactory.CreateBox(boxShapeDescriptor);

            //define the material for the simple fixture
            var materialDescriptor = new MaterialDescriptor(friction: 0.5f, restitution: 0.6f);
            simpleFixture.MaterialFactory.CreateMaterial(materialDescriptor);
            boxRigidBody.MassFrame.UpdateFromShape();

            #endregion

            #region Create a plane for the ground

            var groundRigidBody =
                simulator.ActorsFactory.CreateRigidBody(new RigidBodyDescriptor(MotionType.Static, Matrices.I));
            var groundSimpleFixture =
                groundRigidBody.FixtureFactory.CreateSimpleFixture(new FixtureDescriptor(Matrices.I));
            groundSimpleFixture.ShapeFactory.CreatePlane(new PlaneShapeDescriptor(Vectors.YAxis, 0, _groundColor));
            groundSimpleFixture.MaterialFactory.CreateMaterial(materialDescriptor);

            #endregion
        }
Exemple #5
0
 internal CompositeFixture(RigidBody rigidBody, FixtureDescriptor descriptor, Matrix4x4 realParentPose)
 {
     _rigidBody      = rigidBody;
     _pose           = descriptor.Pose;
     _realParentPose = realParentPose;
     _realPose       = GMath.mul(_pose, _realParentPose);
     FixtureFactory  = new CompositeFixtureFixtureFactory(this);
     UserData        = descriptor.UserData;
 }
Exemple #6
0
 void Ex02()
 {
     Given(
         "FixtureDescriptor the full name of which is Carna.Runner.Fixture",
         () => FixtureDescriptor = new FixtureDescriptor("Fixture", "Carna.Runner.Fixture", new AssemblyFixtureAttribute())
         );
     Given(@"a pattern of regular expression that is 'Runner\.F+'", () => Pattern = @"Runner\.F+");
     Expect("the result of a filter should be true", () => FilterOf(Pattern).Accept(FixtureDescriptor));
 }
Exemple #7
0
 internal SimpleFixture(RigidBody rigidBody, FixtureDescriptor descriptor, Matrix4x4 realParentPose)
 {
     _rigidBody      = rigidBody;
     _pose           = descriptor.Pose;
     _realParentPose = realParentPose;
     _realPose       = GMath.mul(_pose, _realParentPose);
     ShapeFactory    = new SimpleFixtureShapeFactory(this);
     MaterialFactory = new SimpleFixtureMaterialFactory(this);
     UserData        = descriptor.UserData;
 }
Exemple #8
0
 void Ex01()
 {
     Given(
         "FixtureDescriptor the tag of which is Test",
         () => FixtureDescriptor = new FixtureDescriptor("Fixture", new AssemblyFixtureAttribute {
         Tag = "Test"
     })
         );
     Given("a pattern of regular expression that is 'T+'", () => Pattern = "T+");
     Expect("the result of a filter should be true", () => FilterOf(Pattern).Accept(FixtureDescriptor));
 }
Exemple #9
0
 void Ex04()
 {
     Given(
         "FixtureDescriptor the tag of which is Test and the full name of which is Carna.Runner.Fixture",
         () => FixtureDescriptor = new FixtureDescriptor("Fixture", "Carna.Runner.Fixture", new AssemblyFixtureAttribute {
         Tag = "Test"
     })
         );
     Given("a pattern of regular expression that is null", () => Pattern = null);
     Expect("the result of a filter should be true", () => FilterOf(Pattern).Accept(FixtureDescriptor));
 }
Exemple #10
0
        public static void SetCompositeScene(ISimulator simulator)
        {
            for (int i = 0; i < 1; i++)
            {
                var rigidBodyDescriptor = new RigidBodyDescriptor(MotionType.Dynamic,
                                                                  GMath.mul(Matrices.RotateZGrad(-20),
                                                                            Matrices.Translate(0, 20 * i + 7, 0)),
                                                                  _motionColor);
                var rigidBody = simulator.ActorsFactory.CreateRigidBody(rigidBodyDescriptor);

                var fixtureDescriptor = new FixtureDescriptor(Matrices.I);
                var compositeFixture  = rigidBody.FixtureFactory.CreateCompositeFixture(fixtureDescriptor);

                var simpleFixture =
                    compositeFixture.FixtureFactory.CreateSimpleFixture(
                        new FixtureDescriptor(Matrices.Translate(0, 2.5f, 0)));
                simpleFixture.ShapeFactory.CreateBox(new BoxShapeDescriptor(1, 5, 1));
                simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.5f, restitution: 0f));


                simpleFixture =
                    compositeFixture.FixtureFactory.CreateSimpleFixture(
                        new FixtureDescriptor(Matrices.Translate(0, 2.5f, 5)));
                simpleFixture.ShapeFactory.CreateBox(new BoxShapeDescriptor(1, 5, 1));
                simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.5f, restitution: 0f));

                simpleFixture =
                    compositeFixture.FixtureFactory.CreateSimpleFixture(
                        new FixtureDescriptor(Matrices.Translate(5, 2.5f, 0)));
                simpleFixture.ShapeFactory.CreateBox(new BoxShapeDescriptor(1, 5, 1));
                simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.5f, restitution: 1f));

                simpleFixture =
                    compositeFixture.FixtureFactory.CreateSimpleFixture(
                        new FixtureDescriptor(Matrices.Translate(5, 2.5f, 5)));
                simpleFixture.ShapeFactory.CreateBox(new BoxShapeDescriptor(1, 5, 1));
                simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.5f, restitution: 1f));

                simpleFixture =
                    compositeFixture.FixtureFactory.CreateSimpleFixture(
                        new FixtureDescriptor(Matrices.Translate(2.5f, 5.1f, 2.5f)));
                simpleFixture.ShapeFactory.CreateBox(new BoxShapeDescriptor(6, 0.2f, 6));

                simpleFixture =
                    compositeFixture.FixtureFactory.CreateSimpleFixture(
                        new FixtureDescriptor(Matrices.Translate(5.5f, 8f, 2.5f)));
                simpleFixture.ShapeFactory.CreateBox(new BoxShapeDescriptor(0.2f, 6, 6));
                simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.5f, restitution: 1f));

                rigidBody.MassFrame.UpdateFromShape();
            }
            SetGround(simulator, new MaterialDescriptor(friction: 0.5f, restitution: 1f));
        }
 public CompositeFixture(DR.RigidBody wrappedRigidBody, FixtureDescriptor descriptor)
 {
     _root     = true;
     _pose     = descriptor.Pose;
     _realPose = _pose;
     _wrappedCompositeMaterial = new CompositeMaterial();
     wrappedRigidBody.Material = _wrappedCompositeMaterial;
     _wrappedCompositeShape    = new CompositeShape();
     wrappedRigidBody.Shape    = _wrappedCompositeShape;
     UserData       = descriptor.UserData;
     FixtureFactory = new CompositeFixtureFixtureFactory(this);
 }
Exemple #12
0
    /// <summary>
    /// Determines whether to run a fixture of the specified descriptor.
    /// </summary>
    /// <param name="descriptor">The descriptor of the fixture.</param>
    /// <returns>
    /// <c>true</c> if a fixture is run; otherwise, <c>false</c>.
    /// </returns>
    protected virtual bool Accept(FixtureDescriptor descriptor)
    {
        if (string.IsNullOrEmpty(Pattern))
        {
            return(true);
        }

        var regex = new Regex(Pattern, RegexOptions.Compiled);

        return((descriptor.Tag is not null && regex.IsMatch(descriptor.Tag)) ||
               regex.IsMatch(descriptor.FullName));
    }
Exemple #13
0
 SimpleFixture(DR.RigidBody wrappedRigidBody, FixtureDescriptor descriptor)
 {
     _wrappedRigidBody          = wrappedRigidBody;
     _wrappedGeometricObject    = new GeometricObject(new EmptyShape(), descriptor.Pose.ToDigitalRune());
     _wrappedRigidBody.Shape    = new TransformedShape(_wrappedGeometricObject);
     _wrappedRigidBody.Material = new UniformMaterial();
     UserData        = descriptor.UserData;
     _pose           = descriptor.Pose;
     ShapeFactory    = new SimpleFixtureShapeFactory(this);
     _root           = true;
     MaterialFactory = new SimpleFixtureMaterialFactory(this);
 }
Exemple #14
0
            ISimpleFixture IFactoryOf <ISimpleFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor)
            {
                var wrappedCompositeShape    = _compositeFixture._wrappedCompositeShape;
                var wrappedCompositeMaterial = _compositeFixture._wrappedCompositeMaterial;

                var childPose       = GMath.mul(descriptor.Pose, _compositeFixture._realPose);
                var geometricObject = new GeometricObject(new EmptyShape(), childPose.ToDigitalRune());

                var uniformMaterial = new UniformMaterial();

                wrappedCompositeShape.Children.Add(geometricObject);
                wrappedCompositeMaterial.Materials.Add(uniformMaterial);
                return(new SimpleFixture(geometricObject, wrappedCompositeMaterial.Materials, uniformMaterial, descriptor, _compositeFixture._realPose));
            }
Exemple #15
0
        private static IRigidBody SetSimpleRigidBody <TShape, TShapeDescriptor>(ISimulator simulator,
                                                                                RigidBodyDescriptor rigidBodyDescriptor,
                                                                                TShapeDescriptor descriptor,
                                                                                MaterialDescriptor materialDescriptor)
            where TShape : IShape, IDescriptible <TShapeDescriptor>
            where TShapeDescriptor : struct, IDescriptor
        {
            var rigidBody = simulator.ActorsFactory.CreateRigidBody(rigidBodyDescriptor);

            var fixtureDescriptor = new FixtureDescriptor(Matrices.I);
            var simpleFixture     = rigidBody.FixtureFactory.CreateSimpleFixture(fixtureDescriptor);

            simpleFixture.ShapeFactory.Create <TShape, TShapeDescriptor>(descriptor);
            simpleFixture.MaterialFactory.CreateMaterial(materialDescriptor);

            rigidBody.MassFrame.UpdateFromShape();
            return(rigidBody);
        }
Exemple #16
0
 /// <summary>
 /// Creates a new instance of the <see cref="Builder"/> class
 /// with the specified descriptor of a fixture.
 /// </summary>
 /// <param name="descriptor">The descriptor of a fixture.</param>
 /// <returns>
 /// The new instance of the <see cref="Builder"/> class.
 /// </returns>
 public static Builder Of(FixtureDescriptor descriptor) => new(descriptor);
 private CompositeFixture(CompositeShape wrappedCompositeShape, CompositeMaterial wrappedCompositeMaterial, Matrix4x4 realParentPose, FixtureDescriptor descriptor)
 {
     _root                     = false;
     _realParentPose           = realParentPose;
     _pose                     = descriptor.Pose;
     _realPose                 = GMath.mul(_pose, _realParentPose);
     UserData                  = descriptor.UserData;
     _wrappedCompositeMaterial = wrappedCompositeMaterial;
     _wrappedCompositeShape    = wrappedCompositeShape;
     FixtureFactory            = new CompositeFixtureFixtureFactory(this);
 }
 ISimpleFixture IFactoryOf <ISimpleFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor)
 {
     return(new SimpleFixture(_rigidBody.WrappedRigidBody, descriptor));
 }
 ICompositeFixture IFactoryOf <ICompositeFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor)
 {
     return(new CompositeFixture(_rigidBody.WrappedRigidBody, descriptor));
 }
Exemple #20
0
 ICompositeFixture IFactoryOf <ICompositeFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor)
 {
     return(new CompositeFixture(_compositeFixture._rigidBody, descriptor, _compositeFixture._realPose));
 }
Exemple #21
0
        public static void SetDominoScene(ISimulator simulator)
        {
            const int   levelsCount   = 5;
            const int   dominoesCount = 10;
            const float alphaGrad     = 30;

            //ball
            SetSimpleRigidBody <ISphereShape, SphereShapeDescriptor>(simulator,
                                                                     new RigidBodyDescriptor(MotionType.Dynamic,
                                                                                             GMath.mul(
                                                                                                 Matrices.Translate(-20,
                                                                                                                    1f, 0),
                                                                                                 Matrices.RotateZGrad(
                                                                                                     alphaGrad))),
                                                                     new SphereShapeDescriptor(1f, _motionColor),
                                                                     new MaterialDescriptor(friction: 0.9f,
                                                                                            restitution: 0.1f));

            //dominoes
            for (int i = 0; i < dominoesCount; i++)
            {
                SetSimpleRigidBody <IBoxShape, BoxShapeDescriptor>(simulator,
                                                                   new RigidBodyDescriptor(MotionType.Dynamic,
                                                                                           Matrices.Translate(
                                                                                               1.7f * i + 3.6f, 1f, 0)),
                                                                   new BoxShapeDescriptor(0.2f, 2, 1),
                                                                   new MaterialDescriptor(friction: 0.9f,
                                                                                          restitution: 0.7f));
            }


            //castle
            for (int i = 0; i < levelsCount; i++)
            {
                //wall left
                SetSimpleRigidBody <IBoxShape, BoxShapeDescriptor>(simulator,
                                                                   new RigidBodyDescriptor(MotionType.Dynamic,
                                                                                           Matrices.Translate(1,
                                                                                                              i * 2.2f + 1f,
                                                                                                              0)),
                                                                   new BoxShapeDescriptor(0.2f, 2, 1),
                                                                   new MaterialDescriptor(friction: 0.9f,
                                                                                          restitution: 0.7f));

                //wall right
                SetSimpleRigidBody <IBoxShape, BoxShapeDescriptor>(simulator,
                                                                   new RigidBodyDescriptor(MotionType.Dynamic,
                                                                                           Matrices.Translate(2.3f,
                                                                                                              i * 2.2f + 1f,
                                                                                                              0)),
                                                                   new BoxShapeDescriptor(0.2f, 2, 1),
                                                                   new MaterialDescriptor(friction: 0.9f,
                                                                                          restitution: 0.7f));

                //floor
                SetSimpleRigidBody <IBoxShape, BoxShapeDescriptor>(simulator,
                                                                   new RigidBodyDescriptor(MotionType.Dynamic,
                                                                                           Matrices.Translate(
                                                                                               2.3f / 2 + 0.5f,
                                                                                               i * 2.2f + 2.1f, 0)),
                                                                   new BoxShapeDescriptor(2, 0.2f, 1),
                                                                   new MaterialDescriptor(friction: 0.9f,
                                                                                          restitution: 0.7f));
            }

            //inclined ground
            var groundRigidBody =
                simulator.ActorsFactory.CreateRigidBody(new RigidBodyDescriptor(MotionType.Static, Matrices.I));
            var fixtureDescriptor = new FixtureDescriptor(Matrices.RotateZGrad(alphaGrad));
            var simpleFixture     = groundRigidBody.FixtureFactory.CreateSimpleFixture(fixtureDescriptor);

            simpleFixture.ShapeFactory.Create <IPlaneShape, PlaneShapeDescriptor>(new PlaneShapeDescriptor(
                                                                                      Vectors.YAxis, 0, _groundColor));
            simpleFixture.MaterialFactory.CreateMaterial(new MaterialDescriptor(friction: 0.05f, restitution: 0.5f));
            groundRigidBody.MassFrame.UpdateFromShape();

            //straight plane
            SetSimpleRigidBody <IPlaneShape, PlaneShapeDescriptor>(simulator,
                                                                   new RigidBodyDescriptor(MotionType.Static, Matrices.I),
                                                                   new PlaneShapeDescriptor(Vectors.YAxis, 0,
                                                                                            _groundColor),
                                                                   new MaterialDescriptor(friction: 0.9f,
                                                                                          restitution: 0.7f));
        }
Exemple #22
0
 /// <summary>
 /// Gets a default fixture name of the specified descriptor of a fixture.
 /// </summary>
 /// <param name="descriptor">The descriptor of a fixture.</param>
 /// <returns>The default fixture name of the specified descriptor of a fixture.</returns>
 protected virtual string ToDefaultFixtureName(FixtureDescriptor descriptor) => string.Empty;
Exemple #23
0
 ICompositeFixture IFactoryOf <ICompositeFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor)
 {
     return(new CompositeFixture(_compositeFixture._wrappedCompositeShape, _compositeFixture._wrappedCompositeMaterial, _compositeFixture._realPose, descriptor));
 }
 ICompositeFixture IFactoryOf <ICompositeFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor)
 {
     return(new CompositeFixture(_rigidBody, descriptor, Matrices.I));
 }
Exemple #25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FixtureBase"/> class
 /// with the specified type of an instance of a fixture and a descriptor of a fixture.
 /// </summary>
 /// <param name="fixtureInstanceType">The type of an instance of a fixture.</param>
 /// <param name="fixtureDescriptor">The descriptor of a fixture.</param>
 protected FixtureBase(Type fixtureInstanceType, FixtureDescriptor fixtureDescriptor)
 {
     FixtureInstanceType = fixtureInstanceType;
     FixtureDescriptor   = fixtureDescriptor;
 }
Exemple #26
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Builder"/> class
 /// with the specified descriptor of a fixture.
 /// </summary>
 /// <param name="descriptor">The descriptor of a fixture.</param>
 public Builder(FixtureDescriptor descriptor)
 {
     FixtureDescriptor = descriptor;
 }
Exemple #27
0
 /// <summary>
 /// Initializes a new instance of the <see cref="FixtureBase"/> class
 /// with the specified name and attribute that specifies a fixture.
 /// </summary>
 /// <param name="name">The name of a fixture.</param>
 /// <param name="attribute">The attribute that specifies a fixture.</param>
 protected FixtureBase(string name, FixtureAttribute attribute)
 {
     FixtureDescriptor = new FixtureDescriptor(name, attribute);
 }
Exemple #28
0
 public static ISimpleFixture CreateSimpleFixture(this IFactory <IFixture> factory,
                                                  FixtureDescriptor descriptor)
 {
     return(factory.Create <ISimpleFixture, FixtureDescriptor>(descriptor));
 }
Exemple #29
0
 public SimpleFixture(GeometricObject geometricObject, List <UniformMaterial> materialCollection, UniformMaterial material, FixtureDescriptor descriptor, Matrix4x4 realParentPose)
 {
     _wrappedGeometricObject = geometricObject;
     _materialCollection     = materialCollection;
     _material       = material;
     UserData        = descriptor.UserData;
     ShapeFactory    = new SimpleFixtureShapeFactory(this);
     MaterialFactory = new SimpleFixtureMaterialFactory(this);
     _pose           = descriptor.Pose;
     _root           = false;
     _realParentPose = realParentPose;
 }
Exemple #30
0
 public static ICompositeFixture CreateCompositeFixture(this IFactory <IFixture> factory,
                                                        FixtureDescriptor descriptor)
 {
     return(factory.Create <ICompositeFixture, FixtureDescriptor>(descriptor));
 }