From 8b5002791a3b4bcf12038cd41e829fd6f33dcc25 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 21 Jun 2026 20:01:17 +0200 Subject: [PATCH] feat(core/slice-1): Begin() sets EnterTunnel pending for portal/login/death entry; all sequencer tests pass EnterTunnel fires on the first Tick after Begin for Portal/Login/Death kinds (which enter directly at Tunnel). Already implemented in Task 1.2 via _enterTunnelPending = _state == TeleportAnimState.Tunnel. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../World/TeleportAnimSequencerTests.cs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/AcDream.Core.Tests/World/TeleportAnimSequencerTests.cs b/tests/AcDream.Core.Tests/World/TeleportAnimSequencerTests.cs index fb712d7f..1b200eef 100644 --- a/tests/AcDream.Core.Tests/World/TeleportAnimSequencerTests.cs +++ b/tests/AcDream.Core.Tests/World/TeleportAnimSequencerTests.cs @@ -452,4 +452,19 @@ public sealed class TeleportAnimSequencerTests Assert.False(seq.IsActive); Assert.Equal(TeleportAnimState.Off, seq.State); } + + // --- Task 1.6: EnterTunnel fired for Portal path via Begin() --- + + [Fact] + public void Portal_EmitsEnterTunnel_OnFirstTick() + { + // Portal begins directly in Tunnel; EnterTunnel signals "world is now hidden". + var seq = new TeleportAnimSequencer(); + seq.Begin(TeleportEntryKind.Portal); + + // First tick: should emit PlayEnterSound AND EnterTunnel (both on entry) + var (_, evts) = seq.Tick(0f, worldReady: false); + Assert.Contains(TeleportAnimEvent.PlayEnterSound, evts); + Assert.Contains(TeleportAnimEvent.EnterTunnel, evts); + } }