public void FillLayer(TileDescription td, int layerIndex) { for (int x = 0; x < Width; x++) { for (int y = 0; y < Height; y++) { layers[layerIndex][x, y] = td; } } }
public GameMap(int mapWidth, int mapHeight, int numberOfLayersParam) { layers = new List <TileDescription[, ]>(); numberOfLayers = numberOfLayersParam; Width = mapWidth; Height = mapHeight; for (int i = 0; i < numberOfLayers; i++) { TileDescription[,] layer = new TileDescription[mapWidth, mapHeight]; layers.Add(layer); } }
public void SetTileForLayer(TileDescription td, int x, int y, int layerIndex) { layers[layerIndex][x, y] = td; }
public void RenderContent() { DrawingVisual mapBackground = (DrawingVisual)_visuals[0]; DrawingContext drawingContext = mapBackground.RenderOpen(); drawingContext.PushClip(new RectangleGeometry(new Rect(00, 00, 850, 700))); BitmapImage image = new BitmapImage(new Uri(Environment.CurrentDirectory + "/assets/images/grass16x16.png")); // The idea here is to render only a specific window of the game map, not more than 20x20 cells. for (int l = 0; l < gameMap.NumberOfLayers; l++) { for (int row = 0; row < 18; row++) { for (int i = 0; i < 19; i += 1) { int cellX = i + cellScrollOffsetX; int cellY = row + cellScrollOffsetY; TileDescription tileDescription = gameMap.Tile(l, cellX, cellY); if (tileDescription == null) { continue; } Rect rect = new Rect() { X = i * 2 * DrawScale * rr + (cellY & 1) * rr * DrawScale, Width = 16 * DrawScale, Y = row * (h + s) * DrawScale, Height = 16 * DrawScale }; drawingContext.DrawImage(imageDict[tileDescription.TileName], rect); } } } if (ShowDebugLines) { Pen linePen = new Pen(Brushes.LightSteelBlue, 2); for (int i = 0; i < 100; i++) { drawingContext.DrawLine(linePen, new Point((i * DrawScale * rr * 2) + 1.5, 0), new Point((i * DrawScale * rr * 2) + 1.5, 700)); drawingContext.DrawLine(linePen, new Point(0, i * (h + s) * DrawScale), new Point(850, i * (h + s) * DrawScale)); } } // Draw the cursor int rowInfo = drawCursorY + cellScrollOffsetY; int cursorPixelX = (int)((drawCursorX) * 2 * DrawScale * rr + ((rowInfo) & 1) * rr * DrawScale); int cursorPixelY = (int)((drawCursorY) * (h + s) * DrawScale); System.Console.WriteLine("cursorPixel: " + cursorPixelX + "/" + cursorPixelY); Rect rectCursor = new Rect() { X = cursorPixelX, Y = cursorPixelY, Width = 16 * DrawScale, Height = 16 * DrawScale }; BitmapImage imageCursor = new BitmapImage(new Uri(Environment.CurrentDirectory + "/assets/images/cellCursorRed16x16.png")); drawingContext.DrawImage(imageCursor, rectCursor); drawingContext.Pop(); drawingContext.Close(); }