import { ReelPhase } from './ReelPhase.js'; import { EventEmitter } from '../../events/EventEmitter.js'; import { ReelSetEvents } from '../../events/ReelEvents.js'; export interface CascadePlacePhaseConfig { /** Full target frame for this reel: buffer-above + visible + buffer-below. */ targetFrame: string[]; /** Visible rows whose old symbols were "winners" cleared since the last * placement. Empty AND `initial: false` ⇒ no movement on this reel. */ winnerRows: number[]; /** `true` for Moment A (initial spin); `false` for Moment B (refill). */ initial: boolean; /** Per-reel delay before placement, in ms. */ delay?: number; /** Reel-set event bus, injected by SpinController. */ events: EventEmitter; } /** * Identity-swap half of the tumble cascade. Runs after `CascadeFallPhase` * (Moment A) or right at the start of `refill()` (Moment B). * * Mechanically tiny: it calls `reel.placeSymbols(visible)` to swap visible * symbol identities, then fires `cascade:place:end`. Listeners on that * event (badges, decorations, multiplier overlays) run synchronously * BEFORE `CascadeDropInPhase` starts the drop tweens. so anything you * attach to a new symbol falls WITH it, not after landing. */ export declare class CascadePlacePhase extends ReelPhase { readonly name = "cascade:place"; readonly skippable = true; private _config; private _delayedCall; protected onEnter(config: CascadePlacePhaseConfig): void; /** * Map the positional `targetFrame` (buffer-above … visible … buffer-below) * into the index shape `Reel.placeSymbols` expects: visible rows at positive * indices `[0..visibleRows)`, buffer-above rows as NEGATIVE-index properties * (`[-1]` closest above … `[-bufferAbove]` furthest). placeSymbols reads * buffer-above strip cells from those negative slots; a plain `slice` of just * the visible window has none, so placeSymbols re-randomizes the buffer. that * destroys a big-symbol anchor living in bufferAbove (a partial-visibility * "tail-visible" block) and leaves its visible OCCUPIED stub uncovered, so * the block's visible cell renders empty. Buffer-below cells are left to * placeSymbols' random fill — they're masked and never carry a visible anchor. */ private _placement; private _doPlace; update(_deltaMs: number): void; protected onSkip(): void; } //# sourceMappingURL=CascadePlacePhase.d.ts.map