private void DrawWallsAndContent(Graphics g) { if (_wallColor == null) { _wallColor = new SolidPenBrush(MapPens["WallColor"]); } _drawContentService.HWidth = DrawAreaWidth; _drawContentService.HHeight = DrawAreaHeight; var map = Map; for (int row = 0, startX = Origin.X, startY = Origin.Y; row < map.MapSize.Rows; row++, startX -= DrawAreaWidth, startY += DrawAreaHeight) { for (int col = 0, x = startX, y = startY; col < map.MapSize.Cols; col++, x += DrawAreaWidth, y += DrawAreaHeight) { if (map[row, col] != null) { XCMapTile tile = (XCMapTile)map[row, col]; if (tile.North != null) { _drawContentService.DrawContent(g, _wallColor, x, y, tile.North); } if (tile.West != null) { _drawContentService.DrawContent(g, _wallColor, x, y, tile.West); } if (tile.Content != null) { _drawContentService.DrawContent(g, _wallColor, x, y, tile.Content); } } } } }
private static void DrawWindow( Graphics g, SolidPenBrush color, Point start, Point end) { var dist = Point.Subtract(end, new Size(start)); var size = new Size(dist.X / 3, dist.Y / 3); var point2 = Point.Add(start, Size.Add(size, size)); g.DrawLine( color.Pen, start, Point.Add(start, size)); g.DrawLine( color.LightPen, Point.Add(start, size), point2); g.DrawLine( color.Pen, point2, end); }
public void DrawContent( Graphics g, SolidPenBrush color, int x, int y, TileBase content) { var contentType = _contentTypeService.GetContentType(content); var isDoor = _contentTypeService.IsDoor(content); const int TO_WALL_MARGIN = 4; var topCorner = new Point( x, y + TO_WALL_MARGIN); var bottomCorner = new Point( x, y + (HHeight * 2) - TO_WALL_MARGIN); var leftCorner = new Point( x - HWidth + (TO_WALL_MARGIN * 2), y + HHeight); var rightCorner = new Point( x + HWidth - (TO_WALL_MARGIN * 2), y + HHeight); switch (contentType) { case ContentTypes.Content: SetGroundPath(x, y); g.FillPath( color.Brush, _content); break; case ContentTypes.Ground: SetGroundPath(x, y); g.FillPath( color.LightBrush, _content); break; case ContentTypes.NorthFence: g.DrawLine( color.LightPen, topCorner, rightCorner); break; case ContentTypes.NorthWall: g.DrawLine( color.Pen, topCorner, rightCorner); if (isDoor) { g.DrawLine( color.Pen, topCorner, Point.Add(rightCorner, new Size(-10, 4))); } break; case ContentTypes.WestFence: g.DrawLine( color.LightPen, topCorner, leftCorner); break; case ContentTypes.WestWall: g.DrawLine( color.Pen, topCorner, leftCorner); if (isDoor) { g.DrawLine( color.Pen, Point.Add(topCorner, new Size(6, 8)), leftCorner); } break; case ContentTypes.NorthWallWithWindow: DrawWindow( g, color, topCorner, rightCorner); break; case ContentTypes.WestWallWithWindow: DrawWindow( g, color, topCorner, leftCorner); break; case ContentTypes.SouthWall: g.DrawLine( color.Pen, leftCorner, bottomCorner); break; case ContentTypes.EastWall: g.DrawLine( color.Pen, bottomCorner, rightCorner); break; case ContentTypes.NW_To_SE: g.DrawLine( color.Pen, topCorner, bottomCorner); break; case ContentTypes.NE_To_SW: g.DrawLine( color.Pen, leftCorner, rightCorner); break; case ContentTypes.NorthWestCorner: g.DrawLine( color.Pen, Point.Add(topCorner, new Size(-4, 0)), Point.Add(topCorner, new Size(4, 0))); break; case ContentTypes.NorthEastCorner: g.DrawLine( color.Pen, Point.Add(rightCorner, new Size(0, -4)), Point.Add(rightCorner, new Size(0, 4))); break; case ContentTypes.SouthEastCorner: g.DrawLine( color.Pen, Point.Add(bottomCorner, new Size(-4, 0)), Point.Add(bottomCorner, new Size(4, 0))); break; case ContentTypes.SouthWestCorner: g.DrawLine( color.Pen, Point.Add(leftCorner, new Size(0, -4)), Point.Add(leftCorner, new Size(0, 4))); break; } }