Browse Source

fixed PInts support

ncannasse 7 years ago
parent
commit
cd90861e12
1 changed files with 28 additions and 20 deletions
  1. 28 20
      hxd/fmt/fbx/BaseLibrary.hx

+ 28 - 20
hxd/fmt/fbx/BaseLibrary.hx

@@ -213,15 +213,25 @@ class BaseLibrary {
 		if( scaleFactor == 1 )
 			return;
 
-		// scale on geometry
-		for( g in this.root.getAll("Objects.Geometry.Vertices") ) {
-			switch( g.props[0] ) {
-			case PFloats(v):
-				for( i in 0...v.length )
-					v[i] = v[i] / scaleFactor;
+		function toFloats( n : FbxNode ) {
+			return switch( n.props[0] ) {
+			case PInts(vl):
+				var vl = [for( v in vl ) (v:Float)];
+				n.props[0] = PFloats(vl);
+				vl;
+			case PFloats(vl):
+				vl;
 			default:
+				throw n.props[0]+" should be floats ";
 			}
 		}
+
+		// scale on geometry
+		for( g in this.root.getAll("Objects.Geometry.Vertices") ) {
+			var v = toFloats(g);
+			for( i in 0...v.length )
+				v[i] = v[i] / scaleFactor;
+		}
 		// scale on root models
 		for( m in this.root.getAll("Objects.Model") ) {
 			var isRoot = getParent(m,"Model",true) == null;
@@ -242,13 +252,10 @@ class BaseLibrary {
 		}
 		// scale on skin
 		for( t in this.root.getAll("Objects.Deformer.Transform") ) {
-			switch( t.props[0] ) {
-			case PFloats(v):
-				v[12] /= scaleFactor;
-				v[13] /= scaleFactor;
-				v[14] /= scaleFactor;
-			default:
-			}
+			var m = toFloats(t);
+			m[12] /= scaleFactor;
+			m[13] /= scaleFactor;
+			m[14] /= scaleFactor;
 		}
 		// scale on animation
 		for( n in this.root.getAll("Objects.AnimationCurveNode") ) {
@@ -262,13 +269,14 @@ class BaseLibrary {
 				default:
 				}
 			for( c in getChilds(n,"AnimationCurve") ) {
-				switch( c.get("KeyValueFloat").props[0] ) {
-				case PFloats(v) if( name == "T" && !isRoot ):
-					for( i in 0...v.length )
-						v[i] = v[i] / scaleFactor;
-				case PFloats(v) if( name == "S" && isRoot ):
-					for( i in 0...v.length )
-						v[i] = v[i] * scaleFactor;
+				var vl = toFloats(c.get("KeyValueFloat"));
+				switch( name ) {
+				case "T" if( !isRoot ):
+					for( i in 0...vl.length )
+						vl[i] = vl[i] / scaleFactor;
+				case "S" if( isRoot ):
+					for( i in 0...vl.length )
+						vl[i] = vl[i] * scaleFactor;
 				default:
 				}
 			}