Преглед на файлове

SceneEditor: fix hideList not working for prefabs that are in references in editmode

lviguier преди 6 месеца
родител
ревизия
3e2a51a276
променени са 3 файла, в които са добавени 24 реда и са изтрити 18 реда
  1. 14 14
      hide/comp/SceneEditor.hx
  2. 8 2
      hrt/prefab/Prefab.hx
  3. 2 2
      hrt/prefab/Reference.hx

+ 14 - 14
hide/comp/SceneEditor.hx

@@ -1076,19 +1076,6 @@ class SceneEditor {
 			]);
 		});
 
-		// Load display state
-		{
-			var all = sceneData.flatten(PrefabElement);
-			var list = @:privateAccess view.getDisplayState("hideList");
-			if(list != null) {
-				var m = [for(i in (list:Array<Dynamic>)) i => true];
-				for(p in all) {
-					if(m.exists(p.getAbsPath(true)))
-						hideList.set(p, true);
-				}
-			}
-		}
-
 		var customEditorProps = @:privateAccess ide.config.current.get("customEditor");
 		if( customEditorProps != null ) {
 			var cl = try js.Lib.eval(customEditorProps) catch( e : Dynamic ) null;
@@ -1680,6 +1667,19 @@ class SceneEditor {
     }
 
 	function onSceneReady() {
+		// Load display state
+		{
+			var all = sceneData.flatten(PrefabElement, null, true);
+			var list = @:privateAccess view.getDisplayState("hideList");
+			if(list != null) {
+				var m = [for(i in (list:Array<Dynamic>)) i => true];
+				for(p in all) {
+					if(m.exists(p.getAbsPath(true, true)))
+						hideList.set(p, true);
+				}
+			}
+		}
+
 		tree.saveDisplayKey = view.saveDisplayKey + '/tree';
 		renderPropsTree.saveDisplayKey = view.saveDisplayKey + '/renderPropsTree';
 
@@ -4004,7 +4004,7 @@ class SceneEditor {
 	}
 
 	function saveDisplayState() {
-		var state = [for (h in hideList.keys()) h.getAbsPath(true)];
+		var state = [for (h in hideList.keys()) h.getAbsPath(true, true)];
 		@:privateAccess view.saveDisplayState("hideList", state);
 	}
 

+ 8 - 2
hrt/prefab/Prefab.hx

@@ -402,7 +402,7 @@ class Prefab {
 				arr.push(i);
 		}
 		for(c in children)
-			c.flatten(cl, arr);
+			c.flatten(cl, arr, followRef);
 		return arr;
 	}
 
@@ -502,7 +502,13 @@ class Prefab {
 	/**
 		Returns the absolute name path for this prefab
 	**/
-	public function getAbsPath(unique=false) {
+	public function getAbsPath(unique=false, followRef : Bool = false) {
+		var parent = parent;
+		if (parent != null && followRef) {
+			var ref = Std.downcast(parent.shared.parentPrefab, Reference);
+			if (ref != null && ref.refInstance == parent)
+				parent = ref;
+		}
 		if(parent == null)
 			return "";
 		var path = name ?? "";

+ 2 - 2
hrt/prefab/Reference.hx

@@ -140,8 +140,8 @@ class Reference extends Object3D {
 
 	override public function flatten<T:Prefab>( ?cl : Class<T>, ?arr: Array<T>, followRef : Bool = false ) : Array<T> {
 		arr = super.flatten(cl, arr);
-		if ((editMode || followRef) && refInstance != null) {
-			arr = refInstance.flatten(cl, arr);
+		if ((editMode || followRef) && resolveRef() != null) {
+			arr = refInstance.flatten(cl, arr, followRef);
 		}
 		return arr;
 	}