import { ReelPhase } from './ReelPhase.js'; import { Reel } from '../../core/Reel.js'; import { SpeedProfile } from '../../config/types.js'; import { SpinningMode } from '../modes/SpinningMode.js'; import { EventEmitter } from '../../events/EventEmitter.js'; import { ReelSetEvents } from '../../events/ReelEvents.js'; import { TumbleFallConfig } from '../../cascade/TumbleConfig.js'; export interface CascadeFallPhaseConfig { /** Required by the start-phase contract. set on the reel even though * tumble mode never accelerates. */ spinningMode: SpinningMode; /** Per-reel delay before this column begins its fall, in ms. */ delay?: number; /** Reel-set event bus, injected by SpinController so the phase can emit * `cascade:fall:*` events. */ events: EventEmitter; } /** * Fall-out half of the tumble cascade. Replaces `StartPhase` when the * builder was configured with `.tumble(...)`. * * Runs at the moment the player presses spin: every currently-visible * symbol falls off the bottom of the viewport. The reel then sits at speed * zero while `SpinPhase` waits for the server result. * * Animation parameters (duration, ease, row stagger) are baked into the * phase at builder time via the factory closure; the run-time config * carries only per-spin context (delay, event bus). */ export declare class CascadeFallPhase extends ReelPhase { readonly name = "cascade:fall"; readonly skippable = true; private readonly _baseFall; /** Resolved at `onEnter` time by merging the active speed profile's * `tumble.fall` override (if any) over `_baseFall`. Lives only for the * duration of a single run so a `setSpeed` between phases is honoured * on the next entry. */ private _fall; private _timeline; private _delayedCall; /** Views actively being faded out. Tracked so `onSkip` can hide them * rather than leaving them at mid-fall position. */ private _fallingViews; /** Captured on enter so `onSkip` can emit the paired `cascade:fall:end` * without needing the config closure (which lives only inside `_beginFall`). */ private _events; /** Whether `cascade:fall:start` was emitted yet. `onSkip` emits the * matching `:end` ONLY when `:start` already fired. a skip during the * pre-fall delay window must not produce an unpaired `:end`. */ private _startEmitted; /** Per-run abort controller exposed to listeners on `cascade:fall:symbol` * as `signal`. Aborts on `onSkip` so listener-scheduled tweens (squish, * badge fade, etc.) can clean themselves up alongside the library's * own timeline. Stays un-aborted on natural completion. only explicit * skips trigger it. */ private _skipAbort; constructor(reel: Reel, speed: SpeedProfile, fall: Required); protected onEnter(config: CascadeFallPhaseConfig): void; private _beginFall; update(_deltaMs: number): void; protected onSkip(): void; private _kill; } //# sourceMappingURL=CascadeFallPhase.d.ts.map