private void AabbPhantom_CollidableAdded(ref Havok.HkpCollidableAddedEvent eventData) { var rb = eventData.RigidBody; if (rb == null) // ignore phantoms { return; } var entities = rb.GetAllEntities(); foreach (var entity in entities) { var grid = entity.Physics as MyGridPhysics; var character = entity.Physics as MyPhysicsBody; // I get both rigid bodies reported but they don't match, I will only track RB 1 if (IsDynamicGrid(rb, grid) || IsCharacter(rb, character)) { using (m_nearbyEntitiesLock.AcquireExclusiveUsing()) { //unreliable //Debug.Assert(!m_nearbyEntities.Contains(entity), "Entity added twice"); m_nearbyEntities.Add(entity); } } } entities.Clear(); }
private void AabbPhantom_CollidableAdded(ref Havok.HkpCollidableAddedEvent eventData) { var rb = eventData.RigidBody; if (rb == null) // ignore phantoms { return; } var grid = rb.UserObject as MyGridPhysics; var character = rb.UserObject as MyPhysicsBody; // I get both rigid bodies reported but they don't match, I will only track RB 1 if (IsDynamicGrid(rb, grid) || IsCharacter(rb, character)) { using (m_nearbyEntitiesLock.AcquireExclusiveUsing()) { IMyEntity entity = grid == null ? character.Entity : grid.Entity; Debug.Assert(!m_nearbyEntities.Contains(entity), "Entity added twice"); m_nearbyEntities.Add(entity); } } }