diff --git a/Content.MapRenderer/Painters/DecalPainter.cs b/Content.MapRenderer/Painters/DecalPainter.cs index f863595f9ac..6dfb26e1ef2 100644 --- a/Content.MapRenderer/Painters/DecalPainter.cs +++ b/Content.MapRenderer/Painters/DecalPainter.cs @@ -86,7 +86,8 @@ private void Run(Image canvas, DecalData data) image.Mutate(o => o.Rotate((float) -decal.Angle.Degrees)); var coloredImage = new Image(image.Width, image.Height); - Color color = decal.Color?.ConvertImgSharp() ?? Color.White; + Color color = decal.Color?.WithAlpha(byte.MaxValue).ConvertImgSharp() ?? Color.White; // remove the encoded color alpha here + var alpha = decal.Color?.A ?? 1; // get the alpha separately so we can use it in DrawImage coloredImage.Mutate(o => o.BackgroundColor(color)); image.Mutate(o => o @@ -95,6 +96,6 @@ private void Run(Image canvas, DecalData data) // Very unsure why the - 1 is needed in the first place but all decals are off by exactly one pixel otherwise // Woohoo! - canvas.Mutate(o => o.DrawImage(image, new Point((int) data.X, (int) data.Y - 1), 1.0f)); + canvas.Mutate(o => o.DrawImage(image, new Point((int) data.X, (int) data.Y - 1), alpha)); } } diff --git a/Content.MapRenderer/Painters/EntityPainter.cs b/Content.MapRenderer/Painters/EntityPainter.cs index 808acf8fe4c..2c70481b8a4 100644 --- a/Content.MapRenderer/Painters/EntityPainter.cs +++ b/Content.MapRenderer/Painters/EntityPainter.cs @@ -123,19 +123,28 @@ public void Run(Image canvas, EntityData entity, SharedTransformSystem xformSyst image.Mutate(o => o.Crop(rect)); + var spriteRotation = 0f; + if (!entity.Sprite.NoRotation && !entity.Sprite.SnapCardinals && entity.Sprite.GetLayerDirectionCount(layer) == 1) + { + spriteRotation = (float) worldRotation.Degrees; + } + var colorMix = entity.Sprite.Color * layer.Color; var imageColor = Color.FromRgba(colorMix.RByte, colorMix.GByte, colorMix.BByte, colorMix.AByte); var coloredImage = new Image(image.Width, image.Height); coloredImage.Mutate(o => o.BackgroundColor(imageColor)); var (imgX, imgY) = rsi?.Size ?? (EyeManager.PixelsPerMeter, EyeManager.PixelsPerMeter); + var offsetX = (int) (entity.Sprite.Offset.X * EyeManager.PixelsPerMeter); + var offsetY = (int) (entity.Sprite.Offset.Y * EyeManager.PixelsPerMeter); image.Mutate(o => o .DrawImage(coloredImage, PixelColorBlendingMode.Multiply, PixelAlphaCompositionMode.SrcAtop, 1) .Resize(imgX, imgY) - .Flip(FlipMode.Vertical)); + .Flip(FlipMode.Vertical) + .Rotate(spriteRotation)); - var pointX = (int) entity.X - imgX / 2 + EyeManager.PixelsPerMeter / 2; - var pointY = (int) entity.Y - imgY / 2 + EyeManager.PixelsPerMeter / 2; + var pointX = (int) entity.X + offsetX - imgX / 2; + var pointY = (int) entity.Y + offsetY - imgY / 2; canvas.Mutate(o => o.DrawImage(image, new Point(pointX, pointY), 1)); } } diff --git a/Content.MapRenderer/Painters/GridPainter.cs b/Content.MapRenderer/Painters/GridPainter.cs index 416ec051995..d8d6e15378c 100644 --- a/Content.MapRenderer/Painters/GridPainter.cs +++ b/Content.MapRenderer/Painters/GridPainter.cs @@ -138,8 +138,8 @@ private static (float x, float y) TransformLocalPosition(Vector2 position, MapGr var yOffset = (int) -grid.LocalAABB.Bottom; var tileSize = grid.TileSize; - var x = ((float) Math.Floor(position.X) + xOffset) * tileSize * TilePainter.TileImageSize; - var y = ((float) Math.Floor(position.Y) + yOffset) * tileSize * TilePainter.TileImageSize; + var x = (position.X + xOffset) * tileSize * TilePainter.TileImageSize; + var y = (position.Y + yOffset) * tileSize * TilePainter.TileImageSize; return (x, y); }