Browse Source

rebuild() + cleanup refactor

ncannasse 7 years ago
parent
commit
b540785e16

+ 8 - 7
hide/comp/SceneEditor.hx

@@ -43,12 +43,12 @@ class SceneEditorContext extends hide.prefab.EditContext {
 		return cur != null && cur.elements[0] == p ? editor.properties.element : new Element();
 	}
 
-	override function rebuild() {
+	override function rebuildProperties() {
 		editor.scene.setCurrent();
 		editor.selectObjects(elements);
 	}
 
-	override function refresh( p : hide.prefab.Prefab ) {
+	override function rebuildPrefab( p : hide.prefab.Prefab ) {
 		// refresh all for now
 		editor.refresh();
 	}
@@ -319,14 +319,15 @@ class SceneEditor {
 		var sh = context.shared;
 		sh.root3d.remove();
 		sh.root2d.remove();
-		for( f in sh.cleanups )
-			f();
-		sh.root3d = new h3d.scene.Object();
+		for( c in sh.contexts )
+			if( c != null && c.cleanup != null )
+				c.cleanup();
+		context.shared = sh = new hide.prefab.ContextShared(scene);
+		sh.currentPath = view.state.path;
 		scene.s3d.addChild(sh.root3d);
-		sh.root2d = new h2d.Sprite();
 		scene.s2d.addChild(sh.root2d);
+		scene.setCurrent();
 		scene.onResize();
-		sh.cleanups = [];
 		context.init();
 		sceneData.makeInstance(context);
 		var bgcol = scene.engine.backgroundColor;

+ 2 - 2
hide/prefab/EditContext.hx

@@ -56,13 +56,13 @@ class EditContext {
 	/**
 		Rebuild the edit window
 	**/
-	public function rebuild() {
+	public function rebuildProperties() {
 	}
 
 	/**
 		Force rebuilding makeInstance for the given hierarchy
 	**/
-	public function refresh( p : Prefab ) {
+	public function rebuildPrefab( p : Prefab ) {
 	}
 
 	public function getNamedObjects( ?exclude : h3d.scene.Object ) {

+ 2 - 2
hide/prefab/Light.hx

@@ -256,7 +256,7 @@ class Light extends Object3D {
 
 		var props = ctx.properties.add(group,this, function(pname) {
 			if( pname == "kind")
-				ctx.refresh(this);
+				ctx.rebuildPrefab(this);
 			else
 				ctx.onChange(this, pname);
 		});
@@ -283,7 +283,7 @@ class Light extends Object3D {
 			</div>
 		'),shadows,function(pname) {
 			ctx.onChange(this,pname);
-			if( pname == "mode" ) ctx.rebuild();
+			if( pname == "mode" ) ctx.rebuildProperties();
 		});
 
 		if( shadows.mode == None ) {

+ 1 - 1
hide/prefab/Noise.hx

@@ -136,7 +136,7 @@ class Noise extends Prefab {
 		bmp.x = -size >> 1;
 		bmp.y = -size >> 1;
 		ctx.local2d = bmp;
-		ctx.shared.cleanups.push(tex.dispose);
+		ctx.cleanup = function() tex.dispose();
 		return ctx;
 	}
 

+ 3 - 3
hide/prefab/Reference.hx

@@ -45,7 +45,7 @@ class Reference extends Prefab {
 
 	#if editor
 
-	
+
 	override function edit( ctx : EditContext ) {
 		var element = new hide.Element('
 			<dl>
@@ -65,8 +65,8 @@ class Reference extends Prefab {
 				ref = null;
 				updateProps();
 				if(!ctx.properties.isTempChange)
-					ctx.refresh(this);
-			}	
+					ctx.rebuildPrefab(this);
+			}
 		});
 	}
 

+ 3 - 3
hide/prefab/Settings.hx

@@ -67,13 +67,13 @@ class Settings extends Prefab {
 			var prev = save();
 			var type = select.val();
 			load({ modelType : type });
-			ctx.rebuild();
+			ctx.rebuildProperties();
 			ctx.properties.undo.change(Custom(function(undo) {
 				if( undo )
 					load(prev);
 				else
 					load({ modelType : type });
-				ctx.rebuild();
+				ctx.rebuildProperties();
 			}));
 		});
 
@@ -103,7 +103,7 @@ class Settings extends Prefab {
 			ctx.onChange(this, null);
 
 		ctx.properties.addProps(modelDef.fields, this.data);
-		var rebuild = ctx.rebuild;
+		var rebuild = ctx.rebuildProperties;
 		ctx.ide.typesCache.watch(rebuild);
 		ctx.cleanups.push(ctx.ide.typesCache.unwatch.bind(rebuild));
 	}

+ 2 - 2
hide/prefab/l3d/VolumetricLightmap.hx

@@ -229,7 +229,7 @@ class VolumetricLightmap extends Object3D {
 			if(baker == null || baker.progress == 1){
 				ctx.removeUpdate(bakeUpdate);
 				baker = null;
-				ctx.rebuild();
+				ctx.rebuildProperties();
 			}
 			else{
 				baker.update(dt);
@@ -242,7 +242,7 @@ class VolumetricLightmap extends Object3D {
 		function cancel() {
 			ctx.removeUpdate(bakeUpdate);
 			baker = null;
-			ctx.rebuild();
+			ctx.rebuildProperties();
 		}
 
 		function startedBake() {