void LoadOldVersion(BinaryReader reader) { //@ TAG_DUMMIES string tagName = reader.ReadString(); Dictionary <string, MyModelDummy> dummies = ReadDummies(reader); m_retTagData.Add(tagName, dummies); //@ verticies tagName = reader.ReadString(); HalfVector4[] VctArr = ReadArrayOfHalfVector4(reader); m_retTagData.Add(tagName, VctArr); //@ normals tagName = reader.ReadString(); Byte4[] VctArr2 = ReadArrayOfByte4(reader); m_retTagData.Add(tagName, VctArr2); //@ texCoords0 tagName = reader.ReadString(); HalfVector2[] vct2Arr = ReadArrayOfHalfVector2(reader); m_retTagData.Add(tagName, vct2Arr); //TODO: binormals are no longer needed, they are computed in shaders //@ binormals tagName = reader.ReadString(); VctArr2 = ReadArrayOfByte4(reader); m_retTagData.Add(tagName, VctArr2); //@ tangents tagName = reader.ReadString(); VctArr2 = ReadArrayOfByte4(reader); m_retTagData.Add(tagName, VctArr2); //@ texcoords1 tagName = reader.ReadString(); vct2Arr = ReadArrayOfHalfVector2(reader); m_retTagData.Add(tagName, vct2Arr); ////////////////////////////////////////////////////////////////////////// //@ TAG_RESCALE_TO_LENGTH_IN_METERS tagName = reader.ReadString(); bool bVal = reader.ReadBoolean(); m_retTagData.Add(tagName, bVal); //@ TAG_LENGTH_IN_METERS tagName = reader.ReadString(); float fVal = reader.ReadSingle(); m_retTagData.Add(tagName, fVal); //@ TAG_RESCALE_FACTOR tagName = reader.ReadString(); fVal = reader.ReadSingle(); m_retTagData.Add(tagName, fVal); //@ TAG_CENTERED tagName = reader.ReadString(); bVal = reader.ReadBoolean(); m_retTagData.Add(tagName, bVal); //@ TAG_USE_MASK tagName = reader.ReadString(); bVal = reader.ReadBoolean(); m_retTagData.Add(tagName, bVal); //@ TAG_SPECULAR_SHININESS tagName = reader.ReadString(); fVal = reader.ReadSingle(); m_retTagData.Add(tagName, fVal); //@ TAG_SPECULAR_POWER tagName = reader.ReadString(); fVal = reader.ReadSingle(); m_retTagData.Add(tagName, fVal); //@ TAG_BOUNDING_BOX tagName = reader.ReadString(); BoundingBox bbox = ReadBoundingBox(reader); m_retTagData.Add(tagName, bbox); //@ TAG_BOUNDING_SPHERE tagName = reader.ReadString(); BoundingSphere bSphere = ReadBoundingSphere(reader); m_retTagData.Add(tagName, bSphere); //@ TAG_SWAP_WINDING_ORDER tagName = reader.ReadString(); bVal = reader.ReadBoolean(); m_retTagData.Add(tagName, bVal); //@ TAG_MESH_PARTS tagName = reader.ReadString(); List <MyMeshPartInfo> meshes = ReadMeshParts(reader, m_version); m_retTagData.Add(tagName, meshes); //@ TAG_MODEL_BVH tagName = reader.ReadString(); GImpactQuantizedBvh bvh = new GImpactQuantizedBvh(); bvh.Load(ReadArrayOfBytes(reader)); m_retTagData.Add(tagName, bvh); //@ TAG_MODEL_INFO tagName = reader.ReadString(); int tri, vert; Vector3 bb; tri = reader.ReadInt32(); vert = reader.ReadInt32(); bb = ImportVector3(reader); m_retTagData.Add(tagName, new MyModelInfo(tri, vert, bb)); //TAG_BLENDINDICES tagName = reader.ReadString(); var blendIndices = ReadArrayOfVector4Int(reader); m_retTagData.Add(tagName, blendIndices); //TAG_BLENDWEIGHTS tagName = reader.ReadString(); var blendWeights = ReadArrayOfVector4(reader); m_retTagData.Add(tagName, blendWeights); //TAG_ANIMATIONS tagName = reader.ReadString(); var animations = ReadAnimations(reader); m_retTagData.Add(tagName, animations); //TAG_BONES tagName = reader.ReadString(); var bones = ReadBones(reader); m_retTagData.Add(tagName, bones); //TAG_BONE_MAPPING tagName = reader.ReadString(); var boneMapping = ReadArrayOfVector3Int(reader); m_retTagData.Add(tagName, boneMapping); // Compatibility if (reader.BaseStream.Position < reader.BaseStream.Length) { //TAG_HAVOK_COLLISION_GEOMETRY tagName = reader.ReadString(); var havokCollision = ReadArrayOfBytes(reader); m_retTagData.Add(tagName, havokCollision); } // Compatibility if (reader.BaseStream.Position < reader.BaseStream.Length) { //TAG_PATTERN_SCALE tagName = reader.ReadString(); m_retTagData.Add(tagName, reader.ReadSingle()); } // Compatibility if (reader.BaseStream.Position < reader.BaseStream.Length) { //TAG_LODS tagName = reader.ReadString(); m_retTagData.Add(tagName, ReadLODs(reader, 01066002)); } if (reader.BaseStream.Position < reader.BaseStream.Length) { //TAG_HAVOK_DESTRUCTION_GEOMETRY tagName = reader.ReadString(); var havokCollision = ReadArrayOfBytes(reader); m_retTagData.Add(tagName, havokCollision); } if (reader.BaseStream.Position < reader.BaseStream.Length) { //TAG_HAVOK_DESTRUCTION tagName = reader.ReadString(); var havokCollision = ReadArrayOfBytes(reader); m_retTagData.Add(tagName, havokCollision); } }
/// <summary> /// LoadTagData /// </summary> /// <returns></returns> private static void LoadTagData(BinaryReader reader, Dictionary<string, object> data) { while (reader.BaseStream.Position != reader.BaseStream.Length) { var tagName = reader.ReadString(); switch (tagName) { case MyImporterConstants.TAG_DEBUG: data.Add(tagName, ReadArrayOfString(reader)); break; case MyImporterConstants.TAG_DUMMIES: data.Add(tagName, ReadDummies(reader)); break; case MyImporterConstants.TAG_VERTICES: data.Add(tagName, ReadArrayOfHalfVector4(reader)); break; case MyImporterConstants.TAG_NORMALS: data.Add(tagName, ReadArrayOfByte4(reader)); break; case MyImporterConstants.TAG_TEXCOORDS0: data.Add(tagName, ReadArrayOfHalfVector2(reader)); break; case MyImporterConstants.TAG_BINORMALS: data.Add(tagName, ReadArrayOfByte4(reader)); break; case MyImporterConstants.TAG_TANGENTS: data.Add(tagName, ReadArrayOfByte4(reader)); break; case MyImporterConstants.TAG_TEXCOORDS1: data.Add(tagName, ReadArrayOfHalfVector2(reader)); break; case MyImporterConstants.TAG_RESCALE_TO_LENGTH_IN_METERS: data.Add(tagName, reader.ReadBoolean()); break; case MyImporterConstants.TAG_LENGTH_IN_METERS: data.Add(tagName, reader.ReadSingle()); break; case MyImporterConstants.TAG_RESCALE_FACTOR: data.Add(tagName, reader.ReadSingle()); break; case MyImporterConstants.TAG_CENTERED: data.Add(tagName, reader.ReadBoolean()); break; case MyImporterConstants.TAG_USE_CHANNEL_TEXTURES: data.Add(tagName, reader.ReadBoolean()); break; case MyImporterConstants.TAG_SPECULAR_SHININESS: data.Add(tagName, reader.ReadSingle()); break; case MyImporterConstants.TAG_SPECULAR_POWER: data.Add(tagName, reader.ReadSingle()); break; case MyImporterConstants.TAG_BOUNDING_BOX: data.Add(tagName, ReadBoundingBox(reader)); break; case MyImporterConstants.TAG_BOUNDING_SPHERE: data.Add(tagName, ReadBoundingSphere(reader)); break; case MyImporterConstants.TAG_SWAP_WINDING_ORDER: data.Add(tagName, reader.ReadBoolean()); break; case MyImporterConstants.TAG_MESH_PARTS: data.Add(tagName, ReadMeshParts(reader)); break; case MyImporterConstants.TAG_MODEL_BVH: var bvh = new GImpactQuantizedBvh(); bvh.Load(ReadArrayOfBytes(reader)); data.Add(tagName, bvh); break; case MyImporterConstants.TAG_MODEL_INFO: var tri = reader.ReadInt32(); var vert = reader.ReadInt32(); var bb = ReadVector3(reader); data.Add(tagName, new MyModelInfo(tri, vert, bb)); break; case MyImporterConstants.TAG_BLENDINDICES: data.Add(tagName, ReadArrayOfVector4(reader)); break; case MyImporterConstants.TAG_BLENDWEIGHTS: data.Add(tagName, ReadArrayOfVector4(reader)); break; case MyImporterConstants.TAG_ANIMATIONS: data.Add(tagName, ReadModelAnimations(reader)); break; case MyImporterConstants.TAG_BONES: data.Add(tagName, ReadMyModelBoneArray(reader)); break; case MyImporterConstants.TAG_BONE_MAPPING: data.Add(tagName, ReadArrayOfVector3I(reader)); break; case MyImporterConstants.TAG_HAVOK_COLLISION_GEOMETRY: data.Add(tagName, ReadArrayOfBytes(reader)); break; case MyImporterConstants.TAG_PATTERN_SCALE: data.Add(tagName, reader.ReadSingle()); break; case MyImporterConstants.TAG_LODS: data.Add(tagName, ReadMyLodDescriptorArray(reader)); break; default: throw new NotImplementedException(string.Format("tag '{0}' has not been implmented ", tagName)); } } }
/// <summary> /// LoadTagData /// </summary> /// <returns></returns> private static void LoadTagData(BinaryReader reader, Dictionary <string, object> data) { while (reader.BaseStream.Position != reader.BaseStream.Length) { var tagName = reader.ReadString(); switch (tagName) { case MyImporterConstants.TAG_DEBUG: data.Add(tagName, ReadArrayOfString(reader)); break; case MyImporterConstants.TAG_DUMMIES: data.Add(tagName, ReadDummies(reader)); break; case MyImporterConstants.TAG_VERTICES: data.Add(tagName, ReadArrayOfHalfVector4(reader)); break; case MyImporterConstants.TAG_NORMALS: data.Add(tagName, ReadArrayOfByte4(reader)); break; case MyImporterConstants.TAG_TEXCOORDS0: data.Add(tagName, ReadArrayOfHalfVector2(reader)); break; case MyImporterConstants.TAG_BINORMALS: data.Add(tagName, ReadArrayOfByte4(reader)); break; case MyImporterConstants.TAG_TANGENTS: data.Add(tagName, ReadArrayOfByte4(reader)); break; case MyImporterConstants.TAG_TEXCOORDS1: data.Add(tagName, ReadArrayOfHalfVector2(reader)); break; //case MyImporterConstants.TAG_RESCALE_TO_LENGTH_IN_METERS: // data.Add(tagName, reader.ReadBoolean()); // break; //case MyImporterConstants.TAG_LENGTH_IN_METERS: // data.Add(tagName, reader.ReadSingle()); // break; case MyImporterConstants.TAG_RESCALE_FACTOR: data.Add(tagName, reader.ReadSingle()); break; //case MyImporterConstants.TAG_CENTERED: // data.Add(tagName, reader.ReadBoolean()); // break; case MyImporterConstants.TAG_USE_CHANNEL_TEXTURES: data.Add(tagName, reader.ReadBoolean()); break; //case MyImporterConstants.TAG_SPECULAR_SHININESS: // data.Add(tagName, reader.ReadSingle()); // break; //case MyImporterConstants.TAG_SPECULAR_POWER: // data.Add(tagName, reader.ReadSingle()); // break; case MyImporterConstants.TAG_BOUNDING_BOX: data.Add(tagName, ReadBoundingBox(reader)); break; case MyImporterConstants.TAG_BOUNDING_SPHERE: data.Add(tagName, ReadBoundingSphere(reader)); break; case MyImporterConstants.TAG_SWAP_WINDING_ORDER: data.Add(tagName, reader.ReadBoolean()); break; case MyImporterConstants.TAG_MESH_PARTS: data.Add(tagName, ReadMeshParts(reader)); break; case MyImporterConstants.TAG_MODEL_BVH: var bvh = new GImpactQuantizedBvh(); bvh.Load(ReadArrayOfBytes(reader)); data.Add(tagName, bvh); break; case MyImporterConstants.TAG_MODEL_INFO: var tri = reader.ReadInt32(); var vert = reader.ReadInt32(); var bb = ReadVector3(reader); data.Add(tagName, new MyModelInfo(tri, vert, bb)); break; case MyImporterConstants.TAG_BLENDINDICES: data.Add(tagName, ReadArrayOfVector4(reader)); break; case MyImporterConstants.TAG_BLENDWEIGHTS: data.Add(tagName, ReadArrayOfVector4(reader)); break; case MyImporterConstants.TAG_ANIMATIONS: data.Add(tagName, ReadModelAnimations(reader)); break; case MyImporterConstants.TAG_BONES: data.Add(tagName, ReadMyModelBoneArray(reader)); break; case MyImporterConstants.TAG_BONE_MAPPING: data.Add(tagName, ReadArrayOfVector3I(reader)); break; case MyImporterConstants.TAG_HAVOK_COLLISION_GEOMETRY: data.Add(tagName, ReadArrayOfBytes(reader)); break; case MyImporterConstants.TAG_PATTERN_SCALE: data.Add(tagName, reader.ReadSingle()); break; case MyImporterConstants.TAG_LODS: data.Add(tagName, ReadMyLodDescriptorArray(reader)); break; default: throw new NotImplementedException(string.Format("tag '{0}' has not been implmented ", tagName)); } } }
/// <summary> /// LoadCustomTagData /// </summary> /// <returns></returns> private bool LoadCustomTagData(BinaryReader reader, SortedSet <string> tags) { int tagsToRead = tags.Count; //m_retTagData string tagName; tagName = reader.ReadString(); string[] strArr = ReadArrayOfString(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, strArr); if (--tagsToRead <= 0) { return(true); } } //@ TAG_DUMMIES tagName = reader.ReadString(); Dictionary <string, MyModelDummy> dummies = this.ReadDummies(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, dummies); if (--tagsToRead <= 0) { return(true); } } //@ verticies tagName = reader.ReadString(); #if !PACKED_VERTEX_FORMAT Vector3[] VctArr = ReadArrayOfVector3(reader); #else HalfVector4[] VctArr = ReadArrayOfHalfVector4(reader); #endif if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr); if (--tagsToRead <= 0) { return(true); } } //@ normals tagName = reader.ReadString(); #if !PACKED_VERTEX_FORMAT VctArr = ReadArrayOfVector3(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr); if (--tagsToRead <= 0) { return(true); } } #else Byte4[] VctArr2 = ReadArrayOfByte4(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr2); if (--tagsToRead <= 0) { return(true); } } #endif //@ indicies // removed TAG_INDICES from loading // tagName = reader.ReadString(); // int[] intArr = ReadArrayOfInt(reader); // m_retTagData.Add(tagName, intArr); //@ texCoords0 tagName = reader.ReadString(); #if !PACKED_VERTEX_FORMAT Vector2[] vct2Arr = ReadArrayOfVector2(reader); #else HalfVector2[] vct2Arr = ReadArrayOfHalfVector2(reader); #endif if (tags.Contains(tagName)) { m_retTagData.Add(tagName, vct2Arr); if (--tagsToRead <= 0) { return(true); } } //@ binormals tagName = reader.ReadString(); #if !PACKED_VERTEX_FORMAT VctArr = ReadArrayOfVector3(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr); if (--tagsToRead <= 0) { return(true); } } #else VctArr2 = ReadArrayOfByte4(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr2); if (--tagsToRead <= 0) { return(true); } } #endif //@ tangents tagName = reader.ReadString(); #if !PACKED_VERTEX_FORMAT VctArr = ReadArrayOfVector3(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr); if (--tagsToRead <= 0) { return(true); } } #else VctArr2 = ReadArrayOfByte4(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, VctArr2); if (--tagsToRead <= 0) { return(true); } } #endif //@ texcoords1 tagName = reader.ReadString(); #if !PACKED_VERTEX_FORMAT vct2Arr = ReadArrayOfVector2(reader); #else vct2Arr = ReadArrayOfHalfVector2(reader); #endif if (tags.Contains(tagName)) { m_retTagData.Add(tagName, vct2Arr); if (--tagsToRead <= 0) { return(true); } } ////////////////////////////////////////////////////////////////////////// //@ TAG_RESCALE_TO_LENGTH_IN_METERS tagName = reader.ReadString(); bool bVal = reader.ReadBoolean(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, bVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_LENGTH_IN_METERS tagName = reader.ReadString(); float fVal = reader.ReadSingle(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, fVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_RESCALE_FACTOR tagName = reader.ReadString(); fVal = reader.ReadSingle(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, fVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_CENTERED tagName = reader.ReadString(); bVal = reader.ReadBoolean(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, bVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_USE_MASK tagName = reader.ReadString(); bVal = reader.ReadBoolean(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, bVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_SPECULAR_SHININESS tagName = reader.ReadString(); fVal = reader.ReadSingle(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, fVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_SPECULAR_POWER tagName = reader.ReadString(); fVal = reader.ReadSingle(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, fVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_BOUNDING_BOX tagName = reader.ReadString(); BoundingBox bbox = this.ReadBoundingBox(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, bbox); if (--tagsToRead <= 0) { return(true); } } //@ TAG_BOUNDING_SPHERE tagName = reader.ReadString(); BoundingSphere bSphere = this.ReadBoundingSphere(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, bSphere); if (--tagsToRead <= 0) { return(true); } } //@ TAG_SWAP_WINDING_ORDER tagName = reader.ReadString(); bVal = reader.ReadBoolean(); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, bVal); if (--tagsToRead <= 0) { return(true); } } //@ TAG_MESH_PARTS tagName = reader.ReadString(); List <MyMeshPartInfo> meshes = this.ReadMeshParts(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, meshes); if (--tagsToRead <= 0) { return(true); } } //@ TAG_MODEL_BVH tagName = reader.ReadString(); var bvhBytes = this.ReadArrayOfBytes(reader); if (tags.Contains(tagName)) { GImpactQuantizedBvh bvh = new GImpactQuantizedBvh(); bvh.Load(bvhBytes); m_retTagData.Add(tagName, bvh); if (--tagsToRead <= 0) { return(true); } } //@ TAG_MODEL_INFO tagName = reader.ReadString(); int tri, vert; Vector3 bb; tri = reader.ReadInt32(); vert = reader.ReadInt32(); bb = ImportVector3(reader); if (tags.Contains(tagName)) { m_retTagData.Add(tagName, new MyModelInfo(tri, vert, bb)); if (--tagsToRead <= 0) { return(true); } } return(false); }