bool ReadHeader( FileStream fs ) {
BinaryReader reader = new BinaryReader( fs );
try {
if( reader.ReadUInt32() != Config.LevelFormatID ) {
Logger.LogError( "Level.ReadHeader: Incorrect level format id (expected: " + Config.LevelFormatID + ")." );
return false;
}
widthX = reader.ReadUInt32();
if( !IsValidDimension( widthX ) ) {
Logger.LogError( "Level.ReadHeader: Invalid dimension specified for widthX: " + widthX );
return false;
}
widthY = reader.ReadUInt32();
if( !IsValidDimension( widthY ) ) {
Logger.LogError( "Level.ReadHeader: Invalid dimension specified for widthY: " + widthX );
return false;
}
height = reader.ReadUInt32();
if( !IsValidDimension( height ) ) {
Logger.LogError( "Level.ReadHeader: Invalid dimension specified for height: " + widthX );
return false;
}
int metaSize = (int)reader.ReadUInt32();
meta = new Dictionary<string, string>( metaSize );
for( int i = 0; i < metaSize; i++ ) {
string key = ReadLengthPrefixedString( reader );
string value = ReadLengthPrefixedString( reader );
meta.Add( key, value );
}
} catch( FormatException ex ) {
Logger.LogError( "Level.ReadHeader: Cannot parse one or more of the header entries: " + ex.Message );
return false;
} catch( EndOfStreamException ex ) {
}
return true;
}