Example #1
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 #2
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 #3
0
 public RefCountedSprite this[int x, int y]
 {
     get
     {
         RenderCell cell = _grid[x, y];
         if (Equals(cell, default(RenderCell)))
         {
             return(null);
         }
         return(cell.GetContent());
     }
     set
     {
         RenderCell cell = _grid[x, y];
         if (Equals(cell, default(RenderCell)))
         {
             return;
         }
         cell.SetContent(value);
     }
 }
Example #4
0
        Rgba32?GetRenderingColor(RenderCell cell)
        {
            object tag = cell.GetTag(_tagKey);

            if (tag == null)
            {
                RenderCell neighborGround = cell.Neighbors
                                            .FirstOrDefault(n => n.RenderType == RenderType.Ground);
                return(neighborGround != null?GetRenderingColor(neighborGround) : null);
            }

            if (!(tag is int))
            {
                return(null);
            }
            var value = (int)tag;

            Rgba32 theColor;

            if (value <= _min)
            {
                theColor = _gradientStart;
            }
            else if (value >= _max)
            {
                theColor = _gradientEnd;
            }
            else
            {
                int diff = (value - _min);
                theColor = new Rgba32(
                    (byte)(_gradientStart.R + diff * _stepR),
                    (byte)(_gradientStart.G + diff * _stepG),
                    (byte)(_gradientStart.B + diff * _stepB));
            }

            return(theColor);
        }
Example #5
0
        protected override string GetTextureKey(RenderCell cell)
        {
            Direction cellDirection = cell.Direction;
            var       keyBuilder    = new StringBuilder();

            if ((cellDirection & Direction.North) == Direction.North)
            {
                keyBuilder.Append("North");
            }
            if ((cellDirection & Direction.South) == Direction.South)
            {
                keyBuilder.Append("South");
            }
            if ((cellDirection & Direction.East) == Direction.East)
            {
                keyBuilder.Append("East");
            }
            if ((cellDirection & Direction.West) == Direction.West)
            {
                keyBuilder.Append("West");
            }

            return(keyBuilder.Length == 0 ? "Unknown" : keyBuilder.ToString());
        }
Example #6
0
        public override void Render(IImageProcessingContext <Rgba32> context, Rectangle cellArea, RenderCell cell)
        {
            Rgba32?renderingColor = GetRenderingColor(cell);

            if (renderingColor == null)
            {
                return;
            }

            context.Fill(renderingColor.Value, cellArea);
        }
Example #7
0
 protected override bool IsSupported(RenderCell cell)
 {
     return(true);
 }
Example #8
0
 protected abstract string GetTextureKey(RenderCell cell);
Example #9
0
 protected abstract bool IsSupported(RenderCell cell);
Example #10
0
        public override void Render(IImageProcessingContext <Rgba32> context, Rectangle cellArea, RenderCell cell)
        {
            if (!IsSupported(cell))
            {
                return;
            }

            string         textureKey = GetTextureKey(cell);
            Image <Rgba32> texture    = _map[textureKey];

            if (texture == null)
            {
                return;
            }
            var location = new Point(
                (cellArea.Left + cellArea.Right) / 2,
                cellArea.Bottom);

            location.X -= texture.Width / 2;
            location.Y -= texture.Height;
            context.DrawImage(texture, PixelBlenderMode.Normal, 1.0f, location);
        }
        public override void Render(IImageProcessingContext <Rgba32> context, Rectangle cellArea, RenderCell cell)
        {
            if (!IsSupported(cell))
            {
                return;
            }
            bool shouldRenderer = _random.Next(100) <= Possibility;

            if (shouldRenderer)
            {
                Image <Rgba32> texture = _textures[_random.Next(_textures.Count)];
                int            maxX    = cellArea.Width - texture.Width;
                int            maxY    = cellArea.Height - texture.Height;

                // Will not renderer if texture is too large
                if (maxX < 0 || maxY < 0)
                {
                    return;
                }

                context.DrawImage(
                    texture,
                    1.0f,
                    new Point(cellArea.Left + _random.Next(maxX), cellArea.Top + _random.Next(maxY)));
            }
        }
 protected virtual bool IsSupported(RenderCell cell) => true;
Example #13
0
 public abstract void Render(
     IImageProcessingContext <Rgba32> context,
     Rectangle cellArea,
     RenderCell cell);
Example #14
0
        public override void Render(IImageProcessingContext <Rgba32> context, Rectangle cellArea, RenderCell cell)
        {
            if (!IsSupported(cell))
            {
                return;
            }
            Image <Rgba32> texture  = _textures[_random.Next(_textures.Count)];
            var            location = new Point(
                (cellArea.Left + cellArea.Right) / 2,
                cellArea.Bottom);

            location.X -= texture.Width / 2;
            location.Y -= texture.Height;
            context.DrawImage(texture, PixelBlenderMode.Normal, 1.0f, location);
        }
Example #15
0
 public override void Render(IImageProcessingContext <Rgba32> context, Rectangle cellArea, RenderCell cell)
 {
     context.Fill(_color, cellArea);
 }