Example #1
0
            public unsafe void Execute(int workItemIndex)
            {
                OutputStream.Begin(workItemIndex);
                foreach (TriggerEvent triggerEvent in TriggerEvents)
                {
                    RigidBody bodyA = World.Bodies[triggerEvent.BodyIndices.BodyAIndex];
                    RigidBody bodyB = World.Bodies[triggerEvent.BodyIndices.BodyBIndex];

                    bool IsTrigger(Collider *collider, ColliderKey key)
                    {
                        if (collider->CollisionType == CollisionType.Convex)
                        {
                            return(((ConvexColliderHeader *)collider)->Material.IsTrigger);
                        }
                        else
                        {
                            collider->GetLeaf(key, out ChildCollider child);
                            collider = child.Collider;
                            UnityEngine.Assertions.Assert.IsTrue(collider->CollisionType == CollisionType.Convex);
                            return(((ConvexColliderHeader *)collider)->Material.IsTrigger);
                        }
                    }

                    char[] text = "Triggered".ToCharArray();
                    if (IsTrigger(bodyA.Collider, triggerEvent.ColliderKeys.ColliderKeyA))
                    {
                        OutputStream.Text(text, bodyA.WorldFromBody.pos, Color.green);
                    }
                    if (IsTrigger(bodyB.Collider, triggerEvent.ColliderKeys.ColliderKeyB))
                    {
                        OutputStream.Text(text, bodyB.WorldFromBody.pos, Color.green);
                    }
                }
                OutputStream.End();
            }
Example #2
0
            public unsafe void Execute(int workItemIndex)
            {
                OutputStream.Begin(workItemIndex);
                foreach (CollisionEvent collisionEvent in CollisionEvents)
                {
                    float3 offset = new float3(0, 1, 0);

                    RigidBody bodyA        = World.Bodies[collisionEvent.BodyIndices.BodyAIndex];
                    RigidBody bodyB        = World.Bodies[collisionEvent.BodyIndices.BodyBIndex];
                    float     totalImpulse = math.csum(collisionEvent.AccumulatedImpulses);

                    bool AreCollisionEventsEnabled(Collider *collider, ColliderKey key)
                    {
                        if (collider->CollisionType == CollisionType.Convex)
                        {
                            return(((ConvexColliderHeader *)collider)->Material.EnableCollisionEvents);
                        }
                        else
                        {
                            collider->GetLeaf(key, out ChildCollider child);
                            collider = child.Collider;
                            UnityEngine.Assertions.Assert.IsTrue(collider->CollisionType == CollisionType.Convex);
                            return(((ConvexColliderHeader *)collider)->Material.EnableCollisionEvents);
                        }
                    }

                    if (AreCollisionEventsEnabled(bodyA.Collider, collisionEvent.ColliderKeys.ColliderKeyA))
                    {
                        OutputStream.Text(totalImpulse.ToString().ToCharArray(), bodyA.WorldFromBody.pos + offset, Color.blue);
                    }
                    if (AreCollisionEventsEnabled(bodyB.Collider, collisionEvent.ColliderKeys.ColliderKeyB))
                    {
                        OutputStream.Text(totalImpulse.ToString().ToCharArray(), bodyB.WorldFromBody.pos + offset, Color.blue);
                    }
                }
                OutputStream.End();
            }