Example #1
0
        /// <summary>
        /// ExportData
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="tagName"></param>
        /// <param name="bvh"></param>
        /// <returns></returns>
        private static bool ExportData(this BinaryWriter writer, string tagName, ref GImpactQuantizedBvh bvh)
        {
            WriteTag(writer, tagName);

            var buffer = bvh.Save();

            writer.Write(buffer.Length);
            writer.Write(bvh.Save());

            return(true);
        }
Example #2
0
        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);
            }
        }
Example #3
0
        /// <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));
                }
            }
        }
 public MyQuantizedBvhAdapter(GImpactQuantizedBvh bvh, MyModel model)
 {
     m_bvh = bvh;
     m_model = model;
 }
 public MyQuantizedBvhAdapter(GImpactQuantizedBvh bvh, MyModel model)
 {
     m_bvh   = bvh;
     m_model = model;
 }
Example #6
0
        /// <summary>
        /// ExportData
        /// </summary>
        /// <param name="writer"></param>
        /// <param name="tagName"></param>
        /// <param name="bvh"></param>
        /// <returns></returns>
        private static bool ExportData(this BinaryWriter writer, string tagName, ref GImpactQuantizedBvh bvh)
        {
            WriteTag(writer, tagName);

            var buffer = bvh.Save();

            writer.Write(buffer.Length);
            writer.Write(bvh.Save());

            return true;
        }
Example #7
0
        /// <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));
                }
            }
        }
Example #8
0
        /// <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);
        }