public PseudoCloth(World world, int sizeX, int sizeY, float scale) { bodies = new PseudoClothBody[sizeX * sizeY]; for (int i = 0; i < sizeX; i++) { for (int e = 0; e < sizeX; e++) { bodies[i + e * sizeY] = new PseudoClothBody(0.1f); bodies[i + e * sizeY].Position = new JVector(i * scale, 0, e * scale) + JVector.Up * 10.0f; bodies[i + e * sizeY].StaticFriction =0.5f; bodies[i + e * sizeY].DynamicFriction = 0.5f; bodies[i + e * sizeY].Mass = 0.1f; world.AddBody(bodies[i + e * sizeY]); } } world.CollisionSystem.PassedBroadphase += new Collision.PassedBroadphaseHandler(CollisionSystem_PassedBroadphase); world.PostStep += new WorldStep(world_PostStep); this.world = world; for (int i = 0; i < sizeX; i++) { for (int e = 0; e < sizeY; e++) { if (i + 1 < sizeX) { AddDistance(e * sizeY + i, (i + 1) + e * sizeY); // (i,e) and (i+1,e) } if (e + 1 < sizeY) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + i); // (e,i) and (e+1,i) } if( (i + 1 < sizeX) && (e + 1 < sizeY)) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) +( i+1)); } if ((i > 0) && (e + 1 < sizeY)) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + (i - 1)); } } } this.sizeX = sizeX; this.sizeY = sizeY; this.scale = scale; }
public PseudoCloth(World world, int sizeX, int sizeY, float scale) { this.world = world; bodies = new PseudoClothBody[sizeX * sizeY]; for (int i = 0; i < sizeX; i++) { for (int e = 0; e < sizeX; e++) { bodies[i + e * sizeY] = new PseudoClothBody(0.1f); bodies[i + e * sizeY].Position = new JVector(i * scale, 0, e * scale) + JVector.Up * 10.0f; bodies[i + e * sizeY].Material.StaticFriction = 0.9f; bodies[i + e * sizeY].Material.KineticFriction = 0.9f; bodies[i + e * sizeY].Material.Restitution = 0.1f; bodies[i + e * sizeY].Mass = 0.1f; world.AddBody(bodies[i + e * sizeY]); } } world.CollisionSystem.PassedBroadphase += new Collision.PassedBroadphaseHandler(CollisionSystem_PassedBroadphase); world.Events.PostStep += new World.WorldStep(world_PostStep); for (int i = 0; i < sizeX; i++) { for (int e = 0; e < sizeY; e++) { if (i + 1 < sizeX) { AddDistance(e * sizeY + i, (i + 1) + e * sizeY); // (i,e) and (i+1,e) } if (e + 1 < sizeY) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + i); // (e,i) and (e+1,i) } if ((i + 1 < sizeX) && (e + 1 < sizeY)) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + (i + 1)); } if ((i > 0) && (e + 1 < sizeY)) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + (i - 1)); } } } this.sizeX = sizeX; this.sizeY = sizeY; this.scale = scale; }
public PseudoCloth(World world, sccsVD4VE_LightNWithoutVr.sc_console.SC_console_directx D3D, IntPtr windowsHandle, int sizeX, int sizeY, float scale, Matrix matter) //World world, { this.world = world; bodies = new PseudoClothBody[sizeX * sizeY]; //bodies = new SC_VR_Cube[sizeX * sizeY]; float r = 0.05f; float g = 0.05f; float b = 0.05f; float a = 1; int instX = 1; int instY = 1; int instZ = 1; float offsetPosX = 0; float offsetPosY = 0; float offsetPosZ = 0; Matrix _tempMatroxer = matter; //_tempMatroxer.M42 = 0; float cubesizex = 0.5f; float cubesizey = 0.1f; float cubesizez = 0.5f; float _size_screen = 0.05f; _cube = new SC_cube(); //bool _hasinit0 = _cube.Initialize(D3D, D3D.SurfaceWidth, D3D.SurfaceHeight, _size_screen, 1, 1, 0.05f, 0.01f, 0.05f, new Vector4(r, g, b, a), instX, instY, instZ, windowsHandle, _tempMatroxer, 3, offsetPosX, offsetPosY, offsetPosZ); //, "terrainGrassDirt.bmp" //0.00035f var _hasinit0 = _cube.Initialize(D3D, D3D.SurfaceWidth, D3D.SurfaceHeight, _size_screen, 1, 1, cubesizex * _size_screen, cubesizey * _size_screen, cubesizez * _size_screen, new Vector4(r, g, b, a), sizeX, instY, sizeX, windowsHandle, _tempMatroxer, 4, offsetPosX, offsetPosY, offsetPosZ, world, sccsVD4VE_LightNWithoutVr.sc_console.SC_console_directx.BodyTag.sc_jitter_cloth, true, 1, 10, 0, 0, 0); //, "terrainGrassDirt.bmp" //0.00035f _size_screen = 0.0006f; var counter = 0; for (int x = 0; x < sizeX; x++) { for (int y = 0; y < sizeX; y++) { _tempMatroxer = matter; //Console.WriteLine("f**k off"); // new PseudoClothBody(0.1f); //_cube.Initialize(SC_Console_DIRECTX._device, 0.1f, 0.1f, 0.1f,1,1,1, matter, 1, 1, 1); //test.Initialize(DirectXComponent._device, 0.25f, 0.1f, 0.25f, new Vector4(0.1f, 0.1f, 0.1f, 1)); //SharpDX.Direct3D11.Device device, float _sizeX, float _sizeY, float _sizeZ //test.transform.Component.rigidbody = new RigidBody(new BoxShape(0.5f, 0.2f, 0.5f)); //test.transform.Component.rigidbody.Position = new JVector(i * scale, 0, e * scale); //+ JVector.Up * 10.0f //test.transform.Component.rigidbody.Material.KineticFriction = 50; //test.transform.Component.rigidbody.Material.StaticFriction = 50; //test.transform.Component.rigidbody.Mass = 0.1f; //1 //test.transform.Component.rigidbody.Tag = DirectXComponent.BodyTag.someTest; List <JVector> vertices = new List <JVector>(); for (int j = 0; j < _cube.Vertices.Length; j++) { vertices.Add(new JVector(_cube.Vertices[j].position.X, _cube.Vertices[j].position.Y, _cube.Vertices[j].position.Z)); } //test.transform.Component.rigidbody.Shape = new ConvexHullShape(vertices); var pos = new JVector((x * scale * 0.5f), 0, (y * scale * 0.5f)) + new JVector(_tempMatroxer.M41, _tempMatroxer.M42, _tempMatroxer.M43); bodies[x + y * sizeY] = new PseudoClothBody(); bodies[x + y * sizeY].Position = pos; // new JVector(i * scale, 0, e * scale) + new JVector(_tempMatroxer.M41, _tempMatroxer.M42, _tempMatroxer.M43); // + JVector.Up * 5 + JVector.Up * 10.0f //i * scale, 0, e * scale bodies[x + y * sizeY].Orientation = JMatrix.Identity; // (0,0,0,1); bodies[x + y * sizeY].Material.StaticFriction = 0.45f; bodies[x + y * sizeY].Material.KineticFriction = 0.45f; bodies[x + y * sizeY].Mass = 5f; //1 bodies[x + y * sizeY].Tag = sccsVD4VE_LightNWithoutVr.sc_console.SC_console_directx.BodyTag.pseudoCloth; bodies[x + y * sizeY].Shape = new ConvexHullShape(vertices); //bodies[x + y * sizeY].Shape = new BoxShape(); _tempMatroxer.M41 = new JVector(x * scale * cubesizex, 0, y * scale * cubesizey).X; // + (sizeX * 0.25f); _tempMatroxer.M42 = new JVector(x * scale * cubesizex, 0, y * scale * cubesizey).Y; // + (sizeX * 0.25f); _tempMatroxer.M43 = new JVector(x * scale * cubesizex, 0, y * scale * cubesizey).Z; // + (sizeX * 0.25f); _cube._arrayOfInstances[counter]._POSITION = _tempMatroxer; //bodies[i + e * sizeY].IsStatic = true; if (x == 0 && y == 0) { bodies[x + y * sizeY].IsStatic = true; } else if (x == sizeX - 1 && y == 0) { bodies[x + y * sizeY].IsStatic = true; } else if (x == 0 && y == sizeX - 1) { bodies[x + y * sizeY].IsStatic = true; } else if (x == sizeX - 1 && y == sizeX - 1) { bodies[x + y * sizeY].IsStatic = true; } else if (x == 0) { bodies[x + y * sizeY].IsStatic = true; } else if (y == 0) { bodies[x + y * sizeY].IsStatic = true; } else if (x == (int)sizeX - 1) { bodies[x + y * sizeY].IsStatic = true; } else if (y == (int)sizeY - 1) { bodies[x + y * sizeY].IsStatic = true; } /*else if (x == (int)sizeX * 0.5f && y == 0) * { * bodies[x + y * sizeY].IsStatic = true; * } * else if (x == 0 && y == (int)sizeY * 0.5f) * { * bodies[x + y * sizeY].IsStatic = true; * }*/ //TO READADD OTHERWISE IT WONT WORK. BUT IT WORKS WITH THIS VERSION SOMEWHOW //SC_Console_GRAPHICS._arrayOfClothCubes.Add(_cube); //TO READADD OTHERWISE IT WONT WORK. BUT IT WORKS WITH THIS VERSION SOMEWHOW //DirectXComponent.World.AddBody(bodies[i + e * sizeY].transform.Component.rigidbody);*/ world.AddBody(bodies[x + y * sizeY]); //DirectXComponent.World.AddBody(test.transform.Component.rigidbody); counter++; } } world.CollisionSystem.PassedBroadphase += new Collision.PassedBroadphaseHandler(CollisionSystem_PassedBroadphase); world.Events.PostStep += new World.WorldStep(world_PostStep); for (int i = 0; i < sizeX; i++) { for (int e = 0; e < sizeY; e++) { //i *= 0.1f; if (i + 1 < sizeX) { AddDistance(e * sizeY + i, (i + 1) + e * sizeY); // (i,e) and (i+1,e) } if (e + 1 < sizeY) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + i); // (e,i) and (e+1,i) } if ((i + 1 < sizeX) && (e + 1 < sizeY)) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + (i + 1)); } if ((i > 0) && (e + 1 < sizeY)) { AddDistance(e * sizeY + i, ((e + 1) * sizeY) + (i - 1)); } /*if (i == (int)sizeX - 1) * { * * } * if (e == (int)sizeY - 1) * { * * }*/ } } this.sizeX = sizeX; this.sizeY = sizeY; this.scale = scale; }