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(); }
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(); }