diff --git a/LWGlass/languages/English/English_settings.jecs b/LWGlass/languages/English/English_settings.jecs new file mode 100644 index 0000000..0c40680 --- /dev/null +++ b/LWGlass/languages/English/English_settings.jecs @@ -0,0 +1,6 @@ +MHG.SettingsMenu.Pages.Graphics.Headings.LW_Glass: "Mod: Glass" +LWGlass.Glass.GlassTransparency: "Transparency" + +LWGlass.Glass.GlassTransparency.Description: """ + Transparency of the Glass Material. + """ diff --git a/LWGlass/settings/LWGlass_settingsdata.jecs b/LWGlass/settings/LWGlass_settingsdata.jecs new file mode 100644 index 0000000..4b050ee --- /dev/null +++ b/LWGlass/settings/LWGlass_settingsdata.jecs @@ -0,0 +1,8 @@ +LWGlass.Glass.GlassTransparency: + Page: Graphics + Heading: LW_Glass + Min: 15 + Max: 85 + SliderInterval: 1 + DecimalPlacesToDisplay: 0 + PerformanceImpact: Low diff --git a/LWGlass/src/client/Main.cs b/LWGlass/src/client/Main.cs index c074ed8..3dfa425 100644 --- a/LWGlass/src/client/Main.cs +++ b/LWGlass/src/client/Main.cs @@ -1,5 +1,6 @@ using JimmysUnityUtilities; using LogicAPI.Data; +using LogicSettings; using LogicWorld.Building.Overhaul; using LogicWorld.ClientCode; using LogicWorld.ClientCode.Resizing; @@ -20,6 +21,36 @@ namespace LWGlass.Client IResizableX, IResizableZ { + [Setting_SliderFloat("LWGlass.Glass.GlassTransparency")] + public static float GlassTransparency + { + get => _glassTransparency; + set + { + _glassTransparency = (float) value; + updateGlassTransparency(); + } + } + private static float _glassTransparency = 50; + + protected static void updateGlassTransparency() + { + var world = Instances.MainWorld; + if (world == null) + { + return; + } + var glass = world.ComponentTypes.GetComponentType("LWGlass.Glass"); + foreach(var kvp in world.Data.AllComponents) + { + var (address, data) = kvp; + if (data.Data.Type == glass) + { + world.Renderer.Entities.GetClientCode(address).QueueDataUpdate(); + } + } + } + private int previousSizeX; private int previousSizeZ; @@ -47,19 +78,24 @@ namespace LWGlass.Client } public int MinZ => 1; public int MaxZ => 80; - public float GridIntervalZ => 1f; + public float GridIntervalZ => 1f; + + protected Material setSharedMaterial() + { + return LogicWorld.References.MaterialsCache.StandardUnlitColorTransparent(Color, (float) GlassTransparency/100); + } protected override void OnComponentImaged() { Data.Color = new Color24(255, 255, 255); GameObject obj = Decorations[0].DecorationObject; - obj.GetComponent().sharedMaterial = LogicWorld.References.MaterialsCache.StandardUnlitColorTransparent(Color, 0.7f); + obj.GetComponent().sharedMaterial = setSharedMaterial(); } protected override void DataUpdate() { GameObject obj = Decorations[0].DecorationObject; - obj.GetComponent().sharedMaterial = LogicWorld.References.MaterialsCache.StandardUnlitColorTransparent(Color, 0.2f); + obj.GetComponent().sharedMaterial = setSharedMaterial(); if (SizeX == previousSizeX && SizeZ == previousSizeZ) return; previousSizeX = SizeX; @@ -125,7 +161,7 @@ namespace LWGlass.Client var meshFilter = myGameObject.AddComponent(); meshFilter.sharedMesh = LogicWorld.References.Meshes.OriginCube; var meshRenderer = myGameObject.AddComponent(); - meshRenderer.sharedMaterial = LogicWorld.References.MaterialsCache.StandardUnlitColorTransparent(Color, 0.2f); + meshRenderer.sharedMaterial = setSharedMaterial(); return new IDecoration[] { new Decoration() @@ -144,4 +180,4 @@ namespace LWGlass.Client Data.Color = new Color24(120, 120, 120); } } -} \ No newline at end of file +}