Browse Source

L3D: Fix refresh bugs when prefabs are disabled/enabled

trethaller 7 years ago
parent
commit
c627367527
2 changed files with 35 additions and 16 deletions
  1. 2 1
      hide/comp/SceneEditor.hx
  2. 33 15
      hide/view/l3d/Level3D.hx

+ 2 - 1
hide/comp/SceneEditor.hx

@@ -298,7 +298,8 @@ class SceneEditor {
 		refreshScene();
 		tree.refresh(function() {
 			for(elt in sh.contexts.keys()) {
-				onPrefabChange(elt);
+				var el = tree.getElement(elt);
+				updateTreeStyle(elt, el);
 			}
 			if(callb != null) callb();
 		});

+ 33 - 15
hide/view/l3d/Level3D.hx

@@ -94,6 +94,11 @@ private class Level3DSceneEditor extends hide.comp.SceneEditor {
 		parent.onRefresh();
 	}
 
+	override function refreshScene() {
+		super.refreshScene();
+		parent.onRefreshScene();
+	}
+
 	override function update(dt) {
 		super.update(dt);
 		parent.onUpdate(dt);
@@ -398,6 +403,12 @@ class Level3D extends FileView {
 
 	function onRefresh() {
 		refreshLayerIcons();
+	}
+
+	function onRefreshScene() {
+		var all = context.shared.contexts.keys();
+		for(elt in all)
+			refreshSceneStyle(elt);
 
 		// Apply first render props
 		var settings = data.children.find(c -> c.name == "settings");
@@ -486,27 +497,18 @@ class Level3D extends FileView {
 	}
 
 	function onPrefabChange(p: PrefabElement, ?pname: String) {
+		refreshSceneStyle(p);
+	}
+
+	function refreshSceneStyle(p: PrefabElement) {
 		var level3d = p.to(hide.prefab.l3d.Level3D);
 		if(level3d != null) {
 			updateGrid();
 			return;
 		}
 		var layer = p.to(hide.prefab.l3d.Layer);
-		if(layer != null) {
-			var obj3ds = layer.getAll(hide.prefab.Object3D);
-			for(obj in obj3ds) {
-				var i = @:privateAccess sceneEditor.interactives.get(obj);
-				if(i != null) i.visible = !layer.locked;
-			}
-			for(box in layer.getAll(hide.prefab.Box)) {
-				var ctx = sceneEditor.getContext(box);
-				box.setColor(ctx, getDisplayColor(box));
-			}
-			for(poly in layer.getAll(hide.prefab.l3d.Polygon)) {
-				var ctx = sceneEditor.getContext(poly);
-				poly.applyProps(ctx);
-			}
-		}
+		if(layer != null)
+			applyLayerProps(layer);
 
 		var box = p.to(hide.prefab.Box);
 		if(box != null) {
@@ -520,6 +522,22 @@ class Level3D extends FileView {
 		}
 	}
 
+	function applyLayerProps(layer: hide.prefab.l3d.Layer) {
+		var obj3ds = layer.getAll(hide.prefab.Object3D);
+		for(obj in obj3ds) {
+			var i = @:privateAccess sceneEditor.interactives.get(obj);
+			if(i != null) i.visible = !layer.locked;
+		}
+		for(box in layer.getAll(hide.prefab.Box)) {
+			var ctx = sceneEditor.getContext(box);
+			box.setColor(ctx, getDisplayColor(box));
+		}
+		for(poly in layer.getAll(hide.prefab.l3d.Polygon)) {
+			var ctx = sceneEditor.getContext(poly);
+			poly.applyProps(ctx);
+		}
+	}
+
 	static function getDisplayColor(p: PrefabElement) {
 		var color = 0x80ffffff;
 		var layer = p.getParent(Layer);