示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
            }
        }
示例#5
0
        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);
        }
示例#6
0
        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
            }
        }