public void CreateTerrain() { fillTerrain = new Terrain(); fillTerrain.SurfaceColor = new ColorARGB("FF000000"); maskTerrain = new Terrain(); maskTerrain.SurfaceColor = new ColorARGB("FFFFFFFF"); }
private Brush CreateBrush(Terrain terrain) { Brush surfaceBrush = null; if(terrain.Surface == null) { surfaceBrush = new SolidColorBrush(Adapters.AsColor(terrain.SurfaceColor)); } return surfaceBrush; }
/// <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]; } }
private void LibraryView_OnPropertyChanged(object sender, PropertyChangedEventArgs e) { if(e.PropertyName == "Selected") { _activeTerrain = (Terrain)LibraryView.Selected.Terrain; } }
/// <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); }
public TerrainViewModel(Terrain terrain) { Terrain = terrain; Surface = CreateBrush(terrain); }
public Rectangle Fill(int x, int y, Terrain fillTerrain) { return Fill(x, y, null, fillTerrain); }
public Rectangle Fill(PointD2D pt, Terrain fillTerrain) { return Fill((int)pt.X, (int)pt.Y, fillTerrain); }
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); } }
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; } }
public void SetTerrain(int x, int y, Terrain terrain) { data[y][x] = terrain; }
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; } }
/// <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; }