Esempio n. 1
0
        internal void DestroyEntity(Cv_Entity entity)
        {
            if (entity == null)
            {
                return;
            }

            foreach (var e in m_EntityList) //TODO(JM): this might get really slow with tons of entities. Optimize if it becomes a problem
            {
                if (e.ID != entity.ID && e.Parent == entity.ID && !e.DestroyRequested)
                {
                    if (e.SceneRoot)
                    {
                        UnloadScene(e.SceneID);
                    }
                    else
                    {
                        DestroyEntity(e);
                    }
                }
            }

            foreach (var e in m_EntitiesToAdd) //TODO(JM): this might get really slow with tons of entities. Optimize if it becomes a problem
            {
                if (e.ID != entity.ID && e.Parent == entity.ID && !e.DestroyRequested)
                {
                    if (e.SceneRoot)
                    {
                        UnloadScene(e.SceneID);
                    }
                    else
                    {
                        DestroyEntity(e);
                    }
                }
            }

            m_EntitiesToDestroy.Enqueue(entity);

            var destroyEntityEvent = new Cv_Event_DestroyEntity(entity.ID, this);

            Cv_EventManager.Instance.TriggerEvent(destroyEntityEvent);

            entity.OnDestroy();

            Entities.Remove(entity.ID);
            EntitiesByPath.Remove(entity.EntityPath);

            entity.DestroyRequested = true;
        }
Esempio n. 2
0
        public void OnDestroyEntity(Cv_Event eventData)
        {
            Cv_Event_DestroyEntity destroyEntity = (Cv_Event_DestroyEntity)eventData;

            RemoveNode(destroyEntity.EntityID);
        }