public void Execute(CollisionEvent collisionEvent) { var collisionEventBufferElement = new StatefulCollisionEvent(collisionEvent.EntityA, collisionEvent.EntityB, collisionEvent.BodyIndexA, collisionEvent.BodyIndexB, collisionEvent.ColliderKeyA, collisionEvent.ColliderKeyB, collisionEvent.Normal); var calculateDetails = false; if (EntitiesWithBuffersMap.ContainsKey(collisionEvent.EntityA)) { if (PhysicsCollisionEventBufferTags[collisionEvent.EntityA].CalculateDetails != 0) { calculateDetails = true; } } if (!calculateDetails && EntitiesWithBuffersMap.ContainsKey(collisionEvent.EntityB)) { if (PhysicsCollisionEventBufferTags[collisionEvent.EntityB].CalculateDetails != 0) { calculateDetails = true; } } if (calculateDetails) { var details = collisionEvent.CalculateDetails(ref PhysicsWorld); collisionEventBufferElement.CollisionDetails = new StatefulCollisionEvent.Details( details.EstimatedContactPointPositions.Length, details.EstimatedImpulse, details.AverageContactPointPosition); } CollisionEvents.Add(collisionEventBufferElement); }
public void Execute(CollisionEvent collisionEvent) { var statefulCollisionEvent = new StatefulCollisionEvent(collisionEvent); // Check if we should calculate the collision details bool calculateDetails = ForceCalculateDetails; if (!calculateDetails && EventDetails.HasComponent(collisionEvent.EntityA)) { calculateDetails = EventDetails[collisionEvent.EntityA].CalculateDetails; } if (!calculateDetails && EventDetails.HasComponent(collisionEvent.EntityB)) { calculateDetails = EventDetails[collisionEvent.EntityB].CalculateDetails; } if (calculateDetails) { var details = collisionEvent.CalculateDetails(ref PhysicsWorld); statefulCollisionEvent.CollisionDetails = new StatefulCollisionEvent.Details( details.EstimatedContactPointPositions.Length, details.EstimatedImpulse, details.AverageContactPointPosition); } CollisionEvents.Add(statefulCollisionEvent); }