Exemplo n.º 1
0
        public void CreateTerrain()
        {
            fillTerrain = new Terrain();
            fillTerrain.SurfaceColor = new ColorARGB("FF000000");

            maskTerrain = new Terrain();
            maskTerrain.SurfaceColor = new ColorARGB("FFFFFFFF");
        }
Exemplo n.º 2
0
        private Brush CreateBrush(Terrain terrain)
        {
            Brush surfaceBrush = null;

            if(terrain.Surface == null)
            {
                surfaceBrush = new SolidColorBrush(Adapters.AsColor(terrain.SurfaceColor));
            }

            return surfaceBrush;
        }
Exemplo n.º 3
0
 /// <summary>
 /// Creates a new map with the specified height and width.
 /// </summary>
 /// <param name="width"></param>
 /// <param name="height"></param>
 public Map(int width, int height)
 {
     textBlockList = new List<TextBlock>();
     this.width = width;
     this.height = height;
     data = new Terrain[this.height][];
     for (int row = 0; row < this.height; ++row)
     {
         data[row] = new Terrain[this.width];
     }
 }
Exemplo n.º 4
0
 private void LibraryView_OnPropertyChanged(object sender, PropertyChangedEventArgs e)
 {
     if(e.PropertyName == "Selected")
     {
         _activeTerrain = (Terrain)LibraryView.Selected.Terrain;
     }
 }
Exemplo n.º 5
0
        /// <summary>
        /// Initialized the test terrain library.
        /// </summary>
        private void CreateTestLibrary()
        {
            testLibrary = new Library();
            Descriptor desc = new Descriptor();
            desc.Name = "Small Scale Landscape";
            desc.Description = "Terrain library suitable for small scale maps.";
            testLibrary.Descriptor = desc;

            Terrain t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Grasslands";
            desc.Description = "Grasslands or open plains";
            t.SurfaceColor = new ColorARGB("#ffb5cf7c");
            testLibrary.Add(t);

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Forest";
            desc.Description = "Forested area populated with mostly deciduous trees";
            t.SurfaceColor = new ColorARGB("#ff879959");
            testLibrary.Add(t);
            PngImage surfaceFeature = new PngImage(File.ReadAllBytes(@"Assets\set00-trn01-ftr01.png"));
            t.AddSurfaceFeature(new Terrain.SurfaceFeature(surfaceFeature));

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Dense Forest";
            desc.Description = "Dense, old growth forest with deciduous trees";
            t.SurfaceColor = new ColorARGB("#ff556332");
            testLibrary.Add(t);
            surfaceFeature = new PngImage(File.ReadAllBytes(@"Assets\DenseForest-001.png"));
            t.AddSurfaceFeature(new Terrain.SurfaceFeature(surfaceFeature));

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Mountains";
            desc.Description = "Mountains with little or, no vegitation.";
            t.SurfaceColor = new ColorARGB("#ffa67048");
            testLibrary.Add(t);

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Marsh";
            desc.Description = "Temperate climate marsh or moors.";
            t.SurfaceColor = new ColorARGB("#ff8bd4cb");
            testLibrary.Add(t);
            surfaceFeature = new PngImage(File.ReadAllBytes(@"Assets\set00-trn03-ftr01.png"));
            t.AddSurfaceFeature(new Terrain.SurfaceFeature(surfaceFeature));

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Desert";
            desc.Description = "Sandy desert with little or, no vegitation.";
            t.SurfaceColor = new ColorARGB("#ffd1c0a1");
            testLibrary.Add(t);

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Water";
            desc.Description = "Water. Typically shallow with a depth of less than 50 meters";
            t.SurfaceColor = new ColorARGB("#ff6ccdf1");
            testLibrary.Add(t);

            t = new Terrain();
            desc = new Descriptor();
            t.Descriptor = desc;
            desc.Name = "Deep Water";
            desc.Description = "Water, typically with a depth of more than 50 meters";
            t.SurfaceColor = new ColorARGB("#ff308aab");
            testLibrary.Add(t);
        }
Exemplo n.º 6
0
 public TerrainViewModel(Terrain terrain)
 {
     Terrain = terrain;
     Surface = CreateBrush(terrain);
 }
Exemplo n.º 7
0
 public Rectangle Fill(int x, int y, Terrain fillTerrain)
 {
     return Fill(x, y, null, fillTerrain);
 }
Exemplo n.º 8
0
 public Rectangle Fill(PointD2D pt, Terrain fillTerrain)
 {
     return Fill((int)pt.X, (int)pt.Y, fillTerrain);
 }
Exemplo n.º 9
0
 private void FillTile(
     Tile tile,
     Terrain matchTerrain,
     Terrain fillTerrain,
     Stack<Tile> fillStack,
     int x,
     int y)
 {
     Terrain currentTerrain = GetTerrain(x, y);
     Tile currentTile = new Tile(x, y);
     currentTile.Terrain = currentTerrain;
     if (currentTile.Terrain == matchTerrain)
     {
         // add the current tile to the fill stack
         fillStack.Push(currentTile);
         if (x < fillBounds.X)
         {
             fillBounds.X = x;
             fillBounds.Width = fillBounds.Right - x + 1;
         }
         if (x > fillBounds.Right)
         {
             fillBounds.Width = x - fillBounds.X + 1;
         }
         if (y < fillBounds.Y)
         {
             fillBounds.Height = fillBounds.Bottom - y + 1;
             fillBounds.Y = y;
         }
         if (y > fillBounds.Bottom)
         {
             fillBounds.Height = y - fillBounds.Y + 1;
         }
         SetTerrain(x, y, fillTerrain);
     }
     else
     {
         // this is a boundary cell and should be stored for undo operations
         fillBoundary.Add(tile.Location);
     }
 }
Exemplo n.º 10
0
 public void SetWidth(int newWidth)
 {
     if (newWidth != width)
     {
         Terrain[][] newData = new Terrain[height][];
         for (int row = 0; row < height; ++row)
         {
             newData[row] = new Terrain[newWidth];
             if (newWidth < width)
                 Array.Copy(data[row], newData[row], newWidth);
             else
                 Array.Copy(data[row], newData[row], width);
         }
         data = newData;
     }
 }
Exemplo n.º 11
0
 public void SetTerrain(int x, int y, Terrain terrain)
 {
     data[y][x] = terrain;
 }
Exemplo n.º 12
0
 public void SetHeight(int newHeight)
 {
     if (newHeight != height)
     {
         Terrain[][] newData = new Terrain[newHeight][];
         int rows = (int)Math.Min(height, newHeight);
         for (int row = 0; row < newHeight; ++row)
         {
             newData[row] = new Terrain[width];
             if (row < height)
                 Array.Copy(data[row], newData[row], width);
         }
         data = newData;
     }
 }
Exemplo n.º 13
0
 /// <summary>
 /// Fills a region with the defined boundary. 
 /// </summary>
 /// <param name="boundary"></param>
 /// <param name="fillTerrain"></param>
 /// <returns></returns>
 public Rectangle Fill(int x, int y, HashSet<PointI2D> boundary, 
     Terrain fillTerrain)
 {
     fillBoundary = new HashSet<PointI2D>();
     // reset the fill fields
     fillBounds = new Rectangle(x, y, 1, 1);
     Terrain matchTerrain = null;
     if (x >= 0 && y >= 0)
         matchTerrain = GetTerrain(x, y);
     else
         return fillBounds;
     // fill if terrain is not equal to terrain in selected tile
     if (matchTerrain != fillTerrain)
     {
         Stack<Tile> fillStack = new Stack<Tile>();
         Tile fillTile = new Tile(x, y);
         fillTile.Terrain = matchTerrain;
         fillStack.Push(fillTile);
         SetTerrain(x, y, fillTerrain);
         while (fillStack.Count != 0)
         {
             Tile currentTile = fillStack.Pop();
             currentTile.Terrain = fillTerrain;
             // North
             if (currentTile.Y > 0)
             {
                 FillTile(currentTile, matchTerrain, fillTerrain, fillStack,
                     currentTile.X,
                     currentTile.Y - 1);
             }
             // East
             if (currentTile.X < Width - 1)
             {
                 FillTile(currentTile, matchTerrain, fillTerrain, fillStack,
                     currentTile.X + 1,
                     currentTile.Y);
             }
             // South
             if (currentTile.Y < height - 1)
             {
                 FillTile(currentTile, matchTerrain, fillTerrain, fillStack,
                     currentTile.X,
                     currentTile.Y + 1);
             }
             // West
             if (currentTile.X > 0)
             {
                 FillTile(currentTile, matchTerrain, fillTerrain, fillStack,
                     currentTile.X - 1,
                     currentTile.Y);
             }
         }
     }
     return fillBounds;
 }