import { ReelSymbol } from '../symbols/ReelSymbol.js'; /** * The physics of one reel. move symbols down, wrap them around. * * Every frame, `ReelMotion.update(delta)` adds `delta` to each symbol's * Y coordinate. A symbol whose position falls off the bottom wraps back * to the top (and vice versa. reels can run upward). Each wrap fires * the `_onSymbolWrapped` callback so the owning `Reel` can ask the * `FrameBuilder` for the next identity to paint on it. * * Maintains the invariant that `_symbols[0]` is always the visually * topmost symbol and `_symbols[N-1]` is always the bottommost. On each * wrap, the wrapping symbol is moved to the front (or back) of the array * so the ordering stays consistent with the grid. `snapToGrid` and the * visible window selection rely on this. */ export declare class ReelMotion { private _symbols; private _bufferAbove; private _onSymbolWrapped; private _symbolHeight; private _symbolGapY; private _slotHeight; private _minY; private _maxY; constructor(_symbols: ReelSymbol[], symbolHeight: number, symbolGapY: number, _bufferAbove: number, visibleRows: number, bufferBelow: number, _onSymbolWrapped: (symbol: ReelSymbol, arrayIndex: number, direction: 'up' | 'down') => void); /** * Move all symbols by deltaY pixels (positive = downward). * At most one wrap per call (deltaY is capped at half a symbol by the * spinning mode, so a single symbol can cross the boundary per tick). */ displace(deltaY: number): void; /** Snap all symbols to their correct grid positions (array index = visual row). */ snapToGrid(): void; /** Position all symbols above the visible area (for cascade mode start). */ setToTopPosition(): void; /** Get the correct Y position for a symbol at a given row. */ getRowY(row: number): number; get slotHeight(): number; /** * Reshape the motion layer for a new visible-row count and cell height. * Recomputes wrap bounds and the slot height. Called by `Reel.reshape()` * during AdjustPhase on MultiWays slots. The symbol array is re-bound by * `Reel.reshape()` directly via the same array reference, so this method * doesn't take a new array. */ reshape(symbolHeight: number, symbolGapY: number, bufferAbove: number, visibleRows: number, bufferBelow: number): void; private _wrapBottomToTop; private _wrapTopToBottom; } //# sourceMappingURL=ReelMotion.d.ts.map