private void Read(string Filename) { mRsmFile = new RsmFile(); using (FileStream s = System.IO.File.OpenRead(Filename)) { using (BinaryReader bin = new BinaryReader(s, Encoding.GetEncoding("ISO-8859-1"))) { mRsmFile.MagicHead = bin.ReadChars(4); mRsmFile.MajorVer = (int)bin.ReadChar(); mRsmFile.MinorVer = (int)bin.ReadChar(); // 1.2 && 1.3 == 24 bytes FREE, others == 25 bytes FREE byte skip = 25; if (mRsmFile.MajorVer == 1 && (mRsmFile.MinorVer == 2 || mRsmFile.MinorVer == 3)) { skip = 24; } bin.BaseStream.Position += skip; mRsmFile.TextureNameCount = (int)bin.ReadUInt32(); mRsmFile.TextureNames = new string[mRsmFile.TextureNameCount]; for (int i = 0; i < mRsmFile.TextureNameCount; i++) { mRsmFile.TextureNames[i] = Tools.ReadWord(bin, 40); } bool isMain = true; mRsmFile.Meshes = new List <Mesh>(); while (bin.PeekChar() >= 0) { ReadMesh(isMain, bin); isMain = false; if (bin.BaseStream.Length - bin.BaseStream.Position < 100) { break; } } if (mRsmFile.Meshes.Count == 1) { mRsmFile.Meshes[0].IsOnly = true; } } } }
private void Read( string Filename ) { mRsmFile = new RsmFile(); using( FileStream s = System.IO.File.OpenRead( Filename ) ) { using( BinaryReader bin = new BinaryReader( s, Encoding.GetEncoding( "ISO-8859-1" ) ) ) { mRsmFile.MagicHead = bin.ReadChars( 4 ); mRsmFile.MajorVer = (int)bin.ReadChar(); mRsmFile.MinorVer = (int)bin.ReadChar(); // 1.2 && 1.3 == 24 bytes FREE, others == 25 bytes FREE byte skip = 25; if( mRsmFile.MajorVer == 1 && ( mRsmFile.MinorVer == 2 || mRsmFile.MinorVer == 3 ) ) skip = 24; bin.BaseStream.Position += skip; mRsmFile.TextureNameCount = (int)bin.ReadUInt32(); mRsmFile.TextureNames = new string[ mRsmFile.TextureNameCount ]; for( int i = 0; i < mRsmFile.TextureNameCount; i++ ) mRsmFile.TextureNames[ i ] = Tools.ReadWord( bin, 40 ); bool isMain = true; mRsmFile.Meshes = new List<Mesh>(); while( bin.PeekChar() >= 0 ) { ReadMesh( isMain, bin ); isMain = false; if( bin.BaseStream.Length - bin.BaseStream.Position < 100 ) break; } if( mRsmFile.Meshes.Count == 1 ) mRsmFile.Meshes[ 0 ].IsOnly = true; } } }