Exemplo n.º 1
0
        /// <summary>
        /// Lädt alle Daten aus dem internen Puffer in die jeweiligen Variablen.
        /// </summary>
        /// <remarks></remarks>
        private void ReadData()
        {
            // Dateiversion lesen
            string version = _buffer.ReadString(8);
            if(version != "VER 5.7\0")
                throw new InvalidDataException("Falsches Dateiformat oder falsche Dateiversion.");

            // Anzahlen lesen
            ushort terrainRestrictionCount = _buffer.ReadUShort();
            ushort terrainCount = _buffer.ReadUShort();

            // Terrain-Pointer lesen
            TerrainRestrictionPointers1 = new List<int>(terrainRestrictionCount);
            for(int i = 0; i < terrainRestrictionCount; ++i)
                TerrainRestrictionPointers1.Add(_buffer.ReadInteger());
            TerrainRestrictionPointers2 = new List<int>(terrainRestrictionCount);
            for(int i = 0; i < terrainRestrictionCount; ++i)
                TerrainRestrictionPointers2.Add(_buffer.ReadInteger());

            // Terrain-Beschränkungen lesen
            TerrainRestrictions = new List<DataElements.TerrainRestriction>(terrainRestrictionCount);
            DataElements.TerrainRestriction.TerrainCount = terrainCount;
            for(int i = 0; i < terrainRestrictionCount; ++i)
                TerrainRestrictions.Add(new DataElements.TerrainRestriction().ReadDataInline(_buffer));

            // Anzahl lesen
            ushort playerColorCount = _buffer.ReadUShort();

            // Spielerfarben lesen
            PlayerColors = new List<DataElements.PlayerColor>(playerColorCount);
            for(int i = 0; i < playerColorCount; ++i)
                PlayerColors.Add(new DataElements.PlayerColor().ReadDataInline(_buffer));

            // Anzahl lesen
            ushort soundCount = _buffer.ReadUShort();

            // Sounds lesen
            Sounds = new List<DataElements.Sound>(soundCount);
            for(int i = 0; i < soundCount; ++i)
                Sounds.Add(new DataElements.Sound().ReadDataInline(_buffer));

            // Anzahl lesen
            int graphicCount = _buffer.ReadUShort();

            // Grafik-Pointer lesen
            GraphicPointers = new List<int>(graphicCount);
            for(int i = 0; i < graphicCount; ++i)
                GraphicPointers.Add(_buffer.ReadInteger());

            // Grafiken lesen
            Graphics = new Dictionary<int, DataElements.Graphic>(graphicCount);
            for(int p = 0; p < GraphicPointers.Count; ++p)
                if(GraphicPointers[p] != 0)
                    Graphics.Add(p, new DataElements.Graphic().ReadDataInline(_buffer));

            // Ungenutzte Daten lesen
            int unusedCount = 36368 + terrainCount * 436;
            Unused1 = new List<byte>(unusedCount);
            for(int i = 0; i < unusedCount; ++i)
                Unused1.Add(_buffer.ReadByte());

            // Anzahl lesen
            int techageCount = _buffer.ReadInteger();

            // Technologie-Effekte lesen
            Techages = new List<DataElements.Techage>(techageCount);
            for(int i = 0; i < techageCount; ++i)
                Techages.Add(new DataElements.Techage().ReadDataInline(_buffer));

            // Anzahl lesen
            int unitCount = _buffer.ReadInteger();

            // Einheiten-Header lesen
            UnitHeaders = new List<DataElements.UnitHeader>(unitCount);
            for(int i = 0; i < unitCount; ++i)
                UnitHeaders.Add(new DataElements.UnitHeader().ReadDataInline(_buffer));

            // Anzahl lesen
            int civCount = _buffer.ReadUShort();

            // Kulturen lesen
            Civs = new List<DataElements.Civ>(civCount);
            for(int i = 0; i < civCount; ++i)
                Civs.Add(new DataElements.Civ().ReadDataInline(_buffer));

            // Anzahl lesen
            int researchCount = _buffer.ReadUShort();

            // Technologien lesen
            Researches = new List<DataElements.Research>(researchCount);
            for(int i = 0; i < researchCount; ++i)
                Researches.Add(new DataElements.Research().ReadDataInline(_buffer));

            // Unbekannte Technologiebaum-Daten lesen
            TechTreeUnknown = new List<int>(7);
            for(int i = 0; i < 7; ++i)
                TechTreeUnknown.Add(_buffer.ReadInteger());

            // TechTree lesen
            TechTree = new DataElements.TechTree().ReadDataInline(_buffer);

            // Auf neuen TechTree prüfen
            if(_buffer.Length - _buffer.Position > 4)
            {
                // Marker einlesen
                string newTechTreeMarker = _buffer.ReadString(4);
                if(newTechTreeMarker == NEW_TECH_TREE_VERSION_MARKER)
                    _newTechTree = true;
            }
            if(_newTechTree)
                TechTreeNew = new DataElements.TechTreeNew().ReadDataInline(_buffer);

            // Puffer leeren, um Speicher zu sparen
            _buffer.Clear();
        }
Exemplo n.º 2
0
        /// <summary>
        /// Lädt alle Daten aus dem internen Puffer in die jeweiligen Variablen.
        /// </summary>
        /// <remarks></remarks>
        private void ReadData()
        {
            // Dateiversion lesen
            string version = _buffer.ReadString(8);

            if (version != "VER 5.7\0")
            {
                throw new InvalidDataException("Invalid file format or wrong version.");
            }

            // Anzahlen lesen
            ushort terrainRestrictionCount = _buffer.ReadUShort();
            ushort terrainCount            = _buffer.ReadUShort();

            // Terrain-Pointer lesen
            TerrainRestrictionPointers1 = new List <int>(terrainRestrictionCount);
            for (int i = 0; i < terrainRestrictionCount; ++i)
            {
                TerrainRestrictionPointers1.Add(_buffer.ReadInteger());
            }
            TerrainRestrictionPointers2 = new List <int>(terrainRestrictionCount);
            for (int i = 0; i < terrainRestrictionCount; ++i)
            {
                TerrainRestrictionPointers2.Add(_buffer.ReadInteger());
            }

            // Terrain-Beschränkungen lesen
            TerrainRestrictions = new List <DataElements.TerrainRestriction>(terrainRestrictionCount);
            DataElements.TerrainRestriction.TerrainCount = terrainCount;
            for (int i = 0; i < terrainRestrictionCount; ++i)
            {
                TerrainRestrictions.Add(new DataElements.TerrainRestriction().ReadData(_buffer));
            }

            // Anzahl lesen
            ushort playerColorCount = _buffer.ReadUShort();

            // Spielerfarben lesen
            PlayerColors = new List <DataElements.PlayerColor>(playerColorCount);
            for (int i = 0; i < playerColorCount; ++i)
            {
                PlayerColors.Add(new DataElements.PlayerColor().ReadData(_buffer));
            }

            // Anzahl lesen
            ushort soundCount = _buffer.ReadUShort();

            // Sounds lesen
            Sounds = new List <DataElements.Sound>(soundCount);
            for (int i = 0; i < soundCount; ++i)
            {
                Sounds.Add(new DataElements.Sound().ReadData(_buffer));
            }

            // Anzahl lesen
            int graphicCount = _buffer.ReadUShort();

            // Grafik-Pointer lesen
            GraphicPointers = new List <int>(graphicCount);
            for (int i = 0; i < graphicCount; ++i)
            {
                GraphicPointers.Add(_buffer.ReadInteger());
            }

            // Grafiken lesen
            Graphics = new Dictionary <int, DataElements.Graphic>(graphicCount);
            for (int p = 0; p < GraphicPointers.Count; ++p)
            {
                if (GraphicPointers[p] != 0)
                {
                    Graphics.Add(p, new DataElements.Graphic().ReadData(_buffer));
                }
            }

            // Terrain-Daten lesen
            TerrainBlock = new DataElements.TerrainBlock().ReadData(_buffer);

            // RandomMap-Daten lese
            RandomMaps = new DataElements.RandomMaps().ReadData(_buffer);

            // Anzahl lesen
            int techageCount = _buffer.ReadInteger();

            // Technologie-Effekte lesen
            Techages = new List <DataElements.Techage>(techageCount);
            for (int i = 0; i < techageCount; ++i)
            {
                Techages.Add(new DataElements.Techage().ReadData(_buffer));
            }

            // Anzahl lesen
            int unitCount = _buffer.ReadInteger();

            // Einheiten-Header lesen
            UnitHeaders = new List <DataElements.UnitHeader>(unitCount);
            for (int i = 0; i < unitCount; ++i)
            {
                UnitHeaders.Add(new DataElements.UnitHeader().ReadData(_buffer));
            }

            // Anzahl lesen
            int civCount = _buffer.ReadUShort();

            // Kulturen lesen
            Civs = new List <DataElements.Civ>(civCount);
            for (int i = 0; i < civCount; ++i)
            {
                Civs.Add(new DataElements.Civ().ReadData(_buffer));
            }

            // Anzahl lesen
            int researchCount = _buffer.ReadUShort();

            // Technologien lesen
            Researches = new List <DataElements.Research>(researchCount);
            for (int i = 0; i < researchCount; ++i)
            {
                Researches.Add(new DataElements.Research().ReadData(_buffer));
            }

            // Unbekannte Technologiebaum-Daten lesen
            TechTreeUnknown = new List <int>(7);
            for (int i = 0; i < 7; ++i)
            {
                TechTreeUnknown.Add(_buffer.ReadInteger());
            }

            // TechTree lesen
            TechTree = new DataElements.TechTree().ReadData(_buffer);

            // Auf neuen TechTree prüfen
            if (_buffer.Length - _buffer.Position > 4)
            {
                // Marker einlesen
                string newTechTreeMarker = _buffer.ReadString(3);
                if (newTechTreeMarker == NEW_TECH_TREE_MARKER)
                {
                    _newTechTree = true;
                }
            }
            if (_newTechTree)
            {
                TechTreeNew = new DataElements.TechTreeNew().ReadData(_buffer);
            }

            // Puffer leeren, um Speicher zu sparen
            _buffer.Clear();
        }