public TMap ReadMap() { List <TMapLayer> resourceLayers = new List <TMapLayer>(); List <TMapLayer> biomeLayers = new List <TMapLayer>(); IEnumerable <string> layerNames = Directory.GetFiles(_mapDirectory).Select(name => Path.GetFileNameWithoutExtension(name)).Distinct(); foreach (var layerName in layerNames) { TMapLayerHeader header = ReadLayerHeader(layerName); var bitmap = new Bitmap(Path.Combine(_mapDirectory, layerName + ".png"), true); var layerReader = new PNGMapLayerReader(bitmap, header); TMapLayer layer = layerReader.ReadLayer(); switch (layer.Type) { case DefinitionType.Biome: biomeLayers.Add(layer); break; case DefinitionType.Resource: resourceLayers.Add(layer); break; default: throw new InvalidDataException($"Invalid layer type {layer.Type}"); } } ValidateLayers(resourceLayers, biomeLayers); return(new TMap() { Name = _mapName, ResourceLayers = resourceLayers.ToArray(), BiomeLayer = biomeLayers.First() }); }
public static TMap Import(Stream stream) { using (BinaryReader reader = new BinaryReader(stream)) { string name = reader.ReadString(); TMapLayer biomeLayer = ReadLayer(reader); int layersCount = reader.ReadInt32(); var layers = new TMapLayer[layersCount]; for (int i = 0; i < layersCount; i++) { layers[i] = ReadLayer(reader); } return(new TMap() { Name = name, ResourceLayers = layers, BiomeLayer = biomeLayer }); } }
public void ReadBiomeLayerTest(int index) { TLayer layer = _fixture.Layers[index]; var reader = new PNGMapLayerReader(layer.Bitmap, layer.MapLayerHeader); TMapLayer result = reader.ReadLayer(); Assert.Equal(layer.MapLayerHeader.Type, result.Type); Dictionary <string, TColor> dict = layer.MapLayerHeader.Colors.ToDictionary(col => col.Type, col => col.Color); for (int y = 0; y < layer.Bitmap.Height; y++) { for (int x = 0; x < layer.Bitmap.Width; x++) { var pixel = layer.Bitmap.GetPixel(x, y); var color = dict[result.GetValue(x, y)]; Assert.Equal(pixel.R, color.R); Assert.Equal(pixel.G, color.G); Assert.Equal(pixel.B, color.B); } } }