Exemple #1
0
 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);
     }
 }
Exemple #2
0
 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);
     }
 }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }