Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
 public GridManipulator(Grid grid, Random random)
 {
     this.grid = grid;
      this.random = random;
 }
Ejemplo n.º 4
0
 public Renderer(Grid grid)
 {
     this.grid = grid;
      new Thread(UiThreadStart) { ApartmentState = ApartmentState.STA }.Start();
 }