|
@@ -275,16 +275,15 @@ class Library {
|
|
var lods : Array<Model> = null;
|
|
var lods : Array<Model> = null;
|
|
var hasLod = model.lods != null;
|
|
var hasLod = model.lods != null;
|
|
if ( hasLod ) {
|
|
if ( hasLod ) {
|
|
- var isLod = model.name.indexOf("LOD0") < 0;
|
|
|
|
- if ( isLod )
|
|
|
|
|
|
+ if ( model.isLOD() )
|
|
return null;
|
|
return null;
|
|
lods = [for ( lod in model.lods) header.models[lod]];
|
|
lods = [for ( lod in model.lods) header.models[lod]];
|
|
patchLodsMaterials(model, lods);
|
|
patchLodsMaterials(model, lods);
|
|
} else {
|
|
} else {
|
|
- var lodInfos = getLODInfos( model );
|
|
|
|
|
|
+ var lodInfos = model.getLODInfos();
|
|
if ( lodInfos.lodLevel > 0) {
|
|
if ( lodInfos.lodLevel > 0) {
|
|
for ( m in header.models )
|
|
for ( m in header.models )
|
|
- if ( m.name != null && StringTools.contains(m.name, lodInfos.modelName) && StringTools.contains(m.name, "LOD0"))
|
|
|
|
|
|
+ if ( m.isLOD0(lodInfos.modelName) )
|
|
return null;
|
|
return null;
|
|
throw "No LOD0 found for " + lodInfos.modelName + " in " + resource.name;
|
|
throw "No LOD0 found for " + lodInfos.modelName + " in " + resource.name;
|
|
}
|
|
}
|
|
@@ -392,40 +391,12 @@ class Library {
|
|
return def;
|
|
return def;
|
|
}
|
|
}
|
|
|
|
|
|
- public function getLODInfos( model : Model ) : { lodLevel : Int , modelName : String } {
|
|
|
|
- var modelName : String = model.name;
|
|
|
|
- var keyword = "LOD";
|
|
|
|
- if ( modelName == null || modelName.length <= keyword.length )
|
|
|
|
- return { lodLevel : -1, modelName : null };
|
|
|
|
-
|
|
|
|
- // Test prefix
|
|
|
|
- if ( modelName.substr(0, keyword.length) == keyword) {
|
|
|
|
- var parsedInt = Std.parseInt(modelName.substr( keyword.length, 1 ));
|
|
|
|
- if (parsedInt != null) {
|
|
|
|
- if ( Std.parseInt( modelName.substr( keyword.length + 1, 1 ) ) != null )
|
|
|
|
- throw 'Did not expect a second number after LOD in ${modelName}';
|
|
|
|
- return { lodLevel : parsedInt, modelName : modelName.substr(keyword.length) };
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // Test suffix
|
|
|
|
- var maxCursor = modelName.length - keyword.length - 1;
|
|
|
|
- if ( modelName.substr( maxCursor, keyword.length ) == keyword ) {
|
|
|
|
- var parsedInt = Std.parseInt( modelName.charAt( modelName.length - 1) );
|
|
|
|
- if ( parsedInt != null ) {
|
|
|
|
- return { lodLevel : parsedInt, modelName : modelName.substr( 0, maxCursor ) };
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return { lodLevel : -1, modelName : null };
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
public function findLODs( modelName : String, lod0 : Model ) : Array<Model> {
|
|
public function findLODs( modelName : String, lod0 : Model ) : Array<Model> {
|
|
if ( modelName == null )
|
|
if ( modelName == null )
|
|
return null;
|
|
return null;
|
|
var lods : Array<Model> = [];
|
|
var lods : Array<Model> = [];
|
|
for ( curModel in header.models ) {
|
|
for ( curModel in header.models ) {
|
|
- var lodInfos = getLODInfos( curModel );
|
|
|
|
|
|
+ var lodInfos = curModel.getLODInfos();
|
|
if ( lodInfos.lodLevel < 1 )
|
|
if ( lodInfos.lodLevel < 1 )
|
|
continue;
|
|
continue;
|
|
if ( lodInfos.modelName == modelName ) {
|
|
if ( lodInfos.modelName == modelName ) {
|
|
@@ -434,7 +405,6 @@ class Library {
|
|
lods[lodInfos.lodLevel - 1] = curModel;
|
|
lods[lodInfos.lodLevel - 1] = curModel;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
return lods;
|
|
return lods;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -486,7 +456,7 @@ class Library {
|
|
else
|
|
else
|
|
obj = new h3d.scene.MultiMaterial(prim, [for( mat in m.materials ) makeMaterial(m, mat, loadTexture)]);
|
|
obj = new h3d.scene.MultiMaterial(prim, [for( mat in m.materials ) makeMaterial(m, mat, loadTexture)]);
|
|
}
|
|
}
|
|
- obj.name = m.name;
|
|
|
|
|
|
+ obj.name = m.getObjectName();
|
|
obj.defaultTransform = m.position.toMatrix();
|
|
obj.defaultTransform = m.position.toMatrix();
|
|
objs.push(obj);
|
|
objs.push(obj);
|
|
var p = objs[m.parent];
|
|
var p = objs[m.parent];
|