]> git.smokeofanarchy.ru Git - space-station-14.git/commitdiff
map renderer fixes (#29523)
authorNemanja <98561806+EmoGarbage404@users.noreply.github.com>
Fri, 28 Jun 2024 00:09:05 +0000 (20:09 -0400)
committerGitHub <noreply@github.com>
Fri, 28 Jun 2024 00:09:05 +0000 (10:09 +1000)
* map renderer fixes

* remove useless casts

Content.MapRenderer/Painters/DecalPainter.cs
Content.MapRenderer/Painters/EntityPainter.cs
Content.MapRenderer/Painters/GridPainter.cs

index f863595f9ac39f34cead7983b02928c17c1aa756..6dfb26e1ef2f92fb0ea2cfde51abf7901ab7a9ef 100644 (file)
@@ -86,7 +86,8 @@ public sealed class DecalPainter
 
         image.Mutate(o => o.Rotate((float) -decal.Angle.Degrees));
         var coloredImage = new Image<Rgba32>(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 @@ public sealed class DecalPainter
 
         // 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));
     }
 }
index 808acf8fe4c64b5ce5e795b420fe895ce85ea333..2c70481b8a4f62c146ca5a4b9f2dd6ff5c13fb2f 100644 (file)
@@ -123,19 +123,28 @@ public sealed class EntityPainter
 
             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<Rgba32>(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));
         }
     }
index 416ec05199539137c951228531ae4f58fb2209b7..d8d6e15378c29fe64c84c6c136a2736b1e63cd0b 100644 (file)
@@ -138,8 +138,8 @@ namespace Content.MapRenderer.Painters
             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);
         }