pixi-reels 3.0.0 → 3.1.0
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 +91 -0
- package/dist/config/phaseProfile.d.ts +43 -0
- package/dist/config/phaseProfile.d.ts.map +1 -0
- package/dist/config/types.d.ts +165 -3
- package/dist/config/types.d.ts.map +1 -1
- package/dist/{debug-DnrD1PHb.js → debug-CzvrK01X.js} +533 -391
- package/dist/debug-CzvrK01X.js.map +1 -0
- package/dist/debug-mp1gR9Sd.cjs +4 -0
- package/dist/debug-mp1gR9Sd.cjs.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +61 -61
- package/dist/speed/SpeedManager.d.ts +25 -2
- package/dist/speed/SpeedManager.d.ts.map +1 -1
- package/dist/spin/SpinController.d.ts +13 -0
- package/dist/spin/SpinController.d.ts.map +1 -1
- package/dist/spin/phases/AdjustPhase.d.ts +2 -2
- package/dist/spin/phases/AdjustPhase.d.ts.map +1 -1
- package/dist/spin/phases/AnticipationPhase.d.ts +17 -10
- package/dist/spin/phases/AnticipationPhase.d.ts.map +1 -1
- package/dist/spin/phases/CascadeDropInPhase.d.ts +2 -2
- package/dist/spin/phases/CascadeDropInPhase.d.ts.map +1 -1
- package/dist/spin/phases/CascadeFallPhase.d.ts +2 -2
- package/dist/spin/phases/CascadeFallPhase.d.ts.map +1 -1
- package/dist/spin/phases/CascadePlacePhase.d.ts +2 -2
- package/dist/spin/phases/CascadePlacePhase.d.ts.map +1 -1
- package/dist/spin/phases/PhaseFactory.d.ts +31 -5
- package/dist/spin/phases/PhaseFactory.d.ts.map +1 -1
- package/dist/spin/phases/ReelPhase.d.ts +56 -2
- package/dist/spin/phases/ReelPhase.d.ts.map +1 -1
- package/dist/spin/phases/SpinPhase.d.ts +2 -2
- package/dist/spin/phases/SpinPhase.d.ts.map +1 -1
- package/dist/spin/phases/StartPhase.d.ts +9 -8
- package/dist/spin/phases/StartPhase.d.ts.map +1 -1
- package/dist/spin/phases/StopPhase.d.ts +9 -8
- package/dist/spin/phases/StopPhase.d.ts.map +1 -1
- package/dist/spin/phases/steps.d.ts +21 -4
- package/dist/spin/phases/steps.d.ts.map +1 -1
- package/dist/testing.cjs +1 -1
- package/dist/testing.js +1 -1
- package/package.json +3 -2
- package/dist/debug-Cou5DWoL.cjs +0 -4
- package/dist/debug-Cou5DWoL.cjs.map +0 -1
- package/dist/debug-DnrD1PHb.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,96 @@
|
|
|
1
1
|
# pixi-reels
|
|
2
2
|
|
|
3
|
+
## 3.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#259](https://github.com/schmooky/pixi-reels/pull/259) [`cb4d013`](https://github.com/schmooky/pixi-reels/commit/cb4d013b1ff4b73666fb408247e19e17f12ae31b) Thanks [@igaming-bulochka](https://github.com/igaming-bulochka)! - Add: per-phase sections on a speed profile, so a phase's timing, its steps, and its anticipated variant are configured where they belong instead of in one flat bag.
|
|
8
|
+
|
|
9
|
+
A profile's flat fields are unchanged and still the contract: a phase that read `profile.spinSpeed` reads exactly what it always did, and every profile written before this release behaves identically. On top of them a profile may now carry one optional section per phase:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
const normal = {
|
|
13
|
+
name: 'normal',
|
|
14
|
+
spinDelay: 0,
|
|
15
|
+
spinSpeed: 200,
|
|
16
|
+
stopDelay: 140,
|
|
17
|
+
anticipationDelay: 450,
|
|
18
|
+
bounceDistance: 80,
|
|
19
|
+
bounceDuration: 600,
|
|
20
|
+
start: { steps: { accelerate: { ease: 'sine.out', duration: 300 } } },
|
|
21
|
+
stop: {
|
|
22
|
+
bounceDistance: 40,
|
|
23
|
+
whenAnticipated: { steps: { bounce: { ease: 'sine.out' } } },
|
|
24
|
+
},
|
|
25
|
+
} satisfies SpeedProfile;
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
A section restates any flat field for that phase alone, configures the phase's named steps by name, and carries a `whenAnticipated` half that is merged on top for a reel that teased earlier in the spin. Nesting rather than a `'anticipation:stop'` key keeps the variant distinct from a phase NAME like `'cascade:fall'`.
|
|
29
|
+
|
|
30
|
+
**Custom phases are typed, not `object`.** `PhaseProfiles` is the registry the built-in sections live in, and a game merges its own phases into it:
|
|
31
|
+
|
|
32
|
+
```ts
|
|
33
|
+
declare module 'pixi-reels' {
|
|
34
|
+
interface PhaseProfiles {
|
|
35
|
+
'bigwin:flash': PhaseSection<{ pulse: StepTiming }, { flashes: number }>;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
That section is then checked and autocompleted everywhere a profile is written, and a typo in a step name is a compile error.
|
|
41
|
+
|
|
42
|
+
**A phase can tell whether its reel teased.** `PhaseFactory.create` now passes a `PhaseCreateContext` (`phase`, `reelIndex`, `anticipated`, `quickened`) as a third argument to a registered factory, so a registration can build a different phase for a reel that teased:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
f.registerFactory('anticipation', (reel, speed, ctx) =>
|
|
46
|
+
ctx.reelIndex === 4 ? new CustomAnticipationPhase(reel, speed) : new AnticipationPhase(reel, speed));
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The same context reaches the phase: `phase.anticipated`, and `ctx.anticipated` in every step.
|
|
50
|
+
|
|
51
|
+
Also new: `ReelPhase.timing` (the profile with this phase's section folded in — what the built-in phases now read), `ctx.step` in a step (that step's config from the profile, in segment order), `resolvePhaseProfile` / `resolveStepTiming` for a phase that does not extend `ReelPhase`, and `speed.tune(phase, section)` / `speed.clearTune()` to override part of a section at run time. Like a speed change, a tune takes effect on the next spin.
|
|
52
|
+
|
|
53
|
+
**The built-in phases are generic over their profile.** `StopPhase<TProfile>`, and the same for the other seven, so subclassing one keeps the profile type instead of pinning it back to `SpeedProfile`. A subclass reads its own fields through `this._speed` and `ctx.profile` with no cast:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
class TeasedStop extends StopPhase<MyProfile> {
|
|
57
|
+
override defaultSteps(): PhaseStep<StopStepContext<MyProfile>>[] { /* ctx.profile.myField */ }
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`StopPhase` with no argument is `StopPhase<SpeedProfile>`, exactly as before, and `f.register('stop', StopPhase, { steps })` infers as before — `register` now reads its options type off the class (`PhaseOptionsOf`) so it works for a generic one.
|
|
62
|
+
|
|
63
|
+
**`bounceEase` is a profile field.** The third of the bounce's three numbers, beside `bounceDistance` and `bounceDuration`, read by `phase.bounce()` when the call names no ease. `bounce({ ease })` still wins; with neither it is `'power1.out'` as today. Being a flat field it sections like the rest, so a teased landing that differs only in its ease is `stop: { whenAnticipated: { bounceEase: 'sine.out' } }` and no phase code.
|
|
64
|
+
|
|
65
|
+
`anticipated` means a tease that RAN TO ITS END. A `'quicken'` press that cuts a tease short leaves the reel on the section's own half rather than `whenAnticipated`: the press asked for the landing, and what it cut is the tease the variant exists to pay off. A press before the tease skips it outright, as it already did. `quickened` is in the same context, so a phase that wants the other reading can take it.
|
|
66
|
+
|
|
67
|
+
**Deprecate: `decelerationEase`.** It is declared, set in all three built-in presets, and read nowhere in the engine — it names a deceleration phase that does not exist (a stop is a spin-out plus a bounce) while being the first place a consumer looks for the landing ease. It still compiles and still does nothing; the typings now say so and point at `bounceEase`. Removed in the next major.
|
|
68
|
+
|
|
69
|
+
**One thing that can break a consumer:** `SpeedProfile` is now `SpeedProfileBase & PhaseSections` rather than a lone interface, so it can no longer be extended by declaration merging. `interface MyProfile extends SpeedProfile { ... }` is unaffected and stays the documented way to carry extra timing. If you were merging into the library's own interface, merge into `SpeedProfileBase` instead:
|
|
70
|
+
|
|
71
|
+
```ts
|
|
72
|
+
// before
|
|
73
|
+
declare module 'pixi-reels' { interface SpeedProfile { houseEase: string } }
|
|
74
|
+
// after
|
|
75
|
+
declare module 'pixi-reels' { interface SpeedProfileBase { houseEase: string } }
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
A profile carrying a top-level OBJECT field named after a phase (`start`, `spin`, `anticipation`, `stop`, `adjust`, `cascade:*`) now collides with that phase's section and fails to compile, loudly, at the profile's declaration. Rename the field, or make it the phase's section.
|
|
79
|
+
|
|
80
|
+
Two things the probes for those breaks turned up, fixed here: a profile field named after a phase whose value is an ARRAY is no longer read as that phase's section (spreading one landed its indices on the resolved profile as `'0'`, `'1'`), and a `steps` key naming no step of the phase now warns once with code `profile-step-<phase>-<name>` instead of configuring nothing in silence — `insertAfter` and friends throw on the same mistake, but a profile is data, so this warns rather than failing the spin.
|
|
81
|
+
|
|
82
|
+
**A step you INSERT into a built-in phase is typed too.** Each built-in's step map is a named interface — `StartSteps`, `AnticipationSteps`, `StopSteps` — so a game merges its own step name into the one it inserted into, and a step's config can carry more than a `StepTiming`:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
declare module 'pixi-reels' {
|
|
86
|
+
interface StopSteps { kick: { lift: number; ease?: string } }
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
const turbo = { ...SpeedPresets.TURBO, stop: { steps: { kick: { lift: 6 } } } };
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
An unknown step name is still rejected, and the step's own shape is still checked.
|
|
93
|
+
|
|
3
94
|
## 3.0.0
|
|
4
95
|
|
|
5
96
|
### Major Changes
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PhaseSection, SpeedProfile, StepTiming } from './types.js';
|
|
2
|
+
/** What a lookup by runtime phase name can find on a profile. */
|
|
3
|
+
export type AnyPhaseSection = PhaseSection<Record<string, StepTiming>>;
|
|
4
|
+
/**
|
|
5
|
+
* `override` merged over `base`, both halves of the section included: flat
|
|
6
|
+
* fields replace, per-step config merges segment by segment, and
|
|
7
|
+
* `whenAnticipated` merges the same way.
|
|
8
|
+
*
|
|
9
|
+
* What a runtime tune (`speed.tune(...)`) is folded in with, so naming one
|
|
10
|
+
* step's ease leaves the rest of the section standing.
|
|
11
|
+
*/
|
|
12
|
+
export declare function mergeSection(base: AnyPhaseSection | undefined, override: AnyPhaseSection | undefined): AnyPhaseSection;
|
|
13
|
+
/**
|
|
14
|
+
* `profile` with every tune in `tunes` merged into its own section for that
|
|
15
|
+
* phase. What {@link SpeedManager.active} hands out once a game has tuned
|
|
16
|
+
* something at run time.
|
|
17
|
+
*/
|
|
18
|
+
export declare function tuneProfile<TProfile extends SpeedProfile>(profile: TProfile, tunes: ReadonlyMap<string, AnyPhaseSection>): TProfile;
|
|
19
|
+
/**
|
|
20
|
+
* The profile a phase runs on, with its own section folded into the flat
|
|
21
|
+
* fields: the profile first, then `profile[phase]`, then that section's
|
|
22
|
+
* `whenAnticipated` when the reel teased earlier in this spin.
|
|
23
|
+
*
|
|
24
|
+
* A profile with no section for `phase` is returned as it is, so a phase that
|
|
25
|
+
* has always read `profile.spinSpeed` reads exactly what it always did.
|
|
26
|
+
*/
|
|
27
|
+
export declare function resolvePhaseProfile<TProfile extends SpeedProfile>(profile: TProfile, phase: string, anticipated?: boolean): TProfile;
|
|
28
|
+
/**
|
|
29
|
+
* What the profile says about one named step of one phase, in segment order.
|
|
30
|
+
* The section's `whenAnticipated` entry for that step is merged over the
|
|
31
|
+
* section's own, segment by segment.
|
|
32
|
+
*
|
|
33
|
+
* Empty when the profile configures nothing for that step. The built-in steps
|
|
34
|
+
* read the first entry; a list is for a step written to consume segments.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolveStepTiming(profile: SpeedProfile, phase: string, stepName: string, anticipated?: boolean): readonly StepTiming[];
|
|
37
|
+
/**
|
|
38
|
+
* Every step name the profile configures for `phase`, from both halves of
|
|
39
|
+
* the section. What a phase checks its own step list against, so a name that
|
|
40
|
+
* matches nothing is reported rather than silently ignored.
|
|
41
|
+
*/
|
|
42
|
+
export declare function configuredStepNames(profile: SpeedProfile, phase: string): readonly string[];
|
|
43
|
+
//# sourceMappingURL=phaseProfile.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phaseProfile.d.ts","sourceRoot":"","sources":["../../src/config/phaseProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtF,iEAAiE;AACjE,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAmFvE;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,eAAe,GAAG,SAAS,EACjC,QAAQ,EAAE,eAAe,GAAG,SAAS,GACpC,eAAe,CAOjB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,SAAS,YAAY,EACvD,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,GAC1C,QAAQ,CAOV;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS,YAAY,EAC/D,OAAO,EAAE,QAAQ,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,UAAQ,GAClB,QAAQ,CAKV;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,WAAW,UAAQ,GAClB,SAAS,UAAU,EAAE,CAMvB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAQ3F"}
|
package/dist/config/types.d.ts
CHANGED
|
@@ -298,8 +298,13 @@ export interface AnticipationOptions {
|
|
|
298
298
|
*/
|
|
299
299
|
cells?: AnticipationCells;
|
|
300
300
|
}
|
|
301
|
-
/**
|
|
302
|
-
|
|
301
|
+
/**
|
|
302
|
+
* The flat timing fields every speed profile has carried since v1.
|
|
303
|
+
*
|
|
304
|
+
* This is the whole of a profile's own shape; {@link SpeedProfile} adds the
|
|
305
|
+
* optional per-phase sections on top of it.
|
|
306
|
+
*/
|
|
307
|
+
export interface SpeedProfileBase {
|
|
303
308
|
readonly name: string;
|
|
304
309
|
/** Milliseconds between each reel starting to spin. */
|
|
305
310
|
readonly spinDelay: number;
|
|
@@ -313,9 +318,22 @@ export interface SpeedProfile {
|
|
|
313
318
|
readonly bounceDistance: number;
|
|
314
319
|
/** Milliseconds for bounce-back animation. */
|
|
315
320
|
readonly bounceDuration: number;
|
|
321
|
+
/**
|
|
322
|
+
* Optional GSAP ease for each leg of the landing bounce. Default
|
|
323
|
+
* `'power1.out'`. The third of the bounce's three numbers, beside
|
|
324
|
+
* `bounceDistance` and `bounceDuration`; `bounce({ ease })` still wins over
|
|
325
|
+
* it, as every {@link BounceOptions} field wins over the profile's.
|
|
326
|
+
*/
|
|
327
|
+
readonly bounceEase?: string;
|
|
316
328
|
/** Optional GSAP ease string for acceleration. Default: 'power2.in'. */
|
|
317
329
|
readonly accelerationEase?: string;
|
|
318
|
-
/**
|
|
330
|
+
/**
|
|
331
|
+
* @deprecated Does nothing, and never did: no phase reads it. It names a
|
|
332
|
+
* deceleration phase the engine does not have — a stop is a spin-out plus a
|
|
333
|
+
* bounce. If you set it meaning the landing's ease, that is
|
|
334
|
+
* {@link SpeedProfileBase.bounceEase}, which `phase.bounce()` does read.
|
|
335
|
+
* Removed in the next major.
|
|
336
|
+
*/
|
|
319
337
|
readonly decelerationEase?: string;
|
|
320
338
|
/** Milliseconds for acceleration phase. Default: 300. */
|
|
321
339
|
readonly accelerationDuration?: number;
|
|
@@ -342,6 +360,150 @@ export interface SpeedProfile {
|
|
|
342
360
|
*/
|
|
343
361
|
readonly tumble?: TumbleConfig;
|
|
344
362
|
}
|
|
363
|
+
/**
|
|
364
|
+
* The flat timing fields a phase section may restate for itself.
|
|
365
|
+
*
|
|
366
|
+
* Every field keeps the name and the meaning it has at the top level of a
|
|
367
|
+
* profile, so a step reads `spinSpeed` the same way whether the game set it
|
|
368
|
+
* profile-wide or only for that phase. `name` and `tumble` describe the
|
|
369
|
+
* profile as a whole and cannot be sectioned.
|
|
370
|
+
*/
|
|
371
|
+
export type PhaseTiming = Partial<Omit<SpeedProfileBase, 'name' | 'tumble'>>;
|
|
372
|
+
/**
|
|
373
|
+
* Overrides for one named step of a phase. A step reads whichever of these
|
|
374
|
+
* its own work uses; the built-in steps read `ease` and `duration`.
|
|
375
|
+
*/
|
|
376
|
+
export interface StepTiming {
|
|
377
|
+
/** GSAP ease for whatever this step tweens. */
|
|
378
|
+
readonly ease?: string;
|
|
379
|
+
/** Milliseconds this step takes. For a step that only waits, the wait itself. */
|
|
380
|
+
readonly duration?: number;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* A section's contents, without the anticipated variant. Split out so
|
|
384
|
+
* {@link PhaseSection} can reuse it for `whenAnticipated` without letting
|
|
385
|
+
* that variant carry a variant of its own.
|
|
386
|
+
*/
|
|
387
|
+
export type PhaseSectionBody<TSteps, TExtra = unknown> = PhaseTiming & TExtra & {
|
|
388
|
+
/**
|
|
389
|
+
* Per-step overrides, keyed by the step's name. A list is for a step
|
|
390
|
+
* written to run several segments in a row (a two-stage acceleration);
|
|
391
|
+
* the built-in steps read the first entry only.
|
|
392
|
+
*/
|
|
393
|
+
readonly steps?: {
|
|
394
|
+
readonly [K in keyof TSteps]?: TSteps[K] | readonly TSteps[K][];
|
|
395
|
+
};
|
|
396
|
+
};
|
|
397
|
+
/**
|
|
398
|
+
* One phase's slice of a speed profile: the flat fields it wants different
|
|
399
|
+
* from the profile's own, the config of its named steps, and the variant to
|
|
400
|
+
* merge on top when the reel teased earlier in the spin.
|
|
401
|
+
*
|
|
402
|
+
* @typeParam TSteps - The phase's step names mapped to each step's config.
|
|
403
|
+
* @typeParam TExtra - Extra fields this phase reads that are not profile timings.
|
|
404
|
+
*/
|
|
405
|
+
export type PhaseSection<TSteps = Record<string, StepTiming>, TExtra = unknown> = PhaseSectionBody<TSteps, TExtra> & {
|
|
406
|
+
/**
|
|
407
|
+
* Merged over the rest of this section when the reel ran an anticipation
|
|
408
|
+
* tease earlier in the same spin. Does not nest a variant of its own.
|
|
409
|
+
*/
|
|
410
|
+
readonly whenAnticipated?: PhaseSectionBody<TSteps, TExtra>;
|
|
411
|
+
};
|
|
412
|
+
/**
|
|
413
|
+
* Every phase that may carry a section on a speed profile, mapped to that
|
|
414
|
+
* section's shape. The built-ins are listed here; a game declares its own
|
|
415
|
+
* custom phases by merging into this interface, which is what gives a
|
|
416
|
+
* custom section a real type instead of an opaque object:
|
|
417
|
+
*
|
|
418
|
+
* @example
|
|
419
|
+
* declare module 'pixi-reels' {
|
|
420
|
+
* interface PhaseProfiles {
|
|
421
|
+
* 'bigwin:flash': PhaseSection<{ pulse: StepTiming }, { flashes: number }>;
|
|
422
|
+
* }
|
|
423
|
+
* }
|
|
424
|
+
*
|
|
425
|
+
* // Checked, and autocompleted, like any built-in section:
|
|
426
|
+
* reelSet.speed.addProfile('cinematic', {
|
|
427
|
+
* ...SpeedPresets.NORMAL,
|
|
428
|
+
* 'bigwin:flash': { flashes: 3, steps: { pulse: { duration: 120 } } },
|
|
429
|
+
* });
|
|
430
|
+
*
|
|
431
|
+
* A step INSERTED into a built-in phase is declared the same way, by merging
|
|
432
|
+
* into that phase's step interface ({@link StartSteps},
|
|
433
|
+
* {@link AnticipationSteps}, {@link StopSteps}) rather than this one. A step's
|
|
434
|
+
* config is whatever the entry says, so it can carry more than a
|
|
435
|
+
* {@link StepTiming}:
|
|
436
|
+
*
|
|
437
|
+
* @example
|
|
438
|
+
* declare module 'pixi-reels' {
|
|
439
|
+
* interface StopSteps {
|
|
440
|
+
* kick: { lift: number; ease?: string; duration?: number };
|
|
441
|
+
* }
|
|
442
|
+
* }
|
|
443
|
+
*
|
|
444
|
+
* // `f.register('stop', StopPhase, { steps: (s) => insertAfter(s, 'land', kick) })`
|
|
445
|
+
* // puts the step in the list; this is what tunes it per speed:
|
|
446
|
+
* const turbo = { ...SpeedPresets.TURBO, stop: { steps: { kick: { lift: 6 } } } };
|
|
447
|
+
*/
|
|
448
|
+
/** The steps {@link PhaseProfiles.start} configures. Merge into it for a step you insert. */
|
|
449
|
+
export interface StartSteps {
|
|
450
|
+
delay: StepTiming;
|
|
451
|
+
launch: StepTiming;
|
|
452
|
+
pull: StepTiming;
|
|
453
|
+
accelerate: StepTiming;
|
|
454
|
+
announce: StepTiming;
|
|
455
|
+
}
|
|
456
|
+
/** The steps {@link PhaseProfiles.anticipation} configures. Merge into it for a step you insert. */
|
|
457
|
+
export interface AnticipationSteps {
|
|
458
|
+
tease: StepTiming;
|
|
459
|
+
}
|
|
460
|
+
/** The steps {@link PhaseProfiles.stop} configures. Merge into it for a step you insert. */
|
|
461
|
+
export interface StopSteps {
|
|
462
|
+
delay: StepTiming;
|
|
463
|
+
spinOut: StepTiming;
|
|
464
|
+
land: StepTiming;
|
|
465
|
+
bounce: StepTiming;
|
|
466
|
+
}
|
|
467
|
+
export interface PhaseProfiles {
|
|
468
|
+
start: PhaseSection<StartSteps>;
|
|
469
|
+
spin: PhaseSection<Record<never, StepTiming>>;
|
|
470
|
+
anticipation: PhaseSection<AnticipationSteps>;
|
|
471
|
+
stop: PhaseSection<StopSteps>;
|
|
472
|
+
adjust: PhaseSection<Record<never, StepTiming>>;
|
|
473
|
+
'cascade:fall': PhaseSection<Record<never, StepTiming>>;
|
|
474
|
+
'cascade:place': PhaseSection<Record<never, StepTiming>>;
|
|
475
|
+
'cascade:dropIn': PhaseSection<Record<never, StepTiming>>;
|
|
476
|
+
}
|
|
477
|
+
/** One optional section per entry in {@link PhaseProfiles}. */
|
|
478
|
+
export type PhaseSections = {
|
|
479
|
+
readonly [K in keyof PhaseProfiles]?: PhaseProfiles[K];
|
|
480
|
+
};
|
|
481
|
+
/**
|
|
482
|
+
* Timing and animation profile for a speed mode.
|
|
483
|
+
*
|
|
484
|
+
* The flat fields ({@link SpeedProfileBase}) are the profile's contract and
|
|
485
|
+
* have not moved: a phase that always read `profile.spinSpeed` still does.
|
|
486
|
+
* On top of them a profile may carry one optional section per phase, which
|
|
487
|
+
* restates any of those fields for that phase alone, configures the phase's
|
|
488
|
+
* named steps, and can vary itself for a reel that teased:
|
|
489
|
+
*
|
|
490
|
+
* @example
|
|
491
|
+
* const normal = {
|
|
492
|
+
* name: 'normal',
|
|
493
|
+
* spinDelay: 0,
|
|
494
|
+
* spinSpeed: 200,
|
|
495
|
+
* stopDelay: 140,
|
|
496
|
+
* anticipationDelay: 450,
|
|
497
|
+
* bounceDistance: 80,
|
|
498
|
+
* bounceDuration: 600,
|
|
499
|
+
* stop: {
|
|
500
|
+
* bounceDistance: 40,
|
|
501
|
+
* steps: { bounce: { ease: 'power1.out' } },
|
|
502
|
+
* whenAnticipated: { steps: { bounce: { ease: 'sine.out' } } },
|
|
503
|
+
* },
|
|
504
|
+
* } satisfies SpeedProfile;
|
|
505
|
+
*/
|
|
506
|
+
export type SpeedProfile = SpeedProfileBase & PhaseSections;
|
|
345
507
|
/** Per-symbol configuration data. */
|
|
346
508
|
export interface SymbolData {
|
|
347
509
|
/** Relative weight for random generation (higher = more frequent). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"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"}
|