2
0
Эх сурвалжийг харах

fixes wrt heaps prefabs changes

ncannasse 6 жил өмнө
parent
commit
cc4bdf2202

+ 4 - 11
hide/Ide.hx

@@ -650,25 +650,18 @@ class Ide {
 			return null;
 		var l = hxd.prefab.Library.create(file.split(".").pop().toLowerCase());
 		try {
-			l.load(parseJSON(sys.io.File.getContent(getPath(file))));
+			l.loadData(parseJSON(sys.io.File.getContent(getPath(file))));
 		} catch( e : Dynamic ) {
 			error("Invalid prefab ("+e+")");
 			throw e;
 		}
-		if( cl == null || Std.is(l,cl) )
+		if( cl == null )
 			return cast l;
 		return l.get(cl);
 	}
 
 	public function savePrefab( file : String, f : hide.prefab.Prefab ) {
-		var content;
-		if( Std.is(f,hxd.prefab.Library) )
-			content = f.save();
-		else {
-			var l = new hxd.prefab.Library();
-			@:privateAccess l.children.push(f); // hack (don't remove f from current parent)
-			content = l.save();
-		}
+		var content = f.saveData();
 		sys.io.File.saveContent(getPath(file), toJSON(content));
 	}
 
@@ -688,7 +681,7 @@ class Ide {
 			}
 			filterRec(prefab);
 			if( !changed ) return;
-			todo.push(function() sys.io.File.saveContent(getPath(path), toJSON(prefab.save())));
+			todo.push(function() sys.io.File.saveContent(getPath(path), toJSON(prefab.saveData())));
 		});
 		for( t in todo )
 			t();

+ 17 - 17
hide/comp/SceneEditor.hx

@@ -387,7 +387,7 @@ class SceneEditor {
 		scene.setCurrent();
 		scene.onResize();
 		context.init();
-		sceneData.makeInstance(context);
+		sceneData.make(context);
 		var bgcol = scene.engine.backgroundColor;
 		scene.init();
 		scene.engine.backgroundColor = bgcol;
@@ -568,7 +568,7 @@ class SceneEditor {
 				return x;
 			}
 
-			var prevState = [for(o in objects3d) o.save()];
+			var prevState = [for(o in objects3d) o.saveTransform()];
 			gizmo.onMove = function(translate: h3d.Vector, rot: h3d.Quat, scale: h3d.Vector) {
 				var transf = new h3d.Matrix();
 				transf.identity();
@@ -615,19 +615,19 @@ class SceneEditor {
 			}
 
 			gizmo.onFinishMove = function() {
-				var newState = [for(o in objects3d) o.save()];
+				var newState = [for(o in objects3d) o.saveTransform()];
 				refreshProps();
 				undo.change(Custom(function(undo) {
 					if( undo ) {
 						for(i in 0...objects3d.length) {
-							objects3d[i].load(prevState[i]);
+							objects3d[i].loadTransform(prevState[i]);
 							objects3d[i].applyPos(sceneObjs[i]);
 						}
 						refreshProps();
 					}
 					else {
 						for(i in 0...objects3d.length) {
-							objects3d[i].load(newState[i]);
+							objects3d[i].loadTransform(newState[i]);
 							objects3d[i].applyPos(sceneObjs[i]);
 						}
 						refreshProps();
@@ -828,9 +828,9 @@ class SceneEditor {
 
 	function makeInstance(elt: PrefabElement) {
 		var parentCtx = getContext(elt.parent);
-		elt.makeInstanceRec(parentCtx);
-		makeInteractive(elt);
-		elt.visitChildren(function(e) { makeInteractive(e); return true; });
+		elt.make(parentCtx);
+		for( p in elt.flatten() )
+			makeInteractive(p);
 	}
 
 	public function addObject(e : PrefabElement) {
@@ -1044,7 +1044,7 @@ class SceneEditor {
 		var parentCtx = getContext(parent);
 		if(parentCtx == null)
 			parentCtx = context;
-		group.makeInstance(parentCtx);
+		group.make(parentCtx);
 		var groupCtx = getContext(group);
 
 		var reparentUndo = reparentImpl(elts, group, 0);
@@ -1070,14 +1070,14 @@ class SceneEditor {
 	function onCopy() {
 		if(curEdit == null) return;
 		if(curEdit.rootElements.length == 1) {
-			view.setClipboard(curEdit.rootElements[0].saveRec(), "prefab");
+			view.setClipboard(curEdit.rootElements[0].saveData(), "prefab");
 		}
 		else {
 			var lib = new hxd.prefab.Library();
 			for(e in curEdit.rootElements) {
 				lib.children.push(e);
 			}
-			view.setClipboard(lib.saveRec(), "library");
+			view.setClipboard(lib.saveData(), "library");
 		}
 	}
 
@@ -1088,14 +1088,14 @@ class SceneEditor {
 		}
 		var obj = haxe.Json.parse(haxe.Json.stringify(view.getClipboard("prefab")));
 		if(obj != null) {
-			var p = hide.prefab.Prefab.loadRec(obj, parent);
+			var p = hide.prefab.Prefab.loadPrefab(obj, parent);
 			autoName(p);
 			refresh();
 		}
 		else {
 			obj = view.getClipboard("library");
 			if(obj != null) {
-				var lib = hide.prefab.Prefab.loadRec(obj);
+				var lib = hide.prefab.Prefab.loadPrefab(obj);
 				for(c in lib.children) {
 					autoName(c);
 					c.parent = parent;
@@ -1369,9 +1369,9 @@ class SceneEditor {
 				var parentMat = worldMat(toElt);
 				parentMat.invert();
 				mat.multiply(mat, parentMat);
-				prevState = obj3d.save();
+				prevState = obj3d.saveTransform();
 				obj3d.setTransform(mat);
-				newState = obj3d.save();
+				newState = obj3d.saveTransform();
 			}
 
 			elt.parent = toElt;
@@ -1384,13 +1384,13 @@ class SceneEditor {
 					prev.children.remove(elt);
 					prev.children.insert(prevIndex, elt);
 					if(obj3d != null && prevState != null)
-						obj3d.load(prevState);
+						obj3d.loadTransform(prevState);
 				} else {
 					elt.parent = toElt;
 					toElt.children.remove(elt);
 					toElt.children.insert(index, elt);
 					if(obj3d != null && newState != null)
-						obj3d.load(newState);
+						obj3d.loadTransform(newState);
 				};
 			});
 		}

+ 2 - 2
hide/prefab/Curve.hx

@@ -41,7 +41,7 @@ class Curve extends Prefab {
 		this.type = "curve";
 	}
 
-	override function load(o:Dynamic) {
+	public override function load(o:Dynamic) {
 		duration = o.duration;
 		keys = [];
 		if(o.keys != null) {
@@ -63,7 +63,7 @@ class Curve extends Prefab {
 			keyMode = o.keyMode;
 	}
 
-	override function save() {
+	public override function save() {
 		var keysDat = [];
 		for(k in keys) {
 			var o = {

+ 4 - 1
hide/prefab/Noise.hx

@@ -130,7 +130,10 @@ class Noise extends Prefab {
 	}
 
 	override function reload(p:Dynamic) {
-		if( tex != null ) tex.dispose();
+		if( tex != null ) {
+			tex.dispose();
+			tex = null;
+		}
 		super.reload(p);
 	}
 

+ 16 - 0
hide/prefab/Object3D.hx

@@ -15,6 +15,22 @@ class Object3D extends Prefab {
 	public var rotationZ : Float = 0.;
 	public var visible : Bool = true;
 
+	public function loadTransform(t) {
+		x = t.x;
+		y = t.y;
+		z = t.z;
+		scaleX = t.scaleX;
+		scaleY = t.scaleY;
+		scaleZ = t.scaleZ;
+		rotationX = t.rotationX;
+		rotationY = t.rotationY;
+		rotationZ = t.rotationZ;
+	}
+
+	public function saveTransform() {
+		return { x : x, y : y, z : z, scaleX : scaleX, scaleY : scaleY, scaleZ : scaleZ, rotationX : rotationX, rotationY : rotationY, rotationZ : rotationZ };
+	}
+
 	override function load( obj : Dynamic ) {
 		x = obj.x == null ? 0. : obj.x;
 		y = obj.y == null ? 0. : obj.y;

+ 1 - 1
hide/prefab/Reference.hx

@@ -84,7 +84,7 @@ class Reference extends Object3D {
 		else {
 			ctx = ctx.clone(this);
 			ctx.isRef = true;
-			var refCtx = p.makeInstanceRec(ctx);
+			var refCtx = p.make(ctx);
 			ctx.local3d = refCtx.local3d;
 			updateInstance(ctx);
 		}

+ 2 - 2
hide/prefab/Trail.hx

@@ -20,7 +20,7 @@ class Trail extends Object3D {
 		return obj;
 	}
 
-	public function make( ?parent : h3d.scene.Object ) {
+	public function create( ?parent : h3d.scene.Object ) {
 		var tr = new h3d.scene.Trail(parent);
 		tr.load(data);
 		applyPos(tr);
@@ -30,7 +30,7 @@ class Trail extends Object3D {
 
 	override function makeInstance(ctx:Context):Context {
 		ctx = ctx.clone(this);
-		var tr = make(ctx.local3d);
+		var tr = create(ctx.local3d);
 		ctx.local3d = tr;
 		return ctx;
 	}

+ 2 - 3
hide/prefab/fx/Emitter.hx

@@ -669,10 +669,9 @@ class Emitter extends Object3D {
 		}
 	}
 
-	override function makeInstanceRec(ctx: Context) {
-		ctx = makeInstance(ctx);
-		return ctx;
+	override function make(ctx: Context) {
 		// Don't make children, which are used to setup particles
+		return makeInstance(ctx);
 	}
 
 	static inline function randProp(name: String) {

+ 4 - 6
hide/prefab/fx/FX.hx

@@ -437,9 +437,7 @@ class FX extends hxd.prefab.Library {
 		return new FXAnimation(parent);
 	}
 
-	override function makeInstance( ctx : Context ) : Context {
-		if( inRec ) return ctx;
-
+	override function make( ctx : Context ) : Context {
 		ctx = ctx.clone(this);
 		var fxanim = createInstance(ctx.local3d);
 		fxanim.duration = duration;
@@ -448,19 +446,19 @@ class FX extends hxd.prefab.Library {
 		fxanim.playSpeed = 1.0;
 
 		#if editor
-		super.makeInstance(ctx);
+		super.make(ctx);
 		setupRenderer(ctx, this);
 		#else
 		var root = getFXRoot(ctx, this);
 		if(root != null){
 			for( c in root.children ){
 				var co = Std.instance(c , Constraint);
-				if(co == null) c.makeInstanceRec(ctx);
+				if(co == null) c.make(ctx);
 			}
 			getConstraints(ctx, root, fxanim.constraints);
 		}
 		else
-			super.makeInstance(ctx);
+			super.make(ctx);
 		#end
 
 		getObjAnimations(ctx, this, fxanim.objects);

+ 3 - 3
hide/view/FXEditor.hx

@@ -156,7 +156,7 @@ class FXEditor extends FileView {
 	var fxScriptParser : hide.prefab.fx.FXScriptParser;
 
 	override function getDefaultContent() {
-		return haxe.io.Bytes.ofString(ide.toJSON(new hide.prefab.fx.FX().save()));
+		return haxe.io.Bytes.ofString(ide.toJSON(new hide.prefab.fx.FX().saveData()));
 	}
 
 	override function onFileChanged(wasDeleted:Bool) {
@@ -171,7 +171,7 @@ class FXEditor extends FileView {
 	}
 
 	override function save() {
-		var content = ide.toJSON(data.save());
+		var content = ide.toJSON(data.saveData());
 		var newSign = haxe.crypto.Md5.encode(content);
 		if(newSign != currentSign)
 			haxe.Timer.delay(saveBackup.bind(content), 0);
@@ -186,7 +186,7 @@ class FXEditor extends FileView {
 		xOffset = -timelineLeftMargin / xScale;
 		data = new hide.prefab.fx.FX();
 		var content = sys.io.File.getContent(getPath());
-		data.load(haxe.Json.parse(content));
+		data.loadData(haxe.Json.parse(content));
 		currentSign = haxe.crypto.Md5.encode(content);
 
 		element.html('

+ 3 - 3
hide/view/Prefab.hx

@@ -46,7 +46,7 @@ class Prefab extends FileView {
 	var currentSign : String;
 
 	override function getDefaultContent() {
-		return haxe.io.Bytes.ofString(ide.toJSON(new hxd.prefab.Library().save()));
+		return haxe.io.Bytes.ofString(ide.toJSON(new hxd.prefab.Library().saveData()));
 	}
 
 	override function onFileChanged(wasDeleted:Bool) {
@@ -61,7 +61,7 @@ class Prefab extends FileView {
 	}
 
 	override function save() {
-		var content = ide.toJSON(data.save());
+		var content = ide.toJSON(data.saveData());
 		currentSign = haxe.crypto.Md5.encode(content);
 		sys.io.File.saveContent(getPath(), content);
 		super.save();
@@ -71,7 +71,7 @@ class Prefab extends FileView {
 		saveDisplayKey = "Prefab:" + getPath().split("\\").join("/").substr(0,-1);
 		data = new hxd.prefab.Library();
 		var content = sys.io.File.getContent(getPath());
-		data.load(haxe.Json.parse(content));
+		data.loadData(haxe.Json.parse(content));
 		currentSign = haxe.crypto.Md5.encode(content);
 
 		element.html('

+ 8 - 13
hide/view/l3d/Level3D.hx

@@ -307,7 +307,7 @@ class Level3D extends FileView {
 		saveDisplayKey = "Level3D:" + getPath().split("\\").join("/").substr(0,-1);
 		data = new hide.prefab.l3d.Level3D();
 		var content = sys.io.File.getContent(getPath());
-		data.load(haxe.Json.parse(content));
+		data.loadData(haxe.Json.parse(content));
 		currentSign = haxe.crypto.Md5.encode(content);
 
 		element.html('
@@ -451,7 +451,7 @@ class Level3D extends FileView {
 	}
 
 	override function getDefaultContent() {
-		return haxe.io.Bytes.ofString(ide.toJSON(new hide.prefab.l3d.Level3D().save()));
+		return haxe.io.Bytes.ofString(ide.toJSON(new hide.prefab.l3d.Level3D().saveData()));
 	}
 
 	override function onFileChanged(wasDeleted:Bool) {
@@ -466,7 +466,7 @@ class Level3D extends FileView {
 	}
 
 	override function save() {
-		var content = ide.toJSON(data.save());
+		var content = ide.toJSON(data.saveData());
 		var newSign = haxe.crypto.Md5.encode(content);
 		if(newSign != currentSign)
 			haxe.Timer.delay(saveBackup.bind(content), 0);
@@ -696,17 +696,12 @@ class Level3D extends FileView {
 	function getGroundPolys() {
 		var groundGroups = data.findAll(p -> if(p.name == "ground") p else null);
 		var ret = [];
-		for(group in groundGroups) {
-			group.visitChildren(function(p) {
+		for(group in groundGroups)
+			group.findAll(function(p) {
 				if(p.name == "nocollide")
-					return false;
-				var pp = p.to(hide.prefab.l3d.Polygon);
-				if(pp == null)
-					return false;
-				ret.push(pp);
-				return true;
-			});
-		}
+					return null;
+				return p.to(hide.prefab.l3d.Polygon);
+			},ret);
 		return ret;
 	}
 

+ 1 - 1
hide/view/l3d/LightProbeBaker.hx

@@ -84,7 +84,7 @@ class LightProbeBaker {
 					filter(c);
 		}
 		filter(sceneData);
-		sceneData.makeInstance(context);
+		sceneData.make(context);
 
 		/*function disableFaceCulling( o : Object ){
 			for( m in o.getMaterials() )