feat(battlenode): mulligan+turn ops track on engine state (M-HC-1)
Task 2's WireMulliganPhase already installed the full mulligan delegate set (Swap/Ready, not just Deal) via MulliganEventSetting, and the mulligan + turn-draw mutations flow through VfxMgr.RegisterSequentialVfx — which HeadlessConductorVfxMgr runs for InstantVfx. So Swap/Ready/ TurnStart/TurnEnd resolve headless with ZERO new shim/seed/view fills. Adds the M-HC-1 milestone assertions: a mulligan-swap test (post-swap hand holds deck idx 1,2,4 — idx-3 swapped for the next unused idx) and a two-turn test (Deal->Swap->Ready->TurnStart/TurnEnd x2) asserting the engine's deterministic node-native progression on both seats (hand/deck/PP/turn/leader-life) at each boundary. Frame shapes mirror the captured battle_test_cl1 receive stream (self/oppo pos-idx lists, spin). Harness/node: +DeckCount/Turn board-state pass-throughs (test reads). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -124,6 +124,8 @@ internal sealed class NodeNativeBattleHarness : IDisposable
|
||||
public int Pp(bool playerSeat) => Engine.Pp(playerSeat);
|
||||
public int HandCount(bool playerSeat) => Engine.HandCount(playerSeat);
|
||||
public int BoardCount(bool playerSeat) => Engine.BoardCount(playerSeat);
|
||||
public int DeckCount(bool playerSeat) => Engine.DeckCount(playerSeat);
|
||||
public int Turn(bool playerSeat) => Engine.Turn(playerSeat);
|
||||
|
||||
/// <summary>The engine Index of seat A's hand card at <paramref name="handPos"/> (the playIdx a
|
||||
/// Play frame would carry to play it).</summary>
|
||||
|
||||
Reference in New Issue
Block a user