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); }
/// <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() }); }
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(); }
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 }
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; }
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)); }
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; }
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)); }
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)); }
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); }
/// <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)); }
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); }
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)); }
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); }
/// <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)); }
ICompositeFixture IFactoryOf <ICompositeFixture, FixtureDescriptor> .Create(FixtureDescriptor descriptor) { return(new CompositeFixture(_compositeFixture._rigidBody, descriptor, _compositeFixture._realPose)); }
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)); }
/// <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;
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)); }
/// <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; }
/// <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; }
/// <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); }
public static ISimpleFixture CreateSimpleFixture(this IFactory <IFixture> factory, FixtureDescriptor descriptor) { return(factory.Create <ISimpleFixture, FixtureDescriptor>(descriptor)); }
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; }
public static ICompositeFixture CreateCompositeFixture(this IFactory <IFixture> factory, FixtureDescriptor descriptor) { return(factory.Create <ICompositeFixture, FixtureDescriptor>(descriptor)); }