public void AddTrigger(MyTriggerComponent trigger)
        {
            Debug.Assert(trigger != null, "Horrible Assertion! Call a programmer! Hurry!");
            MySandboxGame.AssertUpdateThread();

            if (Contains(trigger))
            {
                return;
            }

            using (m_dictionaryLock.AcquireExclusiveUsing())
            {
                CachingHashSet triggerSet;
                if (m_triggers.TryGetValue((MyEntity)trigger.Entity, out triggerSet))
                {
                    triggerSet.Add(trigger);
                }
                else
                {
                    m_triggers[(MyEntity)trigger.Entity] = new CachingHashSet {
                        trigger
                    };
                }
            }
        }
        private static void Update()
        {
            MySandboxGame.AssertUpdateThread();
            VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("MyGamePruningStructure::UpdateInternal");
            m_movedLock.AcquireExclusive();
            var x = m_moved;

            m_moved = m_movedUpdate;
            m_movedLock.ReleaseExclusive();
            m_movedUpdate = x;
            foreach (var moved in m_movedUpdate)
            {
                MoveInternal(moved);
            }
            m_movedUpdate.Clear();
            VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock();
        }