public void AddKinematicsSphere(GPBody body, float radius, int groupId) { var bodyId = kinematicsBodies.Length; var collider = new GPSphereCollider(bodyId, radius); ArrayUtils.Add(ref kinematicsBodies, body); ArrayUtils.Add(ref kinematicsSphereColliders, collider); }
public void AddPointJoint(GPBody body, Vector3 point, Matrix4x4 matrix, float elasticity) { var bodyId = Array.IndexOf(bodies, body); Assert.IsTrue(bodyId >= 0, "Add body to world first"); var joint = new GPPointJoint(bodyId, matrices.Length, point, elasticity); ArrayUtils.Add(ref pointJoints, joint); ArrayUtils.Add(ref matrices, matrix); }
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 UpdateBodies(List <SphereCollider> colliders) { if (bodies == null) { bodies = new GPBody[colliders.Count]; } for (var i = 0; i < colliders.Count; i++) { var sphereCollider = colliders[i]; var transformedPoint = sphereCollider.transform.TransformPoint(sphereCollider.center); bodies[i] = new GPBody(transformedPoint); } }
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); }
private void UpdateBodies() { var vertices = provider.GetVertices(); var matrices = provider.GetTransforms(); if (bodies == null) { bodies = new GPBody[vertices.Count]; } for (int i = 0; i < vertices.Count; i++) { var matrix = matrices[0]; var vertex = matrix.MultiplyPoint3x4(vertices[i]); bodies[i] = new GPBody(vertex);//todo maybe should be global transform } }