diff --git a/Assets/Scripts/Game/GameState.cs b/Assets/Scripts/Game/GameState.cs index 8eba75d..1795981 100644 --- a/Assets/Scripts/Game/GameState.cs +++ b/Assets/Scripts/Game/GameState.cs @@ -50,9 +50,7 @@ public class GameState // TODO FIXME This is wrong for brush model entities uq.CurrentStyle.SetupWorldRenderer(mr); - mr.material = surfaceMesh.Flags.HasFlag(QSurfaceFlags.DrawTurbulence) - ? uq.CurrentStyle.CreateLiquidMaterial(surfaceMesh.Flags) - : uq.CurrentStyle.CreateWorldMaterial(); // TODO FIXME this currently leaks Materials + mr.material = uq.CurrentStyle.CreateWorldMaterial(surfaceMesh.Flags); // TODO FIXME this currently leaks Materials uint texNum = surfaceMesh.TextureNum; if (uq.GameAssets.TryGetTexture(texNum, out var texture)) diff --git a/Assets/Scripts/VisualStyle.cs b/Assets/Scripts/VisualStyle.cs index 048f7c9..95692d3 100644 --- a/Assets/Scripts/VisualStyle.cs +++ b/Assets/Scripts/VisualStyle.cs @@ -27,29 +27,26 @@ public class VisualStyle : ScriptableObject return new Material(entityMaterial); } - public virtual Material CreateWorldMaterial() + public virtual Material CreateWorldMaterial(QSurfaceFlags surfaceFlags) { - return new Material(worldMaterial); - } - - public virtual Material CreateLiquidMaterial(QSurfaceFlags surfaceFlags) - { - if (liquidMaterial == null) - return CreateWorldMaterial(); - - float alpha = 1f; - if (surfaceFlags.HasFlag(QSurfaceFlags.DrawWater)) - alpha = liquidProperties.waterAlpha; - else if (surfaceFlags.HasFlag(QSurfaceFlags.DrawSlime)) - alpha = liquidProperties.slimeAlpha; - else if (surfaceFlags.HasFlag(QSurfaceFlags.DrawLava)) - alpha = liquidProperties.lavaAlpha; - else if (surfaceFlags.HasFlag(QSurfaceFlags.DrawTeleporter)) - alpha = liquidProperties.teleporterAlpha; + if (surfaceFlags.HasFlag(QSurfaceFlags.DrawTurbulence) && liquidMaterial != null) + { + float alpha = 1f; + if (surfaceFlags.HasFlag(QSurfaceFlags.DrawWater)) + alpha = liquidProperties.waterAlpha; + else if (surfaceFlags.HasFlag(QSurfaceFlags.DrawSlime)) + alpha = liquidProperties.slimeAlpha; + else if (surfaceFlags.HasFlag(QSurfaceFlags.DrawLava)) + alpha = liquidProperties.lavaAlpha; + else if (surfaceFlags.HasFlag(QSurfaceFlags.DrawTeleporter)) + alpha = liquidProperties.teleporterAlpha; + + var material = new Material(liquidMaterial); + material.SetColor("_BaseColor", new Color(1, 1, 1, alpha)); + return material; + } - var material = new Material(liquidMaterial); - material.SetColor("_BaseColor", new Color(1, 1, 1, alpha)); - return material; + return new Material(worldMaterial); } public virtual void SetupEntityRenderer(MeshRenderer meshRenderer)