浏览代码

MaterialDatabase can load model specific configurations.

clementlandrin 2 年之前
父节点
当前提交
e4de943d5e
共有 1 个文件被更改,包括 12 次插入3 次删除
  1. 12 3
      h3d/mat/MaterialDatabase.hx

+ 12 - 3
h3d/mat/MaterialDatabase.hx

@@ -45,6 +45,10 @@ class MaterialDatabase {
 		if( p == null ) return p;
 		if( p == null ) return p;
 		p = Reflect.field(p, setup.name);
 		p = Reflect.field(p, setup.name);
 		if( p == null ) return p;
 		if( p == null ) return p;
+		if ( material.model != null ) {
+			var specData = Reflect.field(p, material.name + "/" + material.model.name);
+			if ( specData != null ) return specData;
+		}
 		return Reflect.field(p, material.name);
 		return Reflect.field(p, material.name);
 	}
 	}
 
 
@@ -64,10 +68,15 @@ class MaterialDatabase {
 			prevs.push(root);
 			prevs.push(root);
 			root = next;
 			root = next;
 		}
 		}
-		var name = path.pop();
-		Reflect.deleteField(root, name);
 
 
 		var currentProps = material.props;
 		var currentProps = material.props;
+		var modelSpec = (currentProps:Dynamic).__refMode == "modelSpec";
+		var name = path.pop();
+		if ( !modelSpec )
+			Reflect.deleteField(root, name);
+		var specName = name + "/" + (material.model != null ? material.model.name : "");
+		Reflect.deleteField(root, specName);
+
 		if ( defaultProps == null ) defaultProps = material.getDefaultProps();
 		if ( defaultProps == null ) defaultProps = material.getDefaultProps();
 		if( currentProps == null || Std.string(defaultProps) == Std.string(currentProps) ) {
 		if( currentProps == null || Std.string(defaultProps) == Std.string(currentProps) ) {
 			// cleanup
 			// cleanup
@@ -79,7 +88,7 @@ class MaterialDatabase {
 				Reflect.deleteField(root, name);
 				Reflect.deleteField(root, name);
 			}
 			}
 		} else {
 		} else {
-			Reflect.setField(root, name, currentProps);
+			Reflect.setField(root, modelSpec ? specName : name, currentProps);
 		}
 		}
 
 
 		var file = getFilePath(material.model);
 		var file = getFilePath(material.model);