Procházet zdrojové kódy

[references] Remove old interactive when quiting edit mode

Clément Espeute před 10 měsíci
rodič
revize
b16e6e3866
2 změnil soubory, kde provedl 14 přidání a 1 odebrání
  1. 5 1
      hide/comp/SceneEditor.hx
  2. 9 0
      hrt/prefab/Reference.hx

+ 5 - 1
hide/comp/SceneEditor.hx

@@ -2333,13 +2333,17 @@ class SceneEditor {
 	}
 
 	public function refreshInteractive(elt : PrefabElement) {
+		removeInteractive(elt);
+		makeInteractive(elt);
+	}
+
+	public function removeInteractive(elt: PrefabElement) {
 		var int = interactives.get(elt);
 		if(int != null) {
 			var i3d = Std.downcast(int, h3d.scene.Interactive);
 			if( i3d != null ) i3d.remove() else cast(int,h2d.Interactive).remove();
 			interactives.remove(elt);
 		}
-		makeInteractive(elt);
 	}
 
 	function refreshInteractives() {

+ 9 - 0
hrt/prefab/Reference.hx

@@ -148,6 +148,9 @@ class Reference extends Object3D {
 
 	override public function editorRemoveObjects() : Void {
 		if (refInstance != null) {
+			for (child in refInstance.flatten()) {
+				shared.editor.removeInteractive(child);
+			}
 			refInstance.editorRemoveObjects();
 		}
 		super.editorRemoveObjects();
@@ -228,6 +231,12 @@ class Reference extends Object3D {
 						ctx.rebuildPrefab(this);
 					}
 					else {
+						if (refInstance != null) {
+							for (child in refInstance.flatten()) {
+								shared.editor.removeInteractive(child);
+							}
+						}
+
 						shared.editor.refreshInteractive(this);
 						@:privateAccess shared.editor.refreshTree();
 					}