Переглянути джерело

SceneEditor: fix visibility of objects in scene editor

lviguier 6 місяців тому
батько
коміт
af178df5d9
2 змінених файлів з 29 додано та 27 видалено
  1. 0 9
      hide/comp/SceneEditor.hx
  2. 29 18
      hide/view/Prefab.hx

+ 0 - 9
hide/comp/SceneEditor.hx

@@ -4496,15 +4496,6 @@ class SceneEditor {
 		for( p in prefab.flatten(null, null) ) {
 			makeInteractive(p);
 			applySceneStyle(p);
-
-			var ref = Std.downcast(p, hrt.prefab.Reference);
-			if (ref != null && !ref.editMode && ref.refInstance != null) {
-
-				// only call applySceneStyle and not makeInteractive on the childs of non edit references
-				for (pp in ref.refInstance.flatten(null, null)) {
-					applySceneStyle(ref.refInstance);
-				}
-			}
 		}
 
 		if (prefab == sceneData) {

+ 29 - 18
hide/view/Prefab.hx

@@ -876,24 +876,6 @@ class Prefab extends hide.view.FileView {
 			return;
 		}
 
-		var obj3d = p.to(Object3D);
-		if(obj3d != null) {
-			var visible = obj3d.visible && !sceneEditor.isHidden(obj3d) && sceneFilters.get(p.type) != false;
-			if(visible) {
-				var cdbType = p.getCdbType();
-				if(cdbType != null && sceneFilters.get(cdbType) == false)
-					visible = false;
-			}
-			if (visible) {
-				if ((p.props:Dynamic)?.tag != null) {
-					visible = sceneFilters.get('tag:${(p.props:Dynamic).tag}') != false;
-				}
-			}
-
-			if (obj3d.local3d != null) {
-				obj3d.local3d.visible = visible;
-			}
-		}
 		var color = getDisplayColor(p);
 		if(color != null){
 			color = (color & 0xffffff) | 0xa0000000;
@@ -906,6 +888,35 @@ class Prefab extends hide.view.FileView {
 				poly.setColor(color);
 			}
 		}
+
+		var obj3d = p.to(Object3D);
+		if(obj3d != null && obj3d.local3d != null) {
+			// Apply scene filters visibility first
+			var ref = Std.downcast(p, hrt.prefab.Reference);
+			if (!obj3d.visible || (sceneFilters.get(p.type) == false || (ref?.refInstance != null && sceneFilters.get(ref.refInstance.type) == false))) {
+				obj3d.local3d.visible = false;
+				return;
+			}
+
+			// Apply
+			if (sceneEditor.isHidden(obj3d)) {
+				obj3d.local3d.visible = false;
+				return;
+			}
+
+			var cdbType = p.getCdbType();
+			if(cdbType != null && sceneFilters.get(cdbType) == false) {
+				obj3d.local3d.visible = false;
+				return;
+			}
+
+			if ((p.props:Dynamic)?.tag != null) {
+				obj3d.local3d.visible = sceneFilters.get('tag:${(p.props:Dynamic).tag}') != false;
+				return;
+			}
+
+			obj3d.local3d.visible = true;
+		}
 	}
 
 	public function setRenderPropsEditionVisibility(visible : Bool) {