diff --git a/Robust.Client/Graphics/ClientEye/EyeManager.cs b/Robust.Client/Graphics/ClientEye/EyeManager.cs index 8c5ff48a6..58a70e803 100644 --- a/Robust.Client/Graphics/ClientEye/EyeManager.cs +++ b/Robust.Client/Graphics/ClientEye/EyeManager.cs @@ -1,3 +1,5 @@ +using System; +using System.Globalization; using System.Numerics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.CustomControls; @@ -15,12 +17,36 @@ namespace Robust.Client.Graphics /// public sealed partial class EyeManager : IEyeManager { - // If you modify this make sure to edit the value in the Robust.Shared.Audio.AudioParams struct default too! - // No I can't be bothered to make this a shared constant. /// - /// Default scaling for the projection matrix. + /// Default scaling for the projection matrix: how many texture pixels map to one world meter (tile). /// - public const int PixelsPerMeter = 32; + /// + /// Defaults to 32. It can be overridden once, at process startup, via the + /// ROBUST_PIXELS_PER_METER environment variable. This is fixed for the lifetime of the + /// process and is NOT safe to change at runtime. + /// + public static readonly int PixelsPerMeter = ReadPixelsPerMeter(); + + /// + /// Environment variable used to override at startup. + /// + public const string PixelsPerMeterEnvVar = "ROBUST_PIXELS_PER_METER"; + + private const int DefaultPixelsPerMeter = 32; + + private static int ReadPixelsPerMeter() + { + var raw = Environment.GetEnvironmentVariable(PixelsPerMeterEnvVar); + + if (!string.IsNullOrWhiteSpace(raw) + && int.TryParse(raw, NumberStyles.Integer, CultureInfo.InvariantCulture, out var value) + && value > 0) + { + return value; + } + + return DefaultPixelsPerMeter; + } [Dependency] private IClyde _displayManager = default!; [Dependency] private IEntityManager _entityManager = default!; diff --git a/Robust.Client/Graphics/Drawing/DrawingHandleWorld.cs b/Robust.Client/Graphics/Drawing/DrawingHandleWorld.cs index 9fba50a05..d3eb1a08d 100644 --- a/Robust.Client/Graphics/Drawing/DrawingHandleWorld.cs +++ b/Robust.Client/Graphics/Drawing/DrawingHandleWorld.cs @@ -10,7 +10,7 @@ protected DrawingHandleWorld(Texture white) : base(white) { } - private const int Ppm = EyeManager.PixelsPerMeter; + private static readonly int Ppm = EyeManager.PixelsPerMeter; /// /// Draws an untextured colored rectangle to the world.The coordinate system is right handed. diff --git a/Robust.Client/Map/ClydeTileDefinitionManager.cs b/Robust.Client/Map/ClydeTileDefinitionManager.cs index 2199b867d..bd22a8ed8 100644 --- a/Robust.Client/Map/ClydeTileDefinitionManager.cs +++ b/Robust.Client/Map/ClydeTileDefinitionManager.cs @@ -103,7 +103,7 @@ internal void _genTextureAtlas() if (defList.Count <= 0) return; - const int tileSize = EyeManager.PixelsPerMeter; + var tileSize = EyeManager.PixelsPerMeter; var tileCount = defList.Select(x => x.Variants + x.EdgeSprites.Count).Sum() + 1;