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

Fix MaterialSelector.hx all and mainPass.

clementlandrin 10 сар өмнө
parent
commit
ce57cc1e17

+ 16 - 5
hrt/prefab/MaterialSelector.hx

@@ -4,24 +4,35 @@ typedef MaterialSelection = {
 	passName : String,
 }
 
+typedef SelectedPass = {
+	pass : h3d.mat.Pass,
+	all : Bool,
+}
+
 class MaterialSelector extends hrt.prefab.Prefab {
 
-	@:s public var selections : Array<MaterialSelection> = []; 
+	@:s public var selections : Array<MaterialSelection> = [{
+		passName : "all",
+	}]; 
 
-	public function getPasses(local3d: h3d.scene.Object = null) : Array<h3d.mat.Pass> {
+	public function getPasses(local3d: h3d.scene.Object = null) : Array<SelectedPass> {
 		if (local3d == null)
 			local3d = findFirstLocal3d();
 		var mats = local3d.getMaterials();
 		var passes = [];
+		var selectionSorted = selections.copy();
+		selectionSorted.sort((s1, s2) -> s1.passName == "all" ? return 1 : -1);
 		for ( m in mats ) {
 			for ( selection in selections ) {
-				if ( selection.passName == "all" || selection.passName == "mainPass" ) {
-					passes.push(m.mainPass);
+				if ( selection.passName == "all" ) {
+					passes.push({pass : m.mainPass, all : true});
 					break;
+				} else if ( selection.passName == "mainPass" ) {
+					passes.push({pass : m.mainPass, all : false });
 				} else {
 					var p = m.getPass(selection.passName);
 					if ( p != null )
-						passes.push(p);
+						passes.push({pass : p, all : false });
 				}
 			}
 		}

+ 2 - 2
hrt/prefab/Shader.hx

@@ -111,9 +111,9 @@ class Shader extends Prefab {
 		} else if ( Std.isOfType(parent, MaterialSelector) ) {
 			var materialSelector = cast(parent, MaterialSelector);
 			var passSelect = h3d.mat.MaterialSetup.current.createMaterial();
-			passSelect.name = PASS_SELECT;
 			for ( p in materialSelector.getPasses() ) {
-				@:privateAccess passSelect.passes = p;
+				passSelect.name = p.all ? "" : PASS_SELECT;
+				@:privateAccess passSelect.passes = p.pass;
 				callb(null, passSelect);
 			}
 		} else {