Example #1
0
    private void Initialize()
    {
        var dim = 2 * MapRadius + 1;

        InitCells(dim, dim);
        Width             = dim * UNITS_PER_TILE;
        Height            = dim * UNITS_PER_TILE;
        _spriteDictionary = new LRUSpriteDictionary((dim + 1) * (dim + 1));
        _renderGrid       = new RenderGrid(_cells.ToArray(), dim, dim);
        _loadedPosition   = new ProjectedPosition(MapRadius, MapRadius, ZoomLevel, 0, 0);
        _position         = new Vector3();
    }
Example #2
0
        public override void Render(RenderGrid grid, Stream stream)
        {
            int width  = Settings.CellSize / 2 * (grid.RowCount + grid.ColumnCount) + Settings.Margin * 2;
            int height = Settings.CellSize / 4 * (grid.RowCount + grid.ColumnCount) + Settings.Margin * 2;

            using (var image = new Image <Rgba32>(width, height))
            {
                image.Mutate();
                image.Mutate(context =>
                {
                    var fullArea = new Rectangle(0, 0, width, height);

                    foreach (AreaRenderer backgroundRenderer in BackgroundRenderers)
                    {
                        backgroundRenderer.Render(context, fullArea);
                    }

                    for (int columnIndex = grid.ColumnCount - 1; columnIndex >= 0; --columnIndex)
                    {
                        for (int rowIndex = 0; rowIndex < grid.RowCount; ++rowIndex)
                        {
                            RenderCell cell = grid[rowIndex, columnIndex];

                            var cellArea = new Rectangle(
                                TranslateCoordWithMargin((cell.Column + cell.Row) * Settings.CellSize / 2),
                                TranslateCoordWithMargin((grid.ColumnCount - cell.Column - 1 + cell.Row) * Settings.CellSize / 4),
                                Settings.CellSize,
                                Settings.CellSize / 2);

                            if (cell.RenderType == RenderType.Ground)
                            {
                                foreach (CellRenderer groundRenderer in GroundRenderers)
                                {
                                    groundRenderer.Render(context, cellArea, cell);
                                }
                            }

                            if (cell.RenderType == RenderType.Wall)
                            {
                                foreach (CellRenderer wallRenderer in WallRenderers)
                                {
                                    wallRenderer.Render(context, cellArea, cell);
                                }
                            }
                        }
                    }
                });

                image.Save(stream, ImageFormats.Png);
            }
        }
Example #3
0
        public void should_render_cell_with_tags()
        {
            var          grid     = new Grid(1, 1);
            const string tagValue = "value";

            grid[0, 0].Tags["key"] = tagValue;
            var renderGrid = new RenderGrid(grid);

            // | n-w |  n  | n-e |
            // |  w  |  c  |  e  |
            // | s-w |  s  | s-e |

            Assert.Equal(tagValue, renderGrid[1, 1].GetTag("key"));
        }
Example #4
0
            public void Write3D(Stream stream)
            {
                RenderGrid renderGrid = ComplexMazeFixture.Create();
                var        factory    = new TestComponentFactory();
                var        renderer   = new Fake3DGameLevelRenderer(
                    factory.CreateBackgroundRenderers(),
                    factory.CreateGroundRenderers(),
                    factory.CreateWallRenderers(),
                    factory.CreateSettings());

                using (renderer)
                {
                    renderer.Render(renderGrid, stream);
                }
            }
Example #5
0
        public void should_render_multiple_columns()
        {
            var grid = new Grid(1, 2);

            grid[0, 0].Link(grid[0, 1]);
            var renderGrid = new RenderGrid(grid);

            var expectedRenderGrid = new[, ]
            {
                { "W,SE", "W,EW", "W,EW", "W,EW", "W,SW" },
                { "W,NS", "G,E", "G,EW", "G,W", "W,NS" },
                { "W,NE", "W,EW", "W,EW", "W,EW", "W,NW" }
            };

            Assert.Equal(expectedRenderGrid, RenderToArray(renderGrid));
        }
Example #6
0
        private void HandlePointerPressed(object sender, PointerRoutedEventArgs e)
        {
            // Don't interact if any of the animations are still running
            if (_sw1.IsRunning || _sw1.IsRunning)
            {
                return;
            }

            RenderGrid.CapturePointer(e.Pointer);
            _swipeStartPoint = e.GetCurrentPoint(RenderGrid).Position;
            // Position the bubble at the same height as the touch
            _verticalReveal = (float)(_swipeStartPoint.Y / _rootSize.Height) * VerticalRevealFactor;
            _sw0.Restart();
            _swipeDir      = SwipeDirection.None;
            _isPointerDown = true;
        }
Example #7
0
        static string[,] RenderToArray(RenderGrid renderGrid)
        {
            var result = new string[renderGrid.RowCount, renderGrid.ColumnCount];

            for (int rowIndex = 0; rowIndex < renderGrid.RowCount; ++rowIndex)
            {
                for (int columnIndex = 0; columnIndex < renderGrid.ColumnCount; ++columnIndex)
                {
                    RenderCell cell       = renderGrid[rowIndex, columnIndex];
                    char       renderType = cell.RenderType.ToString().First();
                    string     direction  = CreateDirectionString(cell.Direction);
                    result[rowIndex, columnIndex] = $"{renderType},{direction}";
                }
            }

            return(result);
        }
Example #8
0
        public override void Render(RenderGrid grid, Stream stream)
        {
            int width  = CalculateDimension(grid.ColumnCount);
            int height = CalculateDimension(grid.RowCount);

            using (var image = new Image <Rgba32>(width, height))
            {
                image.Mutate();
                image.Mutate(context =>
                {
                    var fullArea = new Rectangle(0, 0, width, height);

                    foreach (AreaRenderer backgroundRenderer in BackgroundRenderers)
                    {
                        backgroundRenderer.Render(context, fullArea);
                    }

                    foreach (RenderCell cell in grid.GetCells())
                    {
                        var cellArea = new Rectangle(
                            TranslateCoordWithMargin(cell.Column * Settings.CellSize),
                            TranslateCoordWithMargin(cell.Row * Settings.CellSize),
                            Settings.CellSize,
                            Settings.CellSize);

                        if (cell.RenderType == RenderType.Ground)
                        {
                            foreach (CellRenderer groundRenderer in GroundRenderers)
                            {
                                groundRenderer.Render(context, cellArea, cell);
                            }
                        }

                        if (cell.RenderType == RenderType.Wall)
                        {
                            foreach (CellRenderer wallRenderer in WallRenderers)
                            {
                                wallRenderer.Render(context, cellArea, cell);
                            }
                        }
                    }
                });

                image.Save(stream, ImageFormats.Png);
            }
        }
Example #9
0
        public void should_render_single_cell()
        {
            var grid       = new Grid(1, 1);
            var renderGrid = new RenderGrid(grid);

            // | n-w |  n  | n-e |
            // |  w  |  c  |  e  |
            // | s-w |  s  | s-e |

            Assert.Equal(3, renderGrid.RowCount);
            Assert.Equal(3, renderGrid.ColumnCount);

            var expectedRenderGrid = new[, ]
            {
                { "W,SE", "W,EW", "W,SW" },
                { "W,NS", "G,U", "W,NS" },
                { "W,NE", "W,EW", "W,NW" }
            };

            Assert.Equal(expectedRenderGrid, RenderToArray(renderGrid));
        }
Example #10
0
 public abstract void Render(RenderGrid grid, Stream stream);
Example #11
0
        private void HandlePointerReleased(object sender, PointerRoutedEventArgs e)
        {
            if (!_isPointerDown)
            {
                return;
            }

            RenderGrid.ReleasePointerCapture(e.Pointer);

            _isPointerDown = false;
            _isSwiping     = false;

            _sw0.Stop();

            // If it is not a valid swipe no need to go further
            if (_swipeDir == SwipeDirection.None)
            {
                return;
            }

            var currPoint = e.GetCurrentPoint(RenderGrid).Position;

            if (currPoint.X.IsCloseTo(_swipeStartPoint.X))
            {
                return;
            }

            var currSwipeDir = currPoint.X > _swipeStartPoint.X ? SwipeDirection.Right : SwipeDirection.Left;

            if (_swipeDir != currSwipeDir)
            {
                _revealPercent = _swipeDir == SwipeDirection.Left ? SwipeRightEnd : SwipeLeftEnd;
                _currOffsetX   = _swipeDir == SwipeDirection.Left ? MaxOffsetX : MinOffsetX;
            }
            else
            {
                // Since the user has completed interaction for the current swipe, check if it is a valid swipe.
                // If yes, then animate the shape to its final destination otherwise animate to return to its
                // initial location.
                var diffX        = Math.Abs(currPoint.X - _swipeStartPoint.X);
                var swipePercent = Math.Min((float)(diffX * 2 / _rootSize.Width), 1f);

                var isValidSwipe = (swipePercent > SwipeThreshold) ||
                                   ((_sw0.ElapsedMilliseconds < SwipeThresholdDuration.TotalMilliseconds) &&
                                    ((float)diffX > SwipeDistanceThreshold));

                slideDirection = SlideDirection.RightToLeft;

                var durationPercent = isValidSwipe ? (1 - swipePercent) : swipePercent;
                _a0 = TimeSpan.FromMilliseconds(Math.Max(1, DefaultGeometryAnimDuration * durationPercent));
                _a1 = TimeSpan.FromMilliseconds(Math.Max(1, DefaultOffsetAnimDuration * swipePercent));

                switch (_swipeDir)
                {
                case SwipeDirection.Left:
                    _swipeStartX  = swipePercent;
                    _startOffsetX = Lerp(MaxOffsetX, MinOffsetX, EaseOut(swipePercent));
                    if (isValidSwipe)
                    {
                        _swipeEndX = SwipeLeftEnd;
                        // Update to the next valid index
                        _nextLeftIndex  = _selectedIndex <= 2 ? -1 : _selectedIndex - 1;
                        _nextRightIndex = _selectedIndex;
                        _endOffsetX     = MinOffsetX;
                    }
                    else
                    {
                        _swipeEndX      = SwipeRightEnd;
                        _endOffsetX     = MaxOffsetX;
                        _nextLeftIndex  = _swipeLeftIndex;
                        _nextRightIndex = _swipeRightIndex;
                    }
                    break;

                case SwipeDirection.Right:
                    _swipeStartX  = 1 - swipePercent;
                    _startOffsetX = Lerp(MinOffsetX, MaxOffsetX, EaseOut(swipePercent));
                    if (isValidSwipe)
                    {
                        _swipeEndX = SwipeRightEnd;
                        // Update to the next valid index
                        _nextLeftIndex  = _selectedIndex;
                        _nextRightIndex = _selectedIndex >= MaxLayerCount ? -1 : _selectedIndex + 1;
                        _endOffsetX     = MaxOffsetX;
                    }
                    else
                    {
                        _swipeEndX      = SwipeLeftEnd;
                        _endOffsetX     = MinOffsetX;
                        _nextLeftIndex  = _swipeLeftIndex;
                        _nextRightIndex = _swipeRightIndex;
                    }
                    break;
                }

                _sw1.Start();
                _sw2.Start();
            }
        }