Exemplo n.º 1
0
        private void DrawChunk(Chunk chunk)
        {
            if (chunk == null)
            {
                return;
            }

            Tile firstTile = chunk.GetTile(0, 0);
            bool isRandom  = false;

            for (int i = 0; i < Chunk.Size * Chunk.Size; i++)
            {
                Tile tile = chunk.GetTile(i);
                if (firstTile.ID != tile.ID)
                {
                    isRandom = true;
                    break;
                }
            }

            if (!isRandom)
            {
                if (TryGetTileRegion(firstTile, out var region))
                {
                    int x = chunk.Position.TileX;
                    int y = chunk.Position.TileY;
                    _spriteBatch.Draw(region, new RectangleF(x * 8, y * 8, 8 * Chunk.Size, 8 * Chunk.Size), Color.White);
                }
                return;
            }

            // draw chunk
            for (int y = 0; y < Chunk.Size; y++)
            {
                for (int x = 0; x < Chunk.Size; x++)
                {
                    if (!chunk.TryGetTile(x, y, out Tile tile))
                    {
                        continue;
                    }

                    if (!TryGetTileRegion(tile, out TextureRegion2D region))
                    {
                        continue;
                    }

                    int xx  = x + chunk.Position.TileX;
                    int yy  = y + chunk.Position.TileY;
                    var dst = new RectangleF(xx * 8, yy * 8, 8, 8);

                    float         flipNoise = _noise.CalcPixel2D(xx, yy, 1f);
                    SpriteEffects flip      = SpriteEffects.None;
                    if (flipNoise > 85)
                    {
                        flip = flipNoise > 170 ? SpriteEffects.FlipVertically : SpriteEffects.FlipHorizontally;
                    }

                    _spriteBatch.Draw(
                        region.Texture, dst, region.Bounds, Color.White, 0, Vector2.Zero, flip, 0);
                }
            }
        }