瀏覽代碼

DynamicBones: add folder configuration for dynamic bones

lviguier 1 月之前
父節點
當前提交
f7814afda7
共有 3 個文件被更改,包括 63 次插入34 次删除
  1. 0 5
      h3d/prim/HMDModel.hx
  2. 1 29
      h3d/prim/ModelDatabase.hx
  3. 62 0
      hxd/fmt/hmd/Library.hx

+ 0 - 5
h3d/prim/HMDModel.hx

@@ -352,11 +352,6 @@ class HMDModel extends MeshPrimitive {
 	}
 
 	public function getLodConfig() {
-		if (lodConfig != null)
-			return lodConfig;
-
-		var d = lib.resource.entry.directory;
-		lodConfig = @:privateAccess ModelDatabase.current.getDefaultLodConfig(d);
 		return lodConfig;
 	}
 }

+ 1 - 29
h3d/prim/ModelDatabase.hx

@@ -19,11 +19,6 @@ class ModelDatabase {
 	static var LOD_CONFIG_FIELD = "lods.screenRatio";
 	static var DYN_BONES_CONFIG = "dynamicBones";
 
-	#if (sys || nodejs)
-	static var defaultLodConfigs : Map<String, hxd.fs.FileConverter.ConvertConfig> = new Map();
-	#end
-
-	static var baseLodConfig = [ 0.5, 0.2, 0.01];
 	public static dynamic function customizeLodConfig(c : Array<Float>) {
 		return c;
 	}
@@ -79,29 +74,6 @@ class ModelDatabase {
 		#end
 	}
 
-	function getDefaultLodConfig( dir : String ) : Array<Float> {
-		var fs = Std.downcast(hxd.res.Loader.currentInstance.fs, hxd.fs.LocalFileSystem);
-		var c = baseLodConfig;
-		#if (sys || nodejs)
-		if (fs != null) {
-			var conf : hxd.fs.FileConverter.ConvertConfig = null;
-
-			function getConvertConf(obj : Dynamic) : hxd.fs.FileConverter.ConvertConfig {
-				var defObj = {};
-				Reflect.setField(defObj, LOD_CONFIG_FIELD, obj);
-				return @:privateAccess fs.convert.makeConfig(defObj);
-			}
-
-			conf = @:privateAccess fs.convert.getConfig(defaultLodConfigs, getConvertConf(baseLodConfig), dir, function(fullObj) {
-				return fs.convert.makeConfig(fullObj);
-			});
-
-			c = Reflect.field(conf.obj, LOD_CONFIG_FIELD);
-		}
-		#end
-		c = customizeLodConfig(c);
-		return c;
-	}
 
 	// Used to clean previous version of modelDatabase, should be removed after some time
 	function cleanOldModelData( rootData : Dynamic, key : String) {
@@ -196,7 +168,7 @@ class ModelDatabase {
 
 	function saveLodConfig( input : ModelDataInput, data : Dynamic ) @:privateAccess {
 		var isDefaultConfig = true;
-		var defaultConfig = getDefaultLodConfig(input.resourceDirectory);
+		var defaultConfig = hxd.fmt.hmd.Library.getDefaultLodConfig(input.resourceDirectory);
 
 		if (input.hmd.lodConfig != null) {
 			if (defaultConfig.length != input.hmd.lodConfig.length)

+ 62 - 0
hxd/fmt/hmd/Library.hx

@@ -45,6 +45,12 @@ class Library {
 	var cachedAnimations : Map<String, h3d.anim.Animation>;
 	var cachedSkin : Map<String, h3d.anim.Skin>;
 
+	static var baseLodConfig = [ 0.5, 0.2, 0.01];
+	#if (sys || nodejs)
+	static var defaultLodConfigs : Map<String, hxd.fs.FileConverter.ConvertConfig> = new Map();
+	static var defaultDynamicBonesConfigs : Map<String, hxd.fs.FileConverter.ConvertConfig> = new Map();
+	#end
+
 	public function new(res,  header) {
 		this.resource = res;
 		this.header = header;
@@ -470,6 +476,15 @@ class Library {
 				skin : Std.downcast(obj, h3d.scene.Skin)
 			}
 
+			// Apply default config to object (config that is in props.json)
+			var data = {}
+			Reflect.setField(data, @:privateAccess h3d.prim.ModelDatabase.LOD_CONFIG, getDefaultLodConfig(modelData.resourceDirectory));
+			Reflect.setField(data, @:privateAccess h3d.prim.ModelDatabase.DYN_BONES_CONFIG, getDefaultDynamicBonesConfig(modelData.resourceDirectory));
+
+			@:privateAccess h3d.prim.ModelDatabase.current.loadLodConfig(modelData, data);
+			@:privateAccess h3d.prim.ModelDatabase.current.loadDynamicBonesConfig(modelData, data);
+
+			// Apply more specific config to object (config that is in model.props)
 			h3d.prim.ModelDatabase.current.loadModelProps(modelData);
 		}
 
@@ -859,4 +874,51 @@ class Library {
     }
 	#end
 
+
+	public static function getDefaultLodConfig( dir : String ) : Array<Float> {
+		var fs = Std.downcast(hxd.res.Loader.currentInstance.fs, hxd.fs.LocalFileSystem);
+		var c = baseLodConfig;
+		#if (sys || nodejs)
+		if (fs != null) {
+			var conf : hxd.fs.FileConverter.ConvertConfig = null;
+
+			function getConvertConf(obj : Dynamic) : hxd.fs.FileConverter.ConvertConfig {
+				var defObj = {};
+				Reflect.setField(defObj, @:privateAccess h3d.prim.ModelDatabase.LOD_CONFIG_FIELD, obj);
+				return @:privateAccess fs.convert.makeConfig(defObj);
+			}
+
+			conf = @:privateAccess fs.convert.getConfig(defaultLodConfigs, getConvertConf(baseLodConfig), dir, function(fullObj) {
+				return fs.convert.makeConfig(fullObj);
+			});
+
+			c = Reflect.field(conf.obj, @:privateAccess h3d.prim.ModelDatabase.LOD_CONFIG_FIELD);
+		}
+		#end
+		c = h3d.prim.ModelDatabase.customizeLodConfig(c);
+		return c;
+	}
+
+	public static function getDefaultDynamicBonesConfig( dir : String ) : Array<Dynamic> {
+		var fs = Std.downcast(hxd.res.Loader.currentInstance.fs, hxd.fs.LocalFileSystem);
+		var c = [];
+		#if (sys || nodejs)
+		if (fs != null) {
+			var conf : hxd.fs.FileConverter.ConvertConfig = null;
+
+			function getConvertConf(obj : Dynamic) : hxd.fs.FileConverter.ConvertConfig {
+				var defObj = {};
+				Reflect.setField(defObj, @:privateAccess h3d.prim.ModelDatabase.DYN_BONES_CONFIG, obj);
+				return @:privateAccess fs.convert.makeConfig(defObj);
+			}
+
+			conf = @:privateAccess fs.convert.getConfig(defaultDynamicBonesConfigs, getConvertConf([]), dir, function(fullObj) {
+				return fs.convert.makeConfig(fullObj);
+			});
+
+			c = Reflect.field(conf.obj, @:privateAccess h3d.prim.ModelDatabase.DYN_BONES_CONFIG);
+		}
+		#end
+		return c;
+	}
 }