From 28067662a246702fb2b00d5f1855f1b4e4c151e4 Mon Sep 17 00:00:00 2001 From: AlexandreSi <32449369+AlexandreSi@users.noreply.github.com> Date: Tue, 5 Dec 2023 16:59:43 +0100 Subject: [PATCH] Try at removing instances renderer directly after removal --- .../InstancesRenderer/LayerRenderer.js | 14 ++++++++++++++ .../src/InstancesEditor/InstancesRenderer/index.js | 12 ++++++++++++ .../app/src/InstancesEditor/SelectedInstances.js | 2 ++ newIDE/app/src/InstancesEditor/index.js | 10 +++++++++- newIDE/app/src/SceneEditor/EditorsDisplay.flow.js | 1 + .../src/SceneEditor/MosaicEditorsDisplay/index.js | 3 +++ .../SwipeableDrawerEditorsDisplay/index.js | 3 +++ newIDE/app/src/SceneEditor/index.js | 14 ++++++++++---- 8 files changed, 54 insertions(+), 5 deletions(-) diff --git a/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js b/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js index e2b3ccfbd07a..2b2c73c36f15 100644 --- a/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js +++ b/newIDE/app/src/InstancesEditor/InstancesRenderer/LayerRenderer.js @@ -743,6 +743,18 @@ export default class LayerRenderer { } } + destroyInstanceRenderers(instances: gdInitialInstance[]) { + console.log('layer.destroyInstanceRenderers: ', instances.length) + for (let instanceToDestroy of instances) { + console.log('instance to destroy for object ', instanceToDestroy.getObjectName()) + const renderedInstance = this.renderedInstances[instanceToDestroy.ptr] + if (renderedInstance) { + console.log("DESTROY") + renderedInstance.onRemovedFromScene(); + } + } + } + /** * Remove rendered instances that are not associated to any instance anymore * (this can happen after an instance has been deleted). @@ -753,7 +765,9 @@ export default class LayerRenderer { if (this.renderedInstances.hasOwnProperty(i)) { const renderedInstance = this.renderedInstances[i]; if (!renderedInstance.wasUsed) { + console.log("was not used, on remove from scene") renderedInstance.onRemovedFromScene(); + console.log("delete rendered instance") delete this.renderedInstances[i]; } else renderedInstance.wasUsed = false; } diff --git a/newIDE/app/src/InstancesEditor/InstancesRenderer/index.js b/newIDE/app/src/InstancesEditor/InstancesRenderer/index.js index 7c5df61a5c45..4cd09151fbe5 100644 --- a/newIDE/app/src/InstancesEditor/InstancesRenderer/index.js +++ b/newIDE/app/src/InstancesEditor/InstancesRenderer/index.js @@ -329,6 +329,18 @@ export default class InstancesRenderer { } } + destroyInstanceRenderers(instances: gdInitialInstance[]) { + console.log("DESTROY INSTANCES RENDERERS") + for (let i in this.layersRenderers) { + if (this.layersRenderers.hasOwnProperty(i)) { + const layerRenderer = this.layersRenderers[i]; + + console.log("DESTROY INSTANCES RENDERERS in layer") + layerRenderer.destroyInstanceRenderers(instances); + } + } + } + /** * Clean up rendered layers that are not existing anymore */ diff --git a/newIDE/app/src/InstancesEditor/SelectedInstances.js b/newIDE/app/src/InstancesEditor/SelectedInstances.js index 7dae44401599..cc17b5168462 100644 --- a/newIDE/app/src/InstancesEditor/SelectedInstances.js +++ b/newIDE/app/src/InstancesEditor/SelectedInstances.js @@ -234,6 +234,8 @@ export default class SelectedInstances { } const instance = selection[i]; + console.log(instance, instance.getObjectName()) + const instanceRect = this.instanceMeasurer.getInstanceAABB( instance, new Rectangle() diff --git a/newIDE/app/src/InstancesEditor/index.js b/newIDE/app/src/InstancesEditor/index.js index ac2eebde3f52..9a899cb61790 100644 --- a/newIDE/app/src/InstancesEditor/index.js +++ b/newIDE/app/src/InstancesEditor/index.js @@ -621,6 +621,11 @@ export default class InstancesEditor extends Component { ); }; + destroyInstanceRenderers = (instances: gdInitialInstance[]) => { + console.log('instancesEditor.destroyInstanceRenderers: ', instances.length); + this.instancesRenderer.destroyInstanceRenderers(instances); + }; + /** * Immediately add serialized instances at the given * position (in scene coordinates). @@ -783,7 +788,10 @@ export default class InstancesEditor extends Component { return; } - console.log('on down instance, select'); + console.log( + 'on down instance, select, object name:', + instance.getObjectName() + ); this.props.instancesSelection.selectInstance({ instance, multiSelect: this.keyboardShortcuts.shouldMultiSelect(), diff --git a/newIDE/app/src/SceneEditor/EditorsDisplay.flow.js b/newIDE/app/src/SceneEditor/EditorsDisplay.flow.js index 4ddb9746c67b..1720688d5751 100644 --- a/newIDE/app/src/SceneEditor/EditorsDisplay.flow.js +++ b/newIDE/app/src/SceneEditor/EditorsDisplay.flow.js @@ -155,5 +155,6 @@ export type SceneEditorsDisplayInterface = {| preventSnapToGrid?: boolean, addInstancesInTheForeground?: boolean, |}) => Array, + destroyInstanceRenderers: (gdInitialInstance[]) => void, |}, |}; diff --git a/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/index.js b/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/index.js index 53531d62f382..9f967724ee3d 100644 --- a/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/index.js +++ b/newIDE/app/src/SceneEditor/MosaicEditorsDisplay/index.js @@ -206,6 +206,9 @@ const MosaicEditorsDisplay = React.forwardRef< addSerializedInstances: editor ? editor.addSerializedInstances : () => [], + destroyInstanceRenderers: editor + ? editor.destroyInstanceRenderers + : () => {}, }, }; }); diff --git a/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js b/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js index 383f17056efd..2af293df3131 100644 --- a/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js +++ b/newIDE/app/src/SceneEditor/SwipeableDrawerEditorsDisplay/index.js @@ -196,6 +196,9 @@ const SwipeableDrawerEditorsDisplay = React.forwardRef< addSerializedInstances: editor ? editor.addSerializedInstances : () => [], + destroyInstanceRenderers: editor + ? editor.destroyInstanceRenderers + : () => {}, }, }; }); diff --git a/newIDE/app/src/SceneEditor/index.js b/newIDE/app/src/SceneEditor/index.js index 356e8e85ac17..23aaa6d3f6a1 100644 --- a/newIDE/app/src/SceneEditor/index.js +++ b/newIDE/app/src/SceneEditor/index.js @@ -1216,12 +1216,18 @@ export default class SceneEditor extends React.Component { console.log('removeInstance'); this.props.initialInstances.removeInstance(instance); }); + const { editorDisplay } = this; + if (editorDisplay) { + editorDisplay.instancesHandlers.destroyInstanceRenderers( + selectedInstances + ); + } - console.log('clearSelection'); + console.log('clearSelection', selectedInstances.length); this.instancesSelection.clearSelection(); - if (this.editorDisplay) { - console.log('clearHighlightedInstance'); - this.editorDisplay.instancesHandlers.clearHighlightedInstance(); + if (editorDisplay) { + console.log('clearHighlightedInstance', selectedInstances.length); + editorDisplay.instancesHandlers.clearHighlightedInstance(); } console.log('setting state');