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

L3D: Remember last selected renderProps on scene reload. Code cleanup in FXE

trethaller 6 жил өмнө
parent
commit
dd52f25904

+ 0 - 10
hide/prefab/fx/FX.hx

@@ -415,15 +415,6 @@ class FX extends hxd.prefab.Library {
 		return null;
 	}
 
-	function setupRenderer( ctx : Context, elt : PrefabElement )  {
-		var renderProps = Std.instance(elt, hide.prefab.RenderProps);
-		if(renderProps != null)
-			renderProps.applyProps(ctx.local3d.getScene().renderer);
-		else
-			for(c in elt.children)
-				setupRenderer(ctx, c);
-	}
-
 	function getConstraints( ctx : Context, elt : PrefabElement, constraints : Array<hide.prefab.Constraint>){
 		var co = Std.instance(elt, hide.prefab.Constraint);
 		if(co != null)
@@ -447,7 +438,6 @@ class FX extends hxd.prefab.Library {
 
 		#if editor
 		super.make(ctx);
-		setupRenderer(ctx, this);
 		#else
 		var root = getFXRoot(ctx, this);
 		if(root != null){

+ 7 - 0
hide/view/FXEditor.hx

@@ -63,6 +63,7 @@ private class FXSceneEditor extends hide.comp.SceneEditor {
 		// Always refresh scene
 		refreshScene();
 		refreshTree(callb);
+		parent.onRefreshScene();
 	}
 
 	override function getNewContextMenu(current: PrefabElement, ?onMake: PrefabElement->Void=null) {
@@ -434,6 +435,12 @@ class FXEditor extends FileView {
 		}
 	}
 
+	function onRefreshScene() {
+		var renderProps = data.find(e -> e.to(hide.prefab.RenderProps));
+		if(renderProps != null)
+			renderProps.applyProps(scene.s3d.renderer);
+	}
+
 	override function onDragDrop(items : Array<String>, isDrop : Bool) {
 		var supported = ["fbx"];
 		var models = [];

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

@@ -125,6 +125,11 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		parent.onPrefabChange(p, pname);
 	}
 
+	override function selectObjects(elts:Array<PrefabElement>, ?includeTree:Bool = true) {
+		super.selectObjects(elts, includeTree);
+		parent.onSelectObjects(elts);
+	}
+
 	override function projectToGround(ray: h3d.col.Ray) {
 		var polygons = parent.getGroundPolys();
 		var minDist = -1.;
@@ -297,6 +302,7 @@ class Level3D extends FileView {
 	var currentSign : String;
 	var sceneFilters : Map<String, Bool>;
 	var statusText : h2d.Text;
+	var lastRenderProps : hide.prefab.RenderProps = null;
 
 	var scene(get, null):  hide.comp.Scene;
 	function get_scene() return sceneEditor.scene;
@@ -513,14 +519,19 @@ class Level3D extends FileView {
 	}
 
 	function onRefreshScene() {
-		// Apply first render props
-		var settings = data.children.find(c -> c.name == "settings");
-		if(settings != null) {
-			for(c in settings.children) {
-				var renderProps = c.to(hide.prefab.RenderProps);
-				if(renderProps != null) {
-					renderProps.applyProps(scene.s3d.renderer);
-					break;
+		if(lastRenderProps != null) {
+			lastRenderProps.applyProps(scene.s3d.renderer);
+		}
+		else {
+			// Apply first render props
+			var settings = data.children.find(c -> c.name == "settings");
+			if(settings != null) {
+				for(c in settings.children) {
+					var renderProps = c.to(hide.prefab.RenderProps);
+					if(renderProps != null) {
+						renderProps.applyProps(scene.s3d.renderer);
+						break;
+					}
 				}
 			}
 		}
@@ -612,6 +623,12 @@ class Level3D extends FileView {
 
 	}
 
+	function onSelectObjects(elts: Array<PrefabElement>) {
+		var renderProps = Std.instance(elts.find(e -> Std.is(e, hide.prefab.RenderProps)), hide.prefab.RenderProps);
+		if(renderProps != null)
+			lastRenderProps = renderProps;
+	}
+
 	function applySceneStyle(p: PrefabElement) {
 		var level3d = p.to(hide.prefab.l3d.Level3D);
 		if(level3d != null) {