Esempio n. 1
0
        private void OnPaint(object sender, PaintEventArgs args)
        {
            var tintedBrush = new SolidBrush(Color.FromArgb(100, 0, 0, 0));

            if (State == null)
            {
                return;
            }

            args.Graphics.InterpolationMode  = InterpolationMode.NearestNeighbor;
            args.Graphics.CompositingMode    = CompositingMode.SourceOver;
            args.Graphics.SmoothingMode      = SmoothingMode.None;
            args.Graphics.PixelOffsetMode    = PixelOffsetMode.HighSpeed;
            args.Graphics.CompositingQuality = CompositingQuality.HighSpeed;
            var playerVisible = State.Player.VisiblePoints;
            var tiles         = State.CurrentFloor.Tiles;

            foreach (var point in playerVisible)
            {
                if (Viewport.ContainsTile(point))
                {
                    Rectangle dest   = Viewport.TranslatePoint(point);
                    var       source = spriteRects[tiles[point].SpriteId];
                    args.Graphics.DrawImage(Sprites, dest, source, GraphicsUnit.Pixel);
                }
            }

            foreach (var pair in State.CurrentFloor.Entities)
            {
                if (playerVisible.Contains(pair.Key) && Viewport.ContainsTile(pair.Key))
                {
                    Rectangle dest   = Viewport.TranslatePoint(pair.Key);
                    var       source = spriteRects[pair.Value.SpriteId];
                    args.Graphics.DrawImage(Sprites, dest, source, GraphicsUnit.Pixel);
                }
            }

            var previouslySeen = State.Player.PreviouslySeen;

            foreach (var point in previouslySeen)
            {
                if (Viewport.ContainsTile(point))
                {
                    Rectangle dest   = Viewport.TranslatePoint(point);
                    var       source = spriteRects[tiles[point].SpriteId];
                    args.Graphics.DrawImage(Sprites, dest, source, GraphicsUnit.Pixel);
                    args.Graphics.FillRectangle(tintedBrush, dest);
                }
            }
            tintedBrush.Dispose();
        }