From 950b0e3ddcdfabae3a311bbc4a0f08f08f12ce48 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Fri, 9 Oct 2026 21:17:35 +0200 Subject: [PATCH] VapourCloud: drop the zero-lifetime guard saturate already covers The mutation table let the guard's removal survive: with saturate's NaN rule (max(0, NaN) = 0) a zero-lifetime cloud has no opacity without it, and ACloudWithNoLifetimeObscuresNothing still pins that behaviour. Builds. Co-Authored-By: Claude Opus 5.5 --- Assets/Scripts/ServerShared/VapourClouds.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Assets/Scripts/ServerShared/VapourClouds.cs b/Assets/Scripts/ServerShared/VapourClouds.cs index d6d1aaa24..9f4a44603 100644 --- a/Assets/Scripts/ServerShared/VapourClouds.cs +++ b/Assets/Scripts/ServerShared/VapourClouds.cs @@ -16,8 +16,9 @@ public sealed class VapourCloud public float Opacity; public Entity Venter; + // A cloud with no lifetime divides by zero; saturate maps the NaN and the infinity to nothing left. public float OpacityAt(double now) => - Lifetime <= 0f ? 0f : saturate(Opacity) * saturate(1f - (float) (now - VentedAt) / Lifetime); + saturate(Opacity) * saturate(1f - (float) (now - VentedAt) / Lifetime); // Whether the segment a-b reaches the disc: the closest point of the segment to the centre lies within the // radius. A cloud past either end of the segment touches it only if it is near that end.