예제 #1
0
        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();
        }
예제 #2
0
        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);
                }
            }
        }