private static void DrawOceanBorderEast(ref Picture output, ITile tile) { if (tile.GetBorderType(Direction.East) == Terrain.Ocean) { return; } if (tile.GetBorderType(Direction.North) == Terrain.Ocean) { if (tile.GetBorderType(Direction.NorthEast) == Terrain.Ocean) { output.AddLayer(Res.GetPart("TER257", 72, 176, 8, 8), 8, 0); } else { output.AddLayer(Res.GetPart("TER257", 104, 176, 8, 8), 8, 0); } } else { output.AddLayer(Res.GetPart("TER257", 88, 176, 8, 8), 8, 0); } if (tile.GetBorderType(Direction.South) == Terrain.Ocean) { if (tile.GetBorderType(Direction.SouthEast) == Terrain.Ocean) { output.AddLayer(Res.GetPart("TER257", 24, 184, 8, 8), 8, 8); } else { output.AddLayer(Res.GetPart("TER257", 56, 184, 8, 8), 8, 8); } } else { output.AddLayer(Res.GetPart("TER257", 88, 184, 8, 8), 8, 8); } }
private static void DrawOceanBorderWest(ref Picture output, ITile tile) { if (tile.GetBorderType(Direction.West) == Terrain.Ocean) { return; } if (tile.GetBorderType(Direction.North) == Terrain.Ocean) { if (tile.GetBorderType(Direction.NorthWest) == Terrain.Ocean) { output.AddLayer(Res.GetPart("TER257", 16, 176, 8, 8), 0, 0); } else { output.AddLayer(Res.GetPart("TER257", 48, 176, 8, 8), 0, 0); } } else { output.AddLayer(Res.GetPart("TER257", 80, 176, 8, 8), 0, 0); } if (tile.GetBorderType(Direction.South) == Terrain.Ocean) { if (tile.GetBorderType(Direction.SouthWest) == Terrain.Ocean) { output.AddLayer(Res.GetPart("TER257", 64, 184, 8, 8), 0, 8); } else { output.AddLayer(Res.GetPart("TER257", 96, 184, 8, 8), 0, 8); } } else { output.AddLayer(Res.GetPart("TER257", 80, 184, 8, 8), 0, 8); } }
private static void DrawDiagonalCoast(ref Picture output, ITile tile) { bool north = (tile.GetBorderType(Direction.North) == Terrain.Ocean); bool east = (tile.GetBorderType(Direction.East) == Terrain.Ocean); bool south = (tile.GetBorderType(Direction.South) == Terrain.Ocean); bool west = (tile.GetBorderType(Direction.West) == Terrain.Ocean); if (north && west && (tile.GetBorderType(Direction.NorthWest) != Terrain.Ocean)) { output.AddLayer(Res.GetPart("TER257", 32, 176, 8, 8), 0, 0); } if (north && east && (tile.GetBorderType(Direction.NorthEast) != Terrain.Ocean)) { output.AddLayer(Res.GetPart("TER257", 40, 176, 8, 8), 8, 0); } if (south && west && (tile.GetBorderType(Direction.SouthWest) != Terrain.Ocean)) { output.AddLayer(Res.GetPart("TER257", 32, 184, 8, 8), 0, 8); } if (south && east && (tile.GetBorderType(Direction.SouthEast) != Terrain.Ocean)) { output.AddLayer(Res.GetPart("TER257", 40, 184, 8, 8), 8, 8); } }
internal static Picture GetTile256(ITile tile, bool improvements, bool roads) { Picture output = new Picture(16, 16); // Set tile base switch (tile.Type) { case Terrain.Ocean: output.AddLayer(Res.GetPart("TER257", 0, 160, 16, 16)); break; default: output.AddLayer(Res.GetPart("SP257", 0, 64, 16, 16)); break; } // Add tile terrain switch (tile.Type) { case Terrain.Ocean: if (!DrawOceanCorners(ref output, tile)) { DrawOceanBorderNorth(ref output, tile); DrawOceanBorderEast(ref output, tile); DrawOceanBorderSouth(ref output, tile); DrawOceanBorderWest(ref output, tile); } if (tile.GetBorderType(Direction.North) == Terrain.River) { output.AddLayer(Res.GetPart("TER257", 128, 176, 16, 16)); } if (tile.GetBorderType(Direction.East) == Terrain.River) { output.AddLayer(Res.GetPart("TER257", 144, 176, 16, 16)); } if (tile.GetBorderType(Direction.South) == Terrain.River) { output.AddLayer(Res.GetPart("TER257", 160, 176, 16, 16)); } if (tile.GetBorderType(Direction.West) == Terrain.River) { output.AddLayer(Res.GetPart("TER257", 176, 176, 16, 16)); } DrawDiagonalCoast(ref output, tile); break; case Terrain.River: if (improvements) { DrawIrrigation(ref output, tile); DrawMine(ref output, tile); } output.AddLayer(Res.GetPart("SP257", tile.Borders * 16, 80, 16, 16)); break; default: int terrainId = (int)tile.Type; if (tile.Type == Terrain.Grassland2) { terrainId = (int)Terrain.Grassland1; } if (improvements) { DrawIrrigation(ref output, tile); } output.AddLayer(Res.GetPart("TER257", tile.Borders * 16, terrainId * 16, 16, 16)); break; } // Add special resources if (!Map.TileIsType(tile, Terrain.Grassland1, Terrain.Grassland2) && tile.Special) { int terrainId = (int)tile.Type; Picture resource = Res.GetPart("SP257", terrainId * 16, 112, 16, 16); Picture.ReplaceColours(resource, 3, 0); output.AddLayer(resource); } else if (tile.Type == Terrain.Grassland2) { Picture resource = Res.GetPart("SP257", 152, 40, 8, 8); Picture.ReplaceColours(resource, 3, 0); output.AddLayer(resource, 4, 4); } // Add tile improvements if (tile.Type != Terrain.River && improvements) { DrawMine(ref output, tile); } if (roads) { DrawRoad(ref output, tile); DrawRailRoad(ref output, tile, true); } DrawFortress(ref output, tile, true); DrawHut(ref output, tile); return(output); }
private static bool DrawOceanCorners(ref Picture output, ITile tile) { int borders = 0; if (tile.GetBorderType(Direction.North) != Terrain.Ocean) { borders += 1; } if (tile.GetBorderType(Direction.East) != Terrain.Ocean) { borders += 2; } if (tile.GetBorderType(Direction.South) != Terrain.Ocean) { borders += 4; } if (tile.GetBorderType(Direction.West) != Terrain.Ocean) { borders += 8; } if (borders == 6) // South East { if (tile.GetBorderType(Direction.NorthEast) != Terrain.Ocean) { return(false); } if (tile.GetBorderType(Direction.SouthWest) != Terrain.Ocean) { return(false); } output.AddLayer(Res.GetPart("SP299", 224, 100, 16, 16), 0, 0); } if (borders == 9) // North West { if (tile.GetBorderType(Direction.NorthEast) != Terrain.Ocean) { return(false); } if (tile.GetBorderType(Direction.SouthWest) != Terrain.Ocean) { return(false); } output.AddLayer(Res.GetPart("SP299", 240, 100, 16, 16), 0, 0); } else if (borders == 3) // North East { if (tile.GetBorderType(Direction.NorthWest) != Terrain.Ocean) { return(false); } if (tile.GetBorderType(Direction.SouthEast) != Terrain.Ocean) { return(false); } output.AddLayer(Res.GetPart("SP299", 256, 100, 16, 16), 0, 0); } else if (borders == 12) // South West { if (tile.GetBorderType(Direction.NorthWest) != Terrain.Ocean) { return(false); } if (tile.GetBorderType(Direction.SouthEast) != Terrain.Ocean) { return(false); } output.AddLayer(Res.GetPart("SP299", 272, 100, 16, 16), 0, 0); } else { return(false); } return(true); }