public override void Build()
{
AddGround();
for (int i = 0; i < 15; i++)
{
bool even = (i % 2 == 0);
for (int e = 0; e < 3; e++)
{
JVector size = (even) ? new JVector(1, 1, 3) : new JVector(3, 1, 1);
RigidBody body = new RigidBody(new BoxShape(size));
body.Position = new JVector(3.0f + (even ? e : 1.0f), i + 0.5f, -5.0f + (even ? 1.0f : e));
Demo.World.AddBody(body);
}
}
Model model = this.Demo.Content.Load<Model>("torus");
List<TriangleVertexIndices> indices = new List<TriangleVertexIndices>();
List<JVector> vertices = new List<JVector>();
ConvexHullObject.ExtractData(vertices, indices, model);
RemoveDuplicateVertices(indices, vertices);
SoftBody softBody = new SoftBody(indices, vertices);
softBody.Translate(new JVector(10, 5, 0));
softBody.Pressure = 1000.0f;
softBody.SetSpringValues(0.2f, 0.005f);
//softBody.SelfCollision = true; ;
Demo.World.AddBody(softBody);
SoftBody cloth = new SoftBody(20,20,0.4f);
// ##### Uncomment for selfcollision, all 3 lines
//cloth.SelfCollision = true;
//cloth.TriangleExpansion = 0.05f;
//cloth.VertexExpansion = 0.05f;
cloth.Translate(new JVector(0, 10, 10));
cloth.Material.KineticFriction = 0.9f;
cloth.Material.StaticFriction = 0.95f;
cloth.VertexBodies[0].IsStatic = true;
cloth.VertexBodies[380].IsStatic = true;
cloth.VertexBodies[19].IsStatic = true;
cloth.VertexBodies[399].IsStatic = true;
cloth.SetSpringValues(SoftBody.SpringType.EdgeSpring, 0.1f, 0.01f);
cloth.SetSpringValues(SoftBody.SpringType.ShearSpring, 0.1f, 0.03f);
cloth.SetSpringValues(SoftBody.SpringType.BendSpring, 0.1f, 0.03f);
// ###### Uncomment here for a better visualization
// Demo.Components.Add(new ClothObject(Demo, cloth));
Demo.World.AddBody(cloth);
}