private void CreateDistanceJoints() { var sizeY = settings.StandsSettings.Segments; var distanceJoints = new GroupedData <GPDistanceJoint>(); var group1 = new List <GPDistanceJoint>(); var group2 = new List <GPDistanceJoint>(); for (int i = 0; i < bodies.Length; i++) { if (i % sizeY == 0) { continue; } var body1 = bodies[i - 1]; var body2 = bodies[i]; var distance = Vector3.Distance(body1.Position, body2.Position);//to global var list = i % 2 == 0 ? group1 : group2; var joint = new GPDistanceJoint(i - 1, i, distance, 0.5f); list.Add(joint); } distanceJoints.AddGroup(group1); distanceJoints.AddGroup(group2); DistanceJoints = distanceJoints; }
public void AddDitanceJoint(int body1Id, int body2Id, float distance) { Assert.IsTrue(body1Id >= 0 && body2Id >= 0, "Add body to world first"); var joint = new GPDistanceJoint(body1Id, body2Id, distance); Data.DistanceJoints.Add(joint); }
public void AddDitanceJoint(GPBody body1, GPBody body2, float distance) { var body1Id = Array.IndexOf(bodies, body1); var body2Id = Array.IndexOf(bodies, body2); Assert.IsTrue(body1Id >= 0 && body2Id >= 0, "Add body to world first"); var joint = new GPDistanceJoint(body1Id, body2Id, distance); Data.DistanceJoints.Add(joint); }
private void InitBuffers() { TryAddBufferOrArray("matrices", data.MatricesBuffer, data.Matrices, sizeof(float) * 16); TryCreateBuffer("bodies", data.Bodies, GPBody.Size()); TryCreateBuffer("sphereColliders", data.SphereColliders, GPSphereCollider.Size()); TryCreateBuffer("kinematicBodies", data.KinematicsBodies, GPBody.Size()); TryCreateBuffer("kinematicSphereColliders", data.KinematicsSphereColliders, GPSphereCollider.Size()); TryCreateBuffer("kinematicsLineSphereColliders", data.KinematicsLineSphereColliders, GPLineSphereCollider.Size()); TryCreateBuffer("distanceJoints", data.DistanceJoints.Data, GPDistanceJoint.Size()); TryCreateBuffer("pointJoints", data.PointJoints, GPPointJoint.Size()); bodiesThreadGroupsNum = Mathf.CeilToInt(wraper.GetBuffer("bodies").count / 1024f); }