From f33c270babb87fc2aac9c05f482f3a9d336bcd31 Mon Sep 17 00:00:00 2001 From: ksuprynowicz Date: Fri, 30 Jun 2023 21:48:24 +0200 Subject: [PATCH] Fixed performance issues in Create App --- scripts/system/create/edit.js | 2 +- .../system/create/entityList/entityList.js | 4 +++ .../libraries/entityIconOverlayManager.js | 35 +++++++++++++------ 3 files changed, 29 insertions(+), 12 deletions(-) diff --git a/scripts/system/create/edit.js b/scripts/system/create/edit.js index 9bb30ea01f..dabdfe34f9 100644 --- a/scripts/system/create/edit.js +++ b/scripts/system/create/edit.js @@ -156,7 +156,7 @@ selectionManager.addEventListener(function () { selectionDisplay.updateHandles(); - entityIconOverlayManager.updatePositions(); + entityIconOverlayManager.updatePositions(selectionManager.selections); entityShapeVisualizer.setEntities(selectionManager.selections); }); diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js index 86f4ccd1fd..257f967852 100644 --- a/scripts/system/create/entityList/entityList.js +++ b/scripts/system/create/entityList/entityList.js @@ -109,6 +109,10 @@ var EntityListTool = function(shouldUseEditTabletApp, selectionManager) { // ignore events that we emitted from the entity list itself return; } + // Otherwise this will emit tens of events every second when objects are moved. + if (!isSelectionUpdate) { + return; + } var selectedIDs = []; for (var i = 0; i < that.selectionManager.selections.length; i++) { diff --git a/scripts/system/libraries/entityIconOverlayManager.js b/scripts/system/libraries/entityIconOverlayManager.js index f2ca5625ea..fa73444d1e 100644 --- a/scripts/system/libraries/entityIconOverlayManager.js +++ b/scripts/system/libraries/entityIconOverlayManager.js @@ -16,20 +16,33 @@ EntityIconOverlayManager = function(entityTypes, getOverlayPropertiesFunc) { // Map from EntityItemID to EntityItemID object var entityIDs = {}; + function updateEntity(entityID) { + var properties = Entities.getEntityProperties(entityID); + var overlayProperties = { + position: properties.position + }; + if (getOverlayPropertiesFunc) { + var customProperties = getOverlayPropertiesFunc(entityID, properties); + for (var key in customProperties) { + overlayProperties[key] = customProperties[key]; + } + } + Entities.editEntity(entityOverlays[entityID], overlayProperties); + } + this.updatePositions = function(ids) { - for (var id in entityIDs) { - var entityID = entityIDs[id]; - var properties = Entities.getEntityProperties(entityID); - var overlayProperties = { - position: properties.position - }; - if (getOverlayPropertiesFunc) { - var customProperties = getOverlayPropertiesFunc(entityID, properties); - for (var key in customProperties) { - overlayProperties[key] = customProperties[key]; + if (ids) { + for (var index in ids) { + var id = ids[index]; + if (entityIDs[id]) { + updateEntity(entityIDs[id]); } } - Entities.editEntity(entityOverlays[entityID], overlayProperties); + } else { + for (var id in entityIDs) { + var entityID = entityIDs[id]; + updateEntity(entityID); + } } };