private static void PlaceLargeTile(MapState mapState, Tile tile, int layer, int x, int y) { for (int subX = 0; subX < tile.Width; subX++) { for (int subY = 0; subY < tile.Height; subY++) { mapState.SetTile(layer, x + subX, y + subY, tile.GetSubtile(subX, subY)); } } }
private void SelectTilesBase(MapState mapState, Random rng, int tileX, int tileY, int tileXLimit, int tileYLimit) { #if DEBUG Console.Out.WriteLine("SelectTilesBase ({0},{1})-({2},{3})", tileX, tileY, tileXLimit, tileYLimit); #endif for (int layer = 0; layer < 4; layer++) { Grid <BorderKind> terrainMap = Map.MakeTerrainSubMap(mapState, tileX, tileY, tileXLimit, tileYLimit, layer); for (int y = tileYLimit - 1; y >= tileY; y--) { for (int x = tileXLimit - 1; x >= tileX; x--) { Tile t = GetTile(rng, x - tileX, y - tileY, terrainMap, false, mapState.GetTile(layer, x, y)); mapState.SetTile(layer, x, y, t); } } } }
public static Map DeserializeFrom(StreamReader stream) { XmlReader xml = XmlReader.Create(stream); xml.ReadStartElement("Map"); String tilesetName = xml.ReadElementString("Tileset"); if (tilesetName != "Linedraw") { throw new NotImplementedException(); } TileSet tileSet = TileSet.Load(@"Data\Simple.mdts"); int width = int.Parse(xml.ReadElementString("Width")); int height = int.Parse(xml.ReadElementString("Height")); Map map = new Map(tileSet, width, height); MapState state = map.state; xml.ReadStartElement("Terrain"); for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++) { int tileId = int.Parse(xml.ReadElementString("Square")); state.SetSquareKind(x, y, tileSet.TerrainByIndex[tileId]); } } xml.ReadEndElement(); /* Terrain */ xml.ReadStartElement("Tiles"); while (xml.IsStartElement("Tile")) { xml.ReadStartElement("Tile"); int layer = int.Parse(xml.ReadElementString("Layer")); int x = int.Parse(xml.ReadElementString("X")); int y = int.Parse(xml.ReadElementString("Y")); int value = int.Parse(xml.ReadElementString("Value")); Tile tile = tileSet.TileList[value]; if (tile.IsLarge) { for (int subX = 0; subX < tile.Width; subX++) { for (int subY = 0; subY < tile.Height; subY++) { state.SetTile(layer, x + subX, y + subY, tile.GetSubtile(subX, subY)); } } } else { state.SetTile(layer, x, y, tile); } xml.ReadEndElement(); /* Tile */ } xml.ReadEndElement(); /* Tiles */ xml.ReadEndElement(); /* Map */ // TODO: Verify that map is correct map.ClearHoverTerrain(); return(map); }