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; }
public void OnDestroyEntity(Cv_Event eventData) { Cv_Event_DestroyEntity destroyEntity = (Cv_Event_DestroyEntity)eventData; RemoveNode(destroyEntity.EntityID); }