pixi-reels 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +37 -0
- package/dist/config/types.d.ts +77 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/core/Reel.d.ts +152 -4
- package/dist/core/Reel.d.ts.map +1 -1
- package/dist/core/ReelMotion.d.ts +8 -0
- package/dist/core/ReelMotion.d.ts.map +1 -1
- package/dist/core/ReelSet.d.ts +156 -1
- package/dist/core/ReelSet.d.ts.map +1 -1
- package/dist/core/ReelSetBuilder.d.ts +105 -2
- package/dist/core/ReelSetBuilder.d.ts.map +1 -1
- package/dist/core/ReelViewport.d.ts +89 -3
- package/dist/core/ReelViewport.d.ts.map +1 -1
- package/dist/debug/debug.d.ts +6 -1
- package/dist/debug/debug.d.ts.map +1 -1
- package/dist/events/ReelEvents.d.ts +43 -0
- package/dist/events/ReelEvents.d.ts.map +1 -1
- package/dist/index.cjs +4 -4
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +730 -192
- package/dist/index.js.map +1 -1
- package/dist/pins/CellPin.d.ts +59 -1
- package/dist/pins/CellPin.d.ts.map +1 -1
- package/dist/spin/SpinController.d.ts +87 -1
- package/dist/spin/SpinController.d.ts.map +1 -1
- package/dist/spin/phases/AdjustPhase.d.ts +73 -0
- package/dist/spin/phases/AdjustPhase.d.ts.map +1 -0
- package/dist/spotlight/SymbolSpotlight.d.ts.map +1 -1
- package/dist/testing/testHarness.d.ts +19 -1
- package/dist/testing/testHarness.d.ts.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# pixi-reels
|
|
2
2
|
|
|
3
|
+
## 0.3.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [`93aa66c`](https://github.com/schmooky/pixi-reels/commit/93aa66c103ef0f624345c76a92a22621fc3c676a) Thanks [@igaming-bulochka](https://github.com/igaming-bulochka)! - Update: package `homepage` now points at the canonical docs site, `https://pixi-reels.schmooky.dev`. No code or runtime change — npm metadata and the docs site URL only.
|
|
8
|
+
|
|
9
|
+
## 0.3.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- [#61](https://github.com/schmooky/pixi-reels/pull/61) [`28551ca`](https://github.com/schmooky/pixi-reels/commit/28551ca72e6cbc1e95984cf1b35e71bdb5f18d22) Thanks [@schmooky](https://github.com/schmooky)! - Add: per-reel geometry, MultiWays, big symbols, and expanding wilds.
|
|
14
|
+
|
|
15
|
+
- **Per-reel static shape (pyramids):** `builder.visibleRowsPerReel([3, 5, 5, 5, 3])`, optional `reelPixelHeights`, `reelAnchor: 'top' | 'center' | 'bottom'`. Reels can now have non-uniform row counts at build time.
|
|
16
|
+
- **MultiWays (per-spin row variation):** `builder.multiways({ minRows, maxRows, reelPixelHeight })` plus `reelSet.setShape(rowsPerReel)` mid-spin. A new `AdjustPhase` (inserted only when `.multiways(...)` is called) reshapes reels between SPIN and STOP. Pin migration follows: pins gain a frozen `originRow` and migrate back toward it on each reshape.
|
|
17
|
+
- **Big symbols (`N×M` blocks):** `register('bonus', SymbolClass, { size: { w: 2, h: 2 } })`. The result grid stays `string[][]` — the engine paints OCCUPIED across the block. `getSymbolFootprint(col, row)` resolves any cell to the anchor.
|
|
18
|
+
- **Expanding wilds:** unchanged from the existing pin API; reaffirmed via tests as a degenerate big-symbol case.
|
|
19
|
+
|
|
20
|
+
New events: `shape:changed`, `adjust:start`, `adjust:complete`, `pin:migrated`. They only fire on MultiWays slots — non-MultiWays event surfaces are unchanged.
|
|
21
|
+
|
|
22
|
+
New runtime: `reelSet.setShape()`, `reelSet.getSymbolFootprint()`, `reelSet.getVisibleGrid()`, `reelSet.isMultiWaysSlot`. New builder fluents: `.visibleRowsPerReel()`, `.reelPixelHeights()`, `.reelAnchor()`, `.multiways()`, `.pinMigrationDuration()`, `.pinMigrationEase()`. Pin gains optional `originRow`.
|
|
23
|
+
|
|
24
|
+
AdjustPhase animates the reshape: every visible symbol tweens its height + Y from the old shape to the new one over `pinMigrationDuration` ms with the configurable `pinMigrationEase`. Pin overlays tween in lock-step so a sticky wild visibly slides to its migrated row. Set `pinMigrationDuration(0)` for an instant snap.
|
|
25
|
+
|
|
26
|
+
Constraints: big symbols and MultiWays are mutually exclusive per slot in v1. Cascade mode + MultiWays throws at build.
|
|
27
|
+
|
|
28
|
+
**Breaking** (debug-only, not protected by semver but called out): `DebugSnapshot.visibleRows` widens from `number` to `number[]` so jagged shapes are representable. Adapt downstream code that deep-reads the snapshot.
|
|
29
|
+
|
|
30
|
+
### Patch Changes
|
|
31
|
+
|
|
32
|
+
- [#61](https://github.com/schmooky/pixi-reels/pull/61) [`4b22c00`](https://github.com/schmooky/pixi-reels/commit/4b22c00b0f5733d141de1fee4ed8bf515cc2a513) Thanks [@schmooky](https://github.com/schmooky)! - Fix and harden a handful of follow-ups from the per-reel-geometry / MultiWays / big-symbols PR:
|
|
33
|
+
|
|
34
|
+
- `Reel.reshape()` now keeps `_reelHeight` in sync with the new geometry so the field doesn't go stale after a reshape. Previously a direct external call left `reelHeight` reporting the construction-time value. The method is also marked `@internal` in JSDoc — `ReelSet.setShape()` is the supported entry point.
|
|
35
|
+
- `ReelSetBuilder.maskStrategy()` now validates its argument synchronously: passing `null`, `undefined`, or an object missing `build()` / `update()` methods throws with a grep-able error instead of crashing later inside `ReelViewport`.
|
|
36
|
+
- Added a comment in `SpinController.skip()` documenting the reshape-on-skip contract — pin overlays migrate instantly on slam-stop regardless of `pinMigrationDuration`, and the rationale (overlays are destroyed at land anyway).
|
|
37
|
+
|
|
38
|
+
No new public API; behaviour for existing well-formed callers is unchanged.
|
|
39
|
+
|
|
3
40
|
## 0.2.0
|
|
4
41
|
|
|
5
42
|
### Minor Changes
|
package/dist/config/types.d.ts
CHANGED
|
@@ -31,17 +31,64 @@ export interface SymbolData {
|
|
|
31
31
|
zIndex?: number;
|
|
32
32
|
/** If true, this symbol renders above the reel mask (for oversized animations). */
|
|
33
33
|
unmask?: boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Footprint in cells. Default `{ w: 1, h: 1 }`. When `w * h > 1` this
|
|
36
|
+
* symbol is a "big symbol" — at landing it occupies an `w × h` block of
|
|
37
|
+
* cells anchored at the (col, row) where its id appears in the result.
|
|
38
|
+
* Big-symbol registration is rejected on MultiWays slots.
|
|
39
|
+
*/
|
|
40
|
+
size?: {
|
|
41
|
+
w: number;
|
|
42
|
+
h: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/** How to vertically align reels of differing pixel heights. */
|
|
46
|
+
export type ReelAnchor = 'top' | 'center' | 'bottom';
|
|
47
|
+
/**
|
|
48
|
+
* MultiWays configuration knobs. Set via `builder.multiways({ ... })` —
|
|
49
|
+
* mutually exclusive with big-symbol registration.
|
|
50
|
+
*/
|
|
51
|
+
export interface MultiWaysConfig {
|
|
52
|
+
/** Minimum visible rows the server can request. Inclusive. */
|
|
53
|
+
minRows: number;
|
|
54
|
+
/** Maximum visible rows the server can request. Inclusive. */
|
|
55
|
+
maxRows: number;
|
|
56
|
+
/**
|
|
57
|
+
* Pixel height of every reel box. Cell height per reel becomes
|
|
58
|
+
* `reelPixelHeight / visibleRows[i]` after each reshape.
|
|
59
|
+
*/
|
|
60
|
+
reelPixelHeight: number;
|
|
34
61
|
}
|
|
35
62
|
/** Configuration for the reel grid layout. */
|
|
36
63
|
export interface ReelGridConfig {
|
|
37
64
|
/** Number of reel columns. */
|
|
38
65
|
reelCount: number;
|
|
39
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Default visible rows when all reels are uniform. Ignored if
|
|
68
|
+
* `visibleRowsPerReel` is set.
|
|
69
|
+
*/
|
|
40
70
|
visibleRows: number;
|
|
71
|
+
/**
|
|
72
|
+
* Per-reel row counts (static shape). Length MUST equal `reelCount`.
|
|
73
|
+
* Example: `[3, 5, 5, 5, 3]` for a pyramid layout. Mutually exclusive
|
|
74
|
+
* with the scalar `visibleRows` field at the builder level.
|
|
75
|
+
*/
|
|
76
|
+
visibleRowsPerReel?: number[];
|
|
41
77
|
/** Symbol width in pixels. */
|
|
42
78
|
symbolWidth: number;
|
|
43
|
-
/** Symbol height in pixels. */
|
|
79
|
+
/** Symbol height in pixels. Used as the SPIN-time uniform cell height. */
|
|
44
80
|
symbolHeight: number;
|
|
81
|
+
/**
|
|
82
|
+
* Per-reel pixel-box heights. Length MUST equal `reelCount` when set.
|
|
83
|
+
* For MultiWays: every entry is the same fixed reel height. For static
|
|
84
|
+
* pyramids: defaults to `visibleRowsPerReel[i] * symbolHeight`.
|
|
85
|
+
*/
|
|
86
|
+
reelPixelHeights?: number[];
|
|
87
|
+
/**
|
|
88
|
+
* How short reels align vertically inside the tallest reel's height.
|
|
89
|
+
* Default: 'center'.
|
|
90
|
+
*/
|
|
91
|
+
reelAnchor?: ReelAnchor;
|
|
45
92
|
/** Gap between symbols. Default: { x: 0, y: 0 }. */
|
|
46
93
|
symbolGap?: {
|
|
47
94
|
x: number;
|
|
@@ -49,6 +96,13 @@ export interface ReelGridConfig {
|
|
|
49
96
|
};
|
|
50
97
|
/** Number of buffer symbols above and below the visible area. Default: 1. */
|
|
51
98
|
bufferSymbols?: number;
|
|
99
|
+
/**
|
|
100
|
+
* MultiWays configuration. Set by `builder.multiways(...)`. When present:
|
|
101
|
+
* - `setShape(rowsPerReel)` becomes callable mid-spin
|
|
102
|
+
* - AdjustPhase is inserted between SPIN and STOP
|
|
103
|
+
* - big-symbol registration throws at build time
|
|
104
|
+
*/
|
|
105
|
+
multiways?: MultiWaysConfig;
|
|
52
106
|
}
|
|
53
107
|
/** Extra symbols above/below config per reel. */
|
|
54
108
|
export interface ReelExtraSymbols {
|
|
@@ -135,9 +189,29 @@ export interface MaskConfig {
|
|
|
135
189
|
mask: Container;
|
|
136
190
|
position: Position;
|
|
137
191
|
}
|
|
192
|
+
/**
|
|
193
|
+
* Resolved grid view used internally — every defaulted field is filled in,
|
|
194
|
+
* but per-reel-shape and MultiWays extensions stay optional because they're
|
|
195
|
+
* genuinely opt-in.
|
|
196
|
+
*/
|
|
197
|
+
export interface ResolvedReelGridConfig {
|
|
198
|
+
reelCount: number;
|
|
199
|
+
visibleRows: number;
|
|
200
|
+
symbolWidth: number;
|
|
201
|
+
symbolHeight: number;
|
|
202
|
+
symbolGap: {
|
|
203
|
+
x: number;
|
|
204
|
+
y: number;
|
|
205
|
+
};
|
|
206
|
+
bufferSymbols: number;
|
|
207
|
+
visibleRowsPerReel?: number[];
|
|
208
|
+
reelPixelHeights?: number[];
|
|
209
|
+
reelAnchor: ReelAnchor;
|
|
210
|
+
multiways?: MultiWaysConfig;
|
|
211
|
+
}
|
|
138
212
|
/** Full internal configuration assembled by the builder. */
|
|
139
213
|
export interface ReelSetInternalConfig {
|
|
140
|
-
grid:
|
|
214
|
+
grid: ResolvedReelGridConfig;
|
|
141
215
|
symbols: Record<string, SymbolData>;
|
|
142
216
|
speeds: Map<string, SpeedProfile>;
|
|
143
217
|
initialSpeed: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjD,qDAAqD;AACrD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,uDAAuD;IACvD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,2CAA2C;IAC3C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+CAA+C;IAC/C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,2CAA2C;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,8CAA8C;IAC9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,wEAAwE;IACxE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,yEAAyE;IACzE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,yDAAyD;IACzD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC,oEAAoE;IACpE,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,qCAAqC;AACrC,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,MAAM,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|
package/dist/core/Reel.d.ts
CHANGED
|
@@ -21,7 +21,31 @@ export interface ReelConfig {
|
|
|
21
21
|
symbolGapY: number;
|
|
22
22
|
symbolsData: Record<string, SymbolData>;
|
|
23
23
|
initialSymbols: string[];
|
|
24
|
+
/**
|
|
25
|
+
* Y offset of this reel relative to the viewport's top edge. Set by the
|
|
26
|
+
* builder so jagged shapes (pyramids) align according to `reelAnchor`.
|
|
27
|
+
* Default 0.
|
|
28
|
+
*/
|
|
29
|
+
offsetY?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Pixel height of this reel's box. Used for MultiWays cell-height
|
|
32
|
+
* derivation (`reelHeight / visibleRows`). Defaults to
|
|
33
|
+
* `visibleRows * symbolHeight`.
|
|
34
|
+
*/
|
|
35
|
+
reelHeight?: number;
|
|
36
|
+
/**
|
|
37
|
+
* SPIN-time uniform cell height. During SPIN every reel uses this same
|
|
38
|
+
* height. AdjustPhase later swaps to per-reel `reelHeight / visibleRows`.
|
|
39
|
+
* Defaults to `symbolHeight`.
|
|
40
|
+
*/
|
|
41
|
+
spinSymbolHeight?: number;
|
|
24
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Internal sentinel marking non-anchor cells of a big symbol's block.
|
|
45
|
+
* Never crosses the public API — `getVisibleSymbols()` resolves it to the
|
|
46
|
+
* anchor's id.
|
|
47
|
+
*/
|
|
48
|
+
export declare const OCCUPIED_SENTINEL = "__pixi_reels_occupied__";
|
|
25
49
|
/**
|
|
26
50
|
* One vertical column of a slot board.
|
|
27
51
|
*
|
|
@@ -59,8 +83,37 @@ export declare class Reel implements Disposable {
|
|
|
59
83
|
private _bufferAbove;
|
|
60
84
|
private _symbolWidth;
|
|
61
85
|
private _symbolHeight;
|
|
86
|
+
private _offsetY;
|
|
87
|
+
private _reelHeight;
|
|
88
|
+
private _spinSymbolHeight;
|
|
89
|
+
private _symbolGapY;
|
|
90
|
+
private _symbolGapX;
|
|
62
91
|
private _isDestroyed;
|
|
63
92
|
private _isStopping;
|
|
93
|
+
/**
|
|
94
|
+
* Internal stub instances reused for OCCUPIED cells inside a big-symbol
|
|
95
|
+
* block. Allocated on demand (one per concurrent OCCUPIED cell on this
|
|
96
|
+
* reel), never pooled through `SymbolFactory`. The views are invisible —
|
|
97
|
+
* the anchor symbol is sized up to cover the whole block.
|
|
98
|
+
*/
|
|
99
|
+
private _occupiedStubs;
|
|
100
|
+
/**
|
|
101
|
+
* Per-row marker recording which rows are non-anchor cells of a big
|
|
102
|
+
* symbol. Populated when frames are placed; consulted by `getVisibleSymbols`
|
|
103
|
+
* and `getSymbolAt` so anchor identity propagates through the block.
|
|
104
|
+
*
|
|
105
|
+
* Indexed by visible-row 0..visibleRows-1. Each entry is `null` for a
|
|
106
|
+
* normal cell, or `{ anchorRow }` for a cell occupied by another row's
|
|
107
|
+
* anchor.
|
|
108
|
+
*/
|
|
109
|
+
private _occupancy;
|
|
110
|
+
/**
|
|
111
|
+
* Optional resolver for cross-reel OCCUPIED cells. Set by `ReelSet` so
|
|
112
|
+
* `getVisibleSymbols()` returns the anchor's id even when the anchor
|
|
113
|
+
* lives on a different reel (a 2×2 bonus straddles cols c, c+1).
|
|
114
|
+
* Without it, cross-reel OCCUPIED cells return the OCCUPIED sentinel.
|
|
115
|
+
*/
|
|
116
|
+
private _crossReelResolver;
|
|
64
117
|
constructor(config: ReelConfig, symbolFactory: SymbolFactory, randomProvider: RandomSymbolProvider, viewport: ReelViewport);
|
|
65
118
|
get isDestroyed(): boolean;
|
|
66
119
|
get isStopping(): boolean;
|
|
@@ -70,26 +123,104 @@ export declare class Reel implements Disposable {
|
|
|
70
123
|
get visibleRows(): number;
|
|
71
124
|
/** The symbol cell width (in pixels). Constant for the reel's lifetime. */
|
|
72
125
|
get symbolWidth(): number;
|
|
73
|
-
/**
|
|
126
|
+
/**
|
|
127
|
+
* The symbol cell height (in pixels). Mutates on MultiWays reshape via
|
|
128
|
+
* `reshape()`. During SPIN this still equals `spinSymbolHeight`; the
|
|
129
|
+
* per-reel target value comes into effect when AdjustPhase commits the
|
|
130
|
+
* reshape. For non-MultiWays slots this is constant for the reel's lifetime.
|
|
131
|
+
*/
|
|
74
132
|
get symbolHeight(): number;
|
|
133
|
+
/** Pixel height of this reel's box. Set by builder, immutable. */
|
|
134
|
+
get reelHeight(): number;
|
|
135
|
+
/** Y offset of this reel relative to the viewport top. Set by builder, immutable. */
|
|
136
|
+
get offsetY(): number;
|
|
137
|
+
/**
|
|
138
|
+
* SPIN-time uniform cell height. All reels in a slot use this value during
|
|
139
|
+
* the SPIN phase regardless of their per-reel `symbolHeight`. Frozen at
|
|
140
|
+
* construction.
|
|
141
|
+
*/
|
|
142
|
+
get spinSymbolHeight(): number;
|
|
75
143
|
/** Update reel for one frame. Called by SpinController via ticker. */
|
|
76
144
|
update(deltaMs: number): void;
|
|
77
145
|
/** Set the target frame for stopping. */
|
|
78
146
|
setStopFrame(frame: string[]): void;
|
|
79
|
-
/**
|
|
147
|
+
/**
|
|
148
|
+
* Get visible symbol IDs (top to bottom, excluding buffers).
|
|
149
|
+
*
|
|
150
|
+
* Big-symbol cells resolve to the anchor's id — both **same-reel**
|
|
151
|
+
* (the anchor lives on this reel) and **cross-reel** (the anchor is on
|
|
152
|
+
* a leftward reel of a wider block). The cross-reel resolver is
|
|
153
|
+
* injected by `ReelSet`; without it, cross-reel OCCUPIED cells would
|
|
154
|
+
* return the OCCUPIED sentinel, which is the only difference vs.
|
|
155
|
+
* `ReelSet.getVisibleGrid()`. With the resolver wired, the two are
|
|
156
|
+
* equivalent for any reel — `reels.map(r => r.getVisibleSymbols())`
|
|
157
|
+
* matches `reelSet.getVisibleGrid()`.
|
|
158
|
+
*/
|
|
80
159
|
getVisibleSymbols(): string[];
|
|
81
|
-
/**
|
|
160
|
+
/**
|
|
161
|
+
* Internal: register a callback used to resolve cross-reel OCCUPIED
|
|
162
|
+
* cells to the originating big-symbol's id. Wired by `ReelSet` so this
|
|
163
|
+
* reel can answer "what id is at (myCol, row)?" even when the anchor is
|
|
164
|
+
* on a different reel.
|
|
165
|
+
*
|
|
166
|
+
* @internal
|
|
167
|
+
*/
|
|
168
|
+
setCrossReelResolver(resolver: ((col: number, row: number) => string) | null): void;
|
|
169
|
+
/**
|
|
170
|
+
* Get symbol at a visible row (0-indexed from top visible).
|
|
171
|
+
* For non-anchor cells of a big symbol, walks up to the anchor row and
|
|
172
|
+
* returns the anchor symbol so animations target the actual visual.
|
|
173
|
+
*/
|
|
82
174
|
getSymbolAt(visibleRow: number): ReelSymbol;
|
|
175
|
+
/**
|
|
176
|
+
* Anchor row for a visible row. Equals `visibleRow` for normal cells;
|
|
177
|
+
* for non-anchor cells inside a big-symbol block, returns the row where
|
|
178
|
+
* the anchor lives.
|
|
179
|
+
*
|
|
180
|
+
* @internal — used by `ReelSet.getSymbolFootprint` and the cross-reel
|
|
181
|
+
* resolver wired in `ReelSet`'s constructor. Not intended for consumer
|
|
182
|
+
* use; prefer `ReelSet.getSymbolFootprint(col, row)` which returns full
|
|
183
|
+
* anchor + size info.
|
|
184
|
+
*/
|
|
185
|
+
_getAnchorRow(visibleRow: number): number;
|
|
186
|
+
/**
|
|
187
|
+
* Record that the given visible row is the non-anchor cell of a big
|
|
188
|
+
* symbol whose anchor lives at `anchorRow`. Pass `null` to clear the
|
|
189
|
+
* occupancy mark.
|
|
190
|
+
*
|
|
191
|
+
* @internal — called by `_finalizeFrame` and the big-symbol coordinator.
|
|
192
|
+
*/
|
|
193
|
+
_setOccupancy(visibleRow: number, anchorRow: number | null): void;
|
|
83
194
|
/** Notify all visible symbols that the reel has started spinning. */
|
|
84
195
|
notifySpinStart(): void;
|
|
85
196
|
/** Notify all visible symbols that the reel is about to stop (just before bounce). */
|
|
86
197
|
notifySpinEnd(): void;
|
|
87
198
|
/** Notify all visible symbols that the reel has landed on its target. */
|
|
88
199
|
notifyLanded(): void;
|
|
89
|
-
/**
|
|
200
|
+
/**
|
|
201
|
+
* Snap all symbols to grid and finalize big-symbol layout. Called at the
|
|
202
|
+
* end of every stop sequence.
|
|
203
|
+
*/
|
|
90
204
|
snapToGrid(): void;
|
|
91
205
|
/** Place symbols immediately at target positions (for skip/turbo). */
|
|
92
206
|
placeSymbols(symbolIds: string[]): void;
|
|
207
|
+
/**
|
|
208
|
+
* @internal — MultiWays orchestration only.
|
|
209
|
+
*
|
|
210
|
+
* Commit a new visible-row count and per-reel cell height. Resizes every
|
|
211
|
+
* existing symbol on the strip to the new cell height, rebuilds the
|
|
212
|
+
* symbol array (extending or truncating buffers as needed), reshapes the
|
|
213
|
+
* motion layer, and recomputes `_reelHeight` from the new geometry so
|
|
214
|
+
* `reelHeight` stays consistent. Idempotent if the shape doesn't change.
|
|
215
|
+
*
|
|
216
|
+
* Only the engine should call this — `SpinController._applyReshape` is
|
|
217
|
+
* the single source of truth for reshape orchestration. Direct external
|
|
218
|
+
* calls are unsupported and may leave pin overlays, the cross-reel
|
|
219
|
+
* resolver, and the parent `ReelSet`'s shape state out of sync. Use
|
|
220
|
+
* `ReelSet.setShape()` instead, which gates this method on a MultiWays
|
|
221
|
+
* slot and migrates pins atomically.
|
|
222
|
+
*/
|
|
223
|
+
reshape(newVisibleRows: number, newSymbolHeight: number, bufferAbove: number, bufferBelow: number): void;
|
|
93
224
|
/**
|
|
94
225
|
* Recompute `zIndex` for every symbol in the reel.
|
|
95
226
|
*
|
|
@@ -106,5 +237,22 @@ export declare class Reel implements Disposable {
|
|
|
106
237
|
private _setupSymbolPositions;
|
|
107
238
|
private _onSymbolWrapped;
|
|
108
239
|
private _replaceSymbol;
|
|
240
|
+
/**
|
|
241
|
+
* Acquire an OCCUPIED stub. Reuses any free stub stored locally; allocates
|
|
242
|
+
* a new one if none are available. Stubs are never returned to
|
|
243
|
+
* `SymbolFactory`.
|
|
244
|
+
*/
|
|
245
|
+
private _acquireOccupiedStub;
|
|
246
|
+
private _releaseOccupiedStub;
|
|
247
|
+
/**
|
|
248
|
+
* After the visible target frame has been placed, scan visible rows to
|
|
249
|
+
* size big-symbol anchors and populate the OCCUPIED occupancy map.
|
|
250
|
+
*
|
|
251
|
+
* Called from `snapToGrid` and `placeSymbols` so it runs both for normal
|
|
252
|
+
* stop landing AND for skip/turbo. For non-anchor rows of a block, the
|
|
253
|
+
* anchor symbol is sized to span the block; the OCCUPIED stub at that
|
|
254
|
+
* row stays invisible underneath.
|
|
255
|
+
*/
|
|
256
|
+
private _finalizeFrame;
|
|
109
257
|
}
|
|
110
258
|
//# sourceMappingURL=Reel.d.ts.map
|
package/dist/core/Reel.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Reel.d.ts","sourceRoot":"","sources":["../../src/core/Reel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"Reel.d.ts","sourceRoot":"","sources":["../../src/core/Reel.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,14 @@ export declare class ReelMotion {
|
|
|
37
37
|
/** Get the correct Y position for a symbol at a given row. */
|
|
38
38
|
getRowY(row: number): number;
|
|
39
39
|
get slotHeight(): number;
|
|
40
|
+
/**
|
|
41
|
+
* Reshape the motion layer for a new visible-row count and cell height.
|
|
42
|
+
* Recomputes wrap bounds and the slot height. Called by `Reel.reshape()`
|
|
43
|
+
* during AdjustPhase on MultiWays slots. The symbol array is re-bound by
|
|
44
|
+
* `Reel.reshape()` directly via the same array reference, so this method
|
|
45
|
+
* doesn't take a new array.
|
|
46
|
+
*/
|
|
47
|
+
reshape(symbolHeight: number, symbolGapY: number, bufferAbove: number, visibleRows: number): void;
|
|
40
48
|
private _wrapBottomToTop;
|
|
41
49
|
private _wrapTopToBottom;
|
|
42
50
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReelMotion.d.ts","sourceRoot":"","sources":["../../src/core/ReelMotion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAU;IAQnB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,gBAAgB;IAZ1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;gBAGZ,QAAQ,EAAE,UAAU,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EAC5B,WAAW,EAAE,MAAM,EACX,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI;IAStG;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY9B,mFAAmF;IACnF,UAAU,IAAI,IAAI;IAOlB,4EAA4E;IAC5E,gBAAgB,IAAI,IAAI;IAMxB,8DAA8D;IAC9D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI5B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,gBAAgB;CAUzB"}
|
|
1
|
+
{"version":3,"file":"ReelMotion.d.ts","sourceRoot":"","sources":["../../src/core/ReelMotion.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAU;IAQnB,OAAO,CAAC,QAAQ;IAGhB,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,gBAAgB;IAZ1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,KAAK,CAAS;gBAGZ,QAAQ,EAAE,UAAU,EAAE,EAC9B,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EACV,YAAY,EAAE,MAAM,EAC5B,WAAW,EAAE,MAAM,EACX,gBAAgB,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,GAAG,MAAM,KAAK,IAAI;IAStG;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAY9B,mFAAmF;IACnF,UAAU,IAAI,IAAI;IAOlB,4EAA4E;IAC5E,gBAAgB,IAAI,IAAI;IAMxB,8DAA8D;IAC9D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI5B,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED;;;;;;OAMG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IASjG,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,gBAAgB;CAUzB"}
|
package/dist/core/ReelSet.d.ts
CHANGED
|
@@ -69,7 +69,28 @@ export interface FrameAPI {
|
|
|
69
69
|
* Teardown cascades: one `reelSet.destroy()` disposes every child.
|
|
70
70
|
*/
|
|
71
71
|
export declare class ReelSet extends Container implements Disposable {
|
|
72
|
-
/**
|
|
72
|
+
/**
|
|
73
|
+
* zIndex applied to pin overlays so they render above the reel strip.
|
|
74
|
+
*
|
|
75
|
+
* **The library's z-index budget**, for reference if you author symbols
|
|
76
|
+
* that need to layer above defaults:
|
|
77
|
+
*
|
|
78
|
+
* | Layer | zIndex | Source |
|
|
79
|
+
* |---|---|---|
|
|
80
|
+
* | 1×1 symbol, default | `0 * 100 + arrayIndex` (~0–10) | `symbolData.zIndex ?? 0` |
|
|
81
|
+
* | 1×1 symbol, elevated (`zIndex: 1` on `symbolData`) | `1 * 100 + arrayIndex` (~100) | `symbolData.zIndex` |
|
|
82
|
+
* | Big-symbol anchor, default registration | `5 * 100 + arrayIndex` (~500) | recipe convention |
|
|
83
|
+
* | Pin overlay (sticky/expanding wild during spin) | `10000` | `PIN_OVERLAY_Z_INDEX` |
|
|
84
|
+
*
|
|
85
|
+
* The 100× multiplier on `symbolData.zIndex` leaves room for per-row
|
|
86
|
+
* stacking inside a layer (bottom rows render in front of top rows on
|
|
87
|
+
* the same layer). The 10000 ceiling on pin overlays is set very high
|
|
88
|
+
* so a consumer who sets `symbolData.zIndex: 50` (= 5000) still sits
|
|
89
|
+
* below pins. If you need to stack ABOVE pin overlays — e.g. a win-
|
|
90
|
+
* presenter symbol promotion — re-parent the symbol to
|
|
91
|
+
* `viewport.spotlightContainer`, which is its own DisplayObject layer
|
|
92
|
+
* above pin overlays.
|
|
93
|
+
*/
|
|
73
94
|
private static readonly PIN_OVERLAY_Z_INDEX;
|
|
74
95
|
private _events;
|
|
75
96
|
private _reels;
|
|
@@ -92,6 +113,29 @@ export declare class ReelSet extends Container implements Disposable {
|
|
|
92
113
|
* removed from `_pins` (e.g. during unpin()).
|
|
93
114
|
*/
|
|
94
115
|
private _pinOverlays;
|
|
116
|
+
/**
|
|
117
|
+
* MultiWays: target row counts for the next AdjustPhase. Recorded by
|
|
118
|
+
* `setShape()`, consumed by `SpinController` when it builds AdjustPhase
|
|
119
|
+
* configs. `null` means "no shape change pending".
|
|
120
|
+
*/
|
|
121
|
+
private _targetShape;
|
|
122
|
+
/**
|
|
123
|
+
* True once `setResult()` has been called for the current spin. Reset on
|
|
124
|
+
* every `spin:start`. Used to enforce the contract that `setShape()`
|
|
125
|
+
* must be called BEFORE `setResult()` — calling it after corrupts the
|
|
126
|
+
* cached frames (pins were applied at their pre-migration rows; a later
|
|
127
|
+
* setShape would migrate them but the frames are already built).
|
|
128
|
+
*/
|
|
129
|
+
private _resultSetForCurrentSpin;
|
|
130
|
+
/** Set at construction by the builder when `.multiways(...)` was called. */
|
|
131
|
+
private _isMultiWaysSlot;
|
|
132
|
+
private _multiwaysMinRows;
|
|
133
|
+
private _multiwaysMaxRows;
|
|
134
|
+
private _multiwaysReelPixelHeight;
|
|
135
|
+
/** Resolved per-symbol metadata (size, zIndex, etc). */
|
|
136
|
+
private _symbolsData;
|
|
137
|
+
/** Horizontal symbol gap (px). Used by `getBlockBounds` for big symbols. */
|
|
138
|
+
private _configGapX;
|
|
95
139
|
constructor(params: ReelSetParams);
|
|
96
140
|
/** The event emitter for reel-specific events. */
|
|
97
141
|
get events(): EventEmitter<ReelSetEvents>;
|
|
@@ -135,6 +179,86 @@ export declare class ReelSet extends Container implements Disposable {
|
|
|
135
179
|
*/
|
|
136
180
|
setDropOrder(order: 'ltr' | 'rtl' | 'all' | number[], stepMs?: number): void;
|
|
137
181
|
get isSpinning(): boolean;
|
|
182
|
+
/** Whether this slot was built with `.multiways(...)`. */
|
|
183
|
+
get isMultiWaysSlot(): boolean;
|
|
184
|
+
/**
|
|
185
|
+
* MultiWays: record the row count each reel should land on this spin. The
|
|
186
|
+
* AdjustPhase between SPIN and STOP will reshape reels (resize symbols,
|
|
187
|
+
* reshape motion) before the stop sequence runs.
|
|
188
|
+
*
|
|
189
|
+
* Must be called between `spin()` and `setResult()`. The shape stays in
|
|
190
|
+
* effect for the current spin only — call again on every spin.
|
|
191
|
+
*
|
|
192
|
+
* Throws if:
|
|
193
|
+
* - this slot was not built with `.multiways(...)`
|
|
194
|
+
* - `rowsPerReel.length !== reelCount`
|
|
195
|
+
* - any entry falls outside `[multiways.minRows, multiways.maxRows]`
|
|
196
|
+
*/
|
|
197
|
+
setShape(rowsPerReel: number[]): void;
|
|
198
|
+
/**
|
|
199
|
+
* Internal: read the pending MultiWays target shape (does not clear).
|
|
200
|
+
* Used by `SpinController` via the hooks interface. Not part of the
|
|
201
|
+
* public API — call `setShape()` to change shape.
|
|
202
|
+
*
|
|
203
|
+
* @internal
|
|
204
|
+
*/
|
|
205
|
+
private _peekTargetShape;
|
|
206
|
+
/**
|
|
207
|
+
* Internal: clear the pending MultiWays target shape after the spin lands.
|
|
208
|
+
*
|
|
209
|
+
* @internal
|
|
210
|
+
*/
|
|
211
|
+
private _clearTargetShape;
|
|
212
|
+
/**
|
|
213
|
+
* Resolved grid, with all OCCUPIED cells (same-reel and cross-reel)
|
|
214
|
+
* replaced by their anchor's symbol id. A 2×2 bonus reads as four
|
|
215
|
+
* `'bonus'` cells.
|
|
216
|
+
*
|
|
217
|
+
* Equivalent to `reelSet.reels.map(r => r.getVisibleSymbols())` because
|
|
218
|
+
* each reel has a cross-reel resolver wired in by ReelSet's constructor —
|
|
219
|
+
* the per-reel surface and the grid surface are the same.
|
|
220
|
+
*/
|
|
221
|
+
getVisibleGrid(): string[][];
|
|
222
|
+
/**
|
|
223
|
+
* Footprint of the symbol at `(col, row)`.
|
|
224
|
+
*
|
|
225
|
+
* - 1×1 symbols: `{ anchor: { col, row }, size: { w: 1, h: 1 } }`.
|
|
226
|
+
* - Big symbols: returns the anchor cell and block size.
|
|
227
|
+
* - OCCUPIED cells: resolves transparently to the anchor.
|
|
228
|
+
*
|
|
229
|
+
* Useful for win presenters that need to highlight a whole NxM block.
|
|
230
|
+
*/
|
|
231
|
+
getSymbolFootprint(col: number, row: number): {
|
|
232
|
+
anchor: {
|
|
233
|
+
col: number;
|
|
234
|
+
row: number;
|
|
235
|
+
};
|
|
236
|
+
size: {
|
|
237
|
+
w: number;
|
|
238
|
+
h: number;
|
|
239
|
+
};
|
|
240
|
+
};
|
|
241
|
+
/**
|
|
242
|
+
* Pixel rectangle covering a big symbol's whole `N×M` block, in
|
|
243
|
+
* ReelSet-local coordinates. Returns the anchor cell's bounds for 1×1
|
|
244
|
+
* symbols. Pass any cell of a block — anchor or non-anchor — and you
|
|
245
|
+
* get the same rect.
|
|
246
|
+
*
|
|
247
|
+
* Useful for win presenters drawing an outline around a whole bonus, or
|
|
248
|
+
* any overlay aligned to the visible footprint of a big symbol:
|
|
249
|
+
*
|
|
250
|
+
* ```ts
|
|
251
|
+
* const rect = reelSet.getBlockBounds(2, 1);
|
|
252
|
+
* gfx.rect(rect.x, rect.y, rect.width, rect.height)
|
|
253
|
+
* .stroke({ color: 0xff6b35, width: 4 });
|
|
254
|
+
* reelSet.addChild(gfx);
|
|
255
|
+
* ```
|
|
256
|
+
*
|
|
257
|
+
* For 1×1 cells this is equivalent to `getCellBounds(col, row)`. For
|
|
258
|
+
* big-symbol cells it multiplies width/height by the block size and
|
|
259
|
+
* starts from the anchor cell's bounds.
|
|
260
|
+
*/
|
|
261
|
+
getBlockBounds(col: number, row: number): CellBounds;
|
|
138
262
|
/** Speed profile manager. */
|
|
139
263
|
get speed(): SpeedManager;
|
|
140
264
|
/** Change speed and emit event. */
|
|
@@ -248,6 +372,15 @@ export declare class ReelSet extends Container implements Disposable {
|
|
|
248
372
|
* (fast path; identical behaviour to pre-pin code).
|
|
249
373
|
*/
|
|
250
374
|
private _applyPinsToGrid;
|
|
375
|
+
/** Pins on a given reel, in row order. Used by AdjustPhase migration. */
|
|
376
|
+
private _pinsOnReel;
|
|
377
|
+
/**
|
|
378
|
+
* MultiWays: relocate pins on a reel for a new visible-row count. The new
|
|
379
|
+
* row is computed as `min(originRow, newRows - 1)` — clamped only when
|
|
380
|
+
* the origin no longer fits. Returns the migrated pins so AdjustPhase
|
|
381
|
+
* can build tween descriptors. Mutates the pins map in place.
|
|
382
|
+
*/
|
|
383
|
+
private _migratePinsForReel;
|
|
251
384
|
/**
|
|
252
385
|
* Apply a pin to the idle reel's visible display immediately. Used when
|
|
253
386
|
* `pin()` is called while no spin is in flight — the grid updates right
|
|
@@ -274,6 +407,28 @@ export declare class ReelSet extends Container implements Disposable {
|
|
|
274
407
|
* (e.g. setting a Spine track).
|
|
275
408
|
*/
|
|
276
409
|
private _ensurePinOverlay;
|
|
410
|
+
/**
|
|
411
|
+
* Reposition + resize every pin overlay on the given reel.
|
|
412
|
+
*
|
|
413
|
+
* The engine calls this automatically after every MultiWays AdjustPhase
|
|
414
|
+
* reshape (and from the skip path), so applications that just use
|
|
415
|
+
* `setShape()` / `setResult()` never need to invoke it. **Call it
|
|
416
|
+
* yourself only if** you mutate `Reel.symbolWidth`, `Reel.symbolHeight`,
|
|
417
|
+
* or a pin's row outside the normal MultiWays flow — e.g. a custom
|
|
418
|
+
* mid-spin layout swap that bypasses `AdjustPhase`.
|
|
419
|
+
*
|
|
420
|
+
* No-op for reels with no active pin overlays.
|
|
421
|
+
*/
|
|
422
|
+
refreshPinOverlaysForReel(reelIndex: number): void;
|
|
423
|
+
/**
|
|
424
|
+
* Internal: build AdjustPhase pin-overlay tween descriptors for a reel.
|
|
425
|
+
* Captures the overlays' CURRENT on-screen Y + size as the tween's
|
|
426
|
+
* `from` state, then computes the post-reshape `to` state from the
|
|
427
|
+
* pin's already-migrated row + the upcoming cell height. Called BEFORE
|
|
428
|
+
* AdjustPhase commits the reshape, so the snapshot reflects what the
|
|
429
|
+
* player actually sees.
|
|
430
|
+
*/
|
|
431
|
+
private _buildPinOverlayTweens;
|
|
277
432
|
/**
|
|
278
433
|
* Destroy a single pin's overlay, if present. Fires
|
|
279
434
|
* `pin:overlayDestroyed` BEFORE the overlay is released to the pool, so
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReelSet.d.ts","sourceRoot":"","sources":["../../src/core/ReelSet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ReelSet.d.ts","sourceRoot":"","sources":["../../src/core/ReelSet.ts"],"names":[],"mappings":"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"}
|