Пример #1
0
 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;
         }
     }
 }
Пример #2
0
        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);
            }
        }
Пример #3
0
 public void SetTileForLayer(TileDescription td, int x, int y, int layerIndex)
 {
     layers[layerIndex][x, y] = td;
 }
Пример #4
0
        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();
        }