@@ -5,6 +5,7 @@ import { describe, expect, it } from "vitest"
55import { makeTextRenderer } from "../../../test/machine/visualization/text.ts"
66import {
77 airJumpMode ,
8+ CharacterEvents ,
89 CharacterMachine ,
910 type CharacterSnapshot ,
1011 Event ,
@@ -100,37 +101,50 @@ const laws = [
100101 resumeRestoresDeepHistory
101102]
102103
104+ // Exploration scenarios retain decoded events for trace inspection.
105+ const EventValue = {
106+ Resume : ( ) => Machine . event ( CharacterMachine , Event . cases . Resume ) ,
107+ Pause : ( fields : { readonly at : number } ) => Machine . event ( CharacterMachine , Event . cases . Pause , fields ) ,
108+ Reset : ( ) => Machine . event ( CharacterMachine , Event . cases . Reset ) ,
109+ JumpPressed : ( fields : { readonly at : number ; readonly y : number ; readonly wall : - 1 | 0 | 1 } ) =>
110+ Machine . event ( CharacterMachine , Event . cases . JumpPressed , fields ) ,
111+ Landed : ( fields : { readonly impact : number ; readonly axis : - 1 | 0 | 1 ; readonly at : number } ) =>
112+ Machine . event ( CharacterMachine , Event . cases . Landed , fields ) ,
113+ ApexReached : ( fields : { readonly y : number } ) => Machine . event ( CharacterMachine , Event . cases . ApexReached , fields ) ,
114+ DownPressed : ( fields : { readonly at : number } ) => Machine . event ( CharacterMachine , Event . cases . DownPressed , fields )
115+ }
116+
103117const explorationEvents = ( { snapshot } : MachineTest . ExplorationStateContext < typeof CharacterMachine > ) => {
104118 const locomotion = snapshot . states . locomotion . state
105119 if ( locomotion . path === "Character.locomotion.Paused" ) {
106- return [ Event . cases . Resume . make ( { } ) ]
120+ return [ EventValue . Resume ( ) ]
107121 }
108122
109- const pauseAndReset = [ Event . cases . Pause . make ( { at : 70 } ) , Event . cases . Reset . make ( { } ) ]
123+ const pauseAndReset = [ EventValue . Pause ( { at : 70 } ) , EventValue . Reset ( ) ]
110124 if ( locomotion . state . path === "Character.locomotion.Playing.Grounded" ) {
111125 return [
112- Event . cases . JumpPressed . make ( { at : 20 , y : 100 , wall : - 1 } ) ,
113- Event . cases . JumpPressed . make ( { at : 20 , y : 100 , wall : 0 } ) ,
114- Event . cases . JumpPressed . make ( { at : 20 , y : 100 , wall : 1 } ) ,
126+ EventValue . JumpPressed ( { at : 20 , y : 100 , wall : - 1 } ) ,
127+ EventValue . JumpPressed ( { at : 20 , y : 100 , wall : 0 } ) ,
128+ EventValue . JumpPressed ( { at : 20 , y : 100 , wall : 1 } ) ,
115129 ...pauseAndReset
116130 ]
117131 }
118132
119133 const motion = locomotion . state . states . motion . state
120134 const airborne = [
121- Event . cases . JumpPressed . make ( { at : 30 , y : 80 , wall : - 1 } ) ,
122- Event . cases . JumpPressed . make ( { at : 30 , y : 80 , wall : 1 } ) ,
123- Event . cases . Landed . make ( { impact : 12 , axis : 0 , at : 60 } ) ,
135+ EventValue . JumpPressed ( { at : 30 , y : 80 , wall : - 1 } ) ,
136+ EventValue . JumpPressed ( { at : 30 , y : 80 , wall : 1 } ) ,
137+ EventValue . Landed ( { impact : 12 , axis : 0 , at : 60 } ) ,
124138 ...pauseAndReset
125139 ]
126140 return motion . path === "Character.locomotion.Playing.Airborne.motion.Jumping"
127141 ? [
128- Event . cases . ApexReached . make ( { y : 50 } ) ,
129- Event . cases . DownPressed . make ( { at : 40 } ) ,
142+ EventValue . ApexReached ( { y : 50 } ) ,
143+ EventValue . DownPressed ( { at : 40 } ) ,
130144 ...airborne
131145 ]
132146 : motion . path === "Character.locomotion.Playing.Airborne.motion.Falling"
133- ? [ Event . cases . DownPressed . make ( { at : 40 } ) , ...airborne ]
147+ ? [ EventValue . DownPressed ( { at : 40 } ) , ...airborne ]
134148 : airborne
135149}
136150
@@ -166,20 +180,20 @@ describe("platformer history integration", () => {
166180 const ducking = yield * Machine . plan (
167181 CharacterMachine ,
168182 initial . state ,
169- Event . cases . DownPressed . make ( { at : 10 } )
183+ CharacterEvents . DownPressed ( { at : 10 } )
170184 )
171185 const beforePause = playingSnapshot ( ducking . next )
172186
173187 const paused = yield * Machine . plan (
174188 CharacterMachine ,
175189 ducking . next ,
176- Event . cases . Pause . make ( { at : 20 } )
190+ CharacterEvents . Pause ( { at : 20 } )
177191 )
178192 const pausedLocomotion = paused . next . states . locomotion . state
179193 expect ( pausedLocomotion . path ) . toBe ( "Character.locomotion.Paused" )
180194 expect ( pausedLocomotion . value ) . toEqual ( { _tag : "Paused" , pausedAt : 20 } )
181195
182- const resumed = yield * Machine . plan ( CharacterMachine , paused . next , Event . cases . Resume . make ( { } ) )
196+ const resumed = yield * Machine . plan ( CharacterMachine , paused . next , CharacterEvents . Resume ( ) )
183197 expect ( playingSnapshot ( resumed . next ) ) . toEqual ( beforePause )
184198 expect ( resumed . next . states . facing . state . path ) . toBe ( "Character.facing.Right" )
185199 expect ( resumed . next . states . contact . state . path ) . toBe ( "Character.contact.NoWall" )
@@ -192,19 +206,19 @@ describe("platformer history integration", () => {
192206 const airborne = yield * Machine . plan (
193207 CharacterMachine ,
194208 initial . state ,
195- Event . cases . JumpPressed . make ( { at : 100 , y : 207 , wall : - 1 } )
209+ CharacterEvents . JumpPressed ( { at : 100 , y : 207 , wall : - 1 } )
196210 )
197211 const falling = yield * Machine . plan (
198212 CharacterMachine ,
199213 airborne . next ,
200- Event . cases . ApexReached . make ( { y : 91 } )
214+ CharacterEvents . ApexReached ( { y : 91 } )
201215 )
202216 const beforePause = playingSnapshot ( falling . next )
203217
204218 const paused = yield * Machine . plan (
205219 CharacterMachine ,
206220 falling . next ,
207- Event . cases . Pause . make ( { at : 180 } )
221+ CharacterEvents . Pause ( { at : 180 } )
208222 )
209223 expect ( paused . next . history ?. [ "Character.locomotion.Playing.resume" ] ?. active ) . toEqual ( [
210224 "Character" ,
@@ -217,7 +231,7 @@ describe("platformer history integration", () => {
217231 "Character.locomotion.Playing.Airborne.airJump.AirJumpGroundLock"
218232 ] )
219233
220- const resumed = yield * Machine . plan ( CharacterMachine , paused . next , Event . cases . Resume . make ( { } ) )
234+ const resumed = yield * Machine . plan ( CharacterMachine , paused . next , CharacterEvents . Resume ( ) )
221235 const restored = playingSnapshot ( resumed . next )
222236 expect ( restored ) . toEqual ( beforePause )
223237
0 commit comments