/// <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(); }
/// <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(); }