private static IReadOnlyList<NavigationGridlet> CreateGridletsFromDungeonGrid(Grid grid, GridletFactory gridletFactory) { var cellSpacing = 70; var cellSize = 60; var connectorSize = 11; var connectorWidth = 5; var results = new List<NavigationGridlet>(); foreach (var cell in grid.Cells) { results.Add(gridletFactory.Quad(cell.X * cellSpacing, cell.Y * cellSpacing, 0, 0, 0, 0, cellSize, cellSize)); } var connectors = grid.Cells.SelectMany(x => x.Connectors).Distinct().Where(x => x.State == ConnectorState.Linked).ToArray(); // foreach (var connector in connectors) { for (var i = 0; i < connectors.Length; i++) { Console.WriteLine("C: " + i + " / " + connectors.Length); var connector = connectors[i]; var first = connector.First; var second = connector.Second; var segment = connector.Segment; var theta = Math.Atan2(segment.Vector.Y, segment.Vector.X); var dx = Math.Cos(theta) * cellSpacing / 2; var dy = Math.Sin(theta) * cellSpacing / 2; results.Add(gridletFactory.Quad((float)(first.X * cellSpacing + dx), (float)(first.Y * cellSpacing + dy), 0, 0, (float)theta, 0, connectorSize, connectorWidth)); } return results; }
public void RenderGrid(Grid grid) { var cellSize = 0.2f; if (nextBitmap != null) { return; } var width = grid.Cells.Max(x => x.X); var height = grid.Cells.Max(x => x.Y); var bitmap = new Bitmap((int)(width * scale + padding * 2), (int)(height * scale + padding * 2)); using (var g = Graphics.FromImage(bitmap)) { g.Clear(Color.Black); foreach (var cell in grid.Cells) { using (var keyPen = new Pen(cell.KeyColor)) { g.DrawEllipse(keyPen, (cell.X - cellSize * 2) * scale + padding, (cell.Y - cellSize * 2) * scale + padding, 4 * cellSize * scale, 4 * cellSize * scale); } using (var lockPen = new Pen(cell.LockColor)) { g.DrawRectangle(lockPen, (cell.X - cellSize) * scale + padding, (cell.Y - cellSize) * scale + padding, 2 * cellSize * scale, 2 * cellSize * scale); } g.FillRectangle(kCellTypeBrushes[cell.Type], (cell.X - cellSize / 2) * scale + padding, (cell.Y - cellSize / 2) * scale + padding, cellSize * scale, cellSize * scale); } foreach (var connector in grid.Cells.SelectMany(x => x.Connectors).Distinct()) { var connectorStatePen = kConnectorStatePens[connector.State]; g.DrawLine(connectorStatePen, connector.First.X * scale + padding, connector.First.Y * scale + padding, connector.Second.X * scale + padding, connector.Second.Y * scale + padding); } } nextBitmap = bitmap; }
public GridManipulator(Grid grid, Random random) { this.grid = grid; this.random = random; }
public Renderer(Grid grid) { this.grid = grid; new Thread(UiThreadStart) { ApartmentState = ApartmentState.STA }.Start(); }