From 3849252be9ee5a6b9ad6b31b0fe1a19767621baa Mon Sep 17 00:00:00 2001 From: "Somhairle H. Marisol" Date: Mon, 21 Sep 2026 13:18:35 +0800 Subject: feat(desktop): 标题画面两秒确定性入场动画 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit entranceProgress 纯函数按帧计数(固定 60Hz 步长,禁实时时钟):黛瓦天际线自上 36px 落定、标题自下 24px 升起、水面带 2s 淡入、灯笼/面板同步;快照回归断言进度锚点(0/60/120/超时)与确定性;LV_AUTOPLAY_FLOW 标题停留 60 帧可直接采样入场过程。 --- src/LivingVillage.Desktop.Tests/PrototypeTests.fs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/LivingVillage.Desktop.Tests') diff --git a/src/LivingVillage.Desktop.Tests/PrototypeTests.fs b/src/LivingVillage.Desktop.Tests/PrototypeTests.fs index 450e94b..5a40868 100644 --- a/src/LivingVillage.Desktop.Tests/PrototypeTests.fs +++ b/src/LivingVillage.Desktop.Tests/PrototypeTests.fs @@ -727,6 +727,15 @@ type PrototypeTests () = Assert.AreEqual(0.0f, (atHour 13).LanternGlow) Assert.AreEqual(1.0f, (atHour 0).LanternGlow) + [] + member _.TitleEntranceProgressIsDeterministicAndCompleteAfterTwoSeconds () = + // 120 frames at the fixed 60Hz step = 2s entrance, pure function of frame count. + Assert.AreEqual(1.0f, TitleScreen.entranceProgress 0L) + Assert.AreEqual(0.5f, TitleScreen.entranceProgress 60L) + Assert.AreEqual(0.0f, TitleScreen.entranceProgress 120L) + Assert.AreEqual(0.0f, TitleScreen.entranceProgress 1000L) + Assert.AreEqual(TitleScreen.entranceProgress 37L, TitleScreen.entranceProgress 37L) + [] member _.WorldPanelDoesNotRenderA永久KeyList () = let world = Sim.initialWorldN 42UL 0 -- cgit v1.2.3