From 3f14a7a26297c6db1f78e1c543cedc5ddf41ab5d Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Wed, 27 May 2015 21:00:20 -0700 Subject: [PATCH] allow entities to have multiple items --- .../src/EntityTreeRenderer.cpp | 21 ++++++++++++------- .../src/EntityTreeRenderer.h | 2 +- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 9818657c5a..0f58ecb30a 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -98,11 +98,13 @@ void EntityTreeRenderer::clear() { qDebug() << "EntityTreeRenderer::clear() need to clear the scene... "; render::Scene::PendingChanges pendingChanges; - QHashIterator i(_entityToSceneItems); - while (i.hasNext()) { - i.next(); - render::ItemID renderItem = i.value(); - pendingChanges.removeItem(renderItem); + + QList keys = _entityToSceneItems.uniqueKeys(); + for (auto key : keys) { + QList values = _entityToSceneItems.values(key); + for (auto renderItem : values) { + pendingChanges.removeItem(renderItem); + } } _entityToSceneItems.clear(); _viewState->getMain3DScene()->enqueuePendingChanges(pendingChanges); @@ -1073,8 +1075,11 @@ void EntityTreeRenderer::deletingEntity(const EntityItemID& entityID) { render::Scene::PendingChanges pendingChanges; if (_entityToSceneItems.contains(entityID)) { - render::ItemID renderItem = _entityToSceneItems[entityID]; - pendingChanges.removeItem(renderItem); + + QList values = _entityToSceneItems.values(entityID); + for (render::ItemID renderItem : values) { + pendingChanges.removeItem(renderItem); + } _viewState->getMain3DScene()->enqueuePendingChanges(pendingChanges); } } @@ -1087,7 +1092,7 @@ void EntityTreeRenderer::addingEntity(const EntityItemID& entityID) { if (entity->canRenderInScene()) { render::Scene::PendingChanges pendingChanges; render::ItemID renderItem = _viewState->getMain3DScene()->allocateID(); - _entityToSceneItems[entityID] = renderItem; + _entityToSceneItems.insert(entityID, renderItem); auto renderData = RenderableEntityItem::Pointer(new RenderableEntityItem(entity)); auto renderPayload = render::PayloadPointer(new RenderableEntityItem::Payload(renderData)); diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.h b/libraries/entities-renderer/src/EntityTreeRenderer.h index 22d6703069..90b4859a32 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.h +++ b/libraries/entities-renderer/src/EntityTreeRenderer.h @@ -187,7 +187,7 @@ private: float _previousStageHour; int _previousStageDay; - QHash _entityToSceneItems; + QMultiHash _entityToSceneItems; };