pixi-reels

PhaseFactory

pixi-reels


pixi-reels / index / PhaseFactory

Class: PhaseFactory

Defined in: spin/phases/PhaseFactory.ts:31

Factory for creating reel phase instances.

Ships with all four default phases pre-registered. Users can override any phase by registering a custom constructor or factory function. Use registerFactory() when the phase needs extra construction-time config (e.g. cascade drop settings baked in via closure).

Constructors#

Constructor#

new PhaseFactory(): PhaseFactory;

Defined in: spin/phases/PhaseFactory.ts:34

Returns#

PhaseFactory

Methods#

create()#

create<T extends ReelPhase<any, SpeedProfile> = ReelPhase<any, SpeedProfile>>(
   name: string, 
   reel: Reel, 
   speed: SpeedProfile
): T;

Defined in: spin/phases/PhaseFactory.ts:79

Create a phase instance for a reel.

Type Parameters#

Type ParameterDefault type
T extends ReelPhase<any, SpeedProfile>ReelPhase<any, SpeedProfile>

Parameters#

ParameterType
namestring
reelReel
speedSpeedProfile

Returns#

T


has()#

has(name: string): boolean;

Defined in: spin/phases/PhaseFactory.ts:93

Parameters#

ParameterType
namestring

Returns#

boolean


register()#

register<P extends SpeedProfile, T extends ReelPhase<any, any>, O = undefined>(
   name: string, 
   PhaseClass: PhaseConstructor<T, P, O>, 
   options?: O
): void;

Defined in: spin/phases/PhaseFactory.ts:56

Register or override a phase type by constructor, with the options its constructor takes as a third argument. Registering a built-in under its own key with options is how a game reconfigures it without subclassing:

Type Parameters#

Type ParameterDefault type
P extends SpeedProfile-
T extends ReelPhase<any, any>-
Oundefined

Parameters#

ParameterType
namestring
PhaseClassPhaseConstructor<T, P, O>
options?O

Returns#

void

Example#

factory.register('stop', StopPhase, {
  steps: (steps) => insertAfter(steps, 'land', step('flash', (ctx) => flash(ctx.reel))),
});

A phase declared against a wider profile (`ReelPhase<Config, MyProfile>`)
registers the same way: the manager hands every phase the profile
instance the game registered, so the extra fields are there at run time,
and narrowing to `P` here is what lets that declaration typecheck.

registerFactory()#

registerFactory<P extends SpeedProfile, T extends ReelPhase<any, any>>(name: string, factory: PhaseCreatorFn<T, P>): void;

Defined in: spin/phases/PhaseFactory.ts:71

Register or override a phase type by factory function. Use this when the phase needs extra args at construction time.

Type Parameters#

Type Parameter
P extends SpeedProfile
T extends ReelPhase<any, any>

Parameters#

ParameterType
namestring
factoryPhaseCreatorFn<T, P>

Returns#

void

Example#

factory.registerFactory('cascade:dropIn', (reel, speed) => new CascadeDropInPhase(reel, speed, dropConfig));