summaryrefslogtreecommitdiff
path: root/src/LivingVillage.Desktop.Tests/DesktopTests.fs
diff options
context:
space:
mode:
authorSomhairle H. Marisol <[email protected]>2026-09-22 09:26:53 +0800
committerSomhairle H. Marisol <[email protected]>2026-09-22 09:26:53 +0800
commitebe7f80bcf54189cc51a15bf17b99293b6ff57a3 (patch)
tree89fc4406662c2ff6bc39fbef8e806731709eecf2 /src/LivingVillage.Desktop.Tests/DesktopTests.fs
parentdbce686019230c7a1105f5cc4b7b258698201128 (diff)
downloadliving-village-ebe7f80bcf54189cc51a15bf17b99293b6ff57a3.tar.gz
feat(desktop): P26 夜晚冷月光 veil(纯渲染层)+ 灯笼光晕径向无方斑回归
Diffstat (limited to 'src/LivingVillage.Desktop.Tests/DesktopTests.fs')
-rw-r--r--src/LivingVillage.Desktop.Tests/DesktopTests.fs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/LivingVillage.Desktop.Tests/DesktopTests.fs b/src/LivingVillage.Desktop.Tests/DesktopTests.fs
index b78f4e0..7e4a849 100644
--- a/src/LivingVillage.Desktop.Tests/DesktopTests.fs
+++ b/src/LivingVillage.Desktop.Tests/DesktopTests.fs
@@ -160,6 +160,30 @@ type DesktopTests () =
Assert.IsTrue(noon.Background.B > noon.Background.R)
[<TestMethod>]
+ member _.MoonlightVeilIsCoolAndOnlyAtNight () =
+ let noonTick = 12L * Sim.ticksPerDay / 24L
+ let midnightTick = 0L
+ let deepNightTick = 23L * Sim.ticksPerDay / 24L
+ Assert.IsTrue(M6Presentation.moonlightVeilAlpha noonTick = 0, "daytime must have no moonlight")
+
+ let moon = M6Presentation.moonlightVeilAlpha midnightTick
+ Assert.IsTrue(moon > 0, "deep night must get a cool moonlight wash")
+ Assert.AreEqual<int>(moon, M6Presentation.moonlightVeilAlpha deepNightTick)
+ Assert.IsTrue(moon <= 72, "moonlight veil stays a low alpha so the scene is not washed out")
+
+ let r, g, b = M6Presentation.moonlightRgb
+ Assert.IsTrue(b > g && g > r, "moonlight must be cool: blue-dominant channels")
+
+ // Dusk is owned by the warm golden veil, so moonlight is suppressed there.
+ let duskTick = M6Presentation.startTickForHour 20.75
+ Assert.IsTrue(M6Presentation.moonlightVeilAlpha duskTick < moon, "dusk is warmed, not moonlit")
+
+ // Premultiplied premultiply of this colour never saturates to white.
+ let veiled = VillageArt.premultiply r g b moon
+ Assert.IsTrue(int veiled.B <= int veiled.A)
+ Assert.IsTrue(int (max veiled.R (max veiled.G veiled.B)) < 250)
+
+ [<TestMethod>]
member _.DaylightAutoplayBootstrapStartsAtDawnAndPreservesDefaultStart () =
let dawnTick = 6L * Sim.ticksPerDay / 24L
let daylightWorld = WorldBootstrap.initialWorldForDaylight true 42UL Sim.npcCount