fCraft.Level.ReadHeader C# (CSharp) Method

ReadHeader() private method

private ReadHeader ( FileStream fs ) : bool
fs System.IO.FileStream
return bool
        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;
        }

Usage Example

Example #1
0
        public static Level Load(string fileName)
        {
            FileStream fs    = null;
            Level      level = null;

            if (!File.Exists(fileName))
            {
                Logger.LogError("Level.Load: Specified file does not exist: " + fileName);
                return(null);
            }

            try {
                fs = File.OpenRead(fileName);
                if (level.ReadHeader(fs))
                {
                    level.ReadLevel(fs);
                    return(level);
                }
                else
                {
                    return(null);
                }
            } catch (Exception) {
                Logger.LogError("Level.Load: Error trying to read from file: " + fileName);
                return(null);
            } finally {
                if (fs != null)
                {
                    fs.Close();
                }
            }
        }