Function: createStoryletPlugin()
Function: createStoryletPlugin()
Section titled “Function: createStoryletPlugin()”createStoryletPlugin<
TConditionEngine,TPassageId>():ChoicekitPlugin<{api: {getEligibleStorylets: () =>Readonly<{completionRatio:number;conditionPriorityScore:number;failingConditions:number;isEligible:boolean;name:string;passageId:TPassageId;passingConditions:number;priority:number; }>[];getStoryletStats: (storyletName) =>Readonly<{loaded:number;selected:number; }>;getTopEligibleStorylet: () =>Readonly<{completionRatio:number;conditionPriorityScore:number;failingConditions:number;isEligible:boolean;name:string;passageId:TPassageId;passingConditions:number;priority:number; }> |null;loadTopEligibleStorylet: () =>Readonly<{completionRatio:number;conditionPriorityScore:number;failingConditions:number;isEligible:boolean;name:string;passageId:TPassageId;passingConditions:number;priority:number; }> |null;markStoryletSelected: (storyletName) =>void; };config: {storylets: readonlyReadonly<{conditions: readonlyStoryletCondition<TConditionEngine>[];name:string;passageId:TPassageId;priority?:number; }>[]; };dependencies: [];engine:TConditionEngine;id:"storylet";serializedState: {loadedCounts:Record<string,number>;selectedCounts:Record<string,number>; };state:StoryletPluginState; }>
Defined in: plugins/examples/storylet.ts:142
Create the official storylet plugin.
The resulting API is mounted at engine.$.storylet and provides:
- query APIs for eligible/top storylets
- explicit selection/loading helpers
- per-storylet selection/load statistics
Persistence uses serialize.withSave = true, so counters rewind with story saves.
Type Parameters
Section titled “Type Parameters”TConditionEngine
Section titled “TConditionEngine”TConditionEngine extends ChoicekitEngine<ChoicekitEngineGenerics> = ChoicekitEngine<ChoicekitEngineGenerics>
TPassageId
Section titled “TPassageId”TPassageId extends string = TConditionEngine["passageId"]
Returns
Section titled “Returns”ChoicekitPlugin<{ api: { getEligibleStorylets: () => Readonly<{ completionRatio: number; conditionPriorityScore: number; failingConditions: number; isEligible: boolean; name: string; passageId: TPassageId; passingConditions: number; priority: number; }>[]; getStoryletStats: (storyletName) => Readonly<{ loaded: number; selected: number; }>; getTopEligibleStorylet: () => Readonly<{ completionRatio: number; conditionPriorityScore: number; failingConditions: number; isEligible: boolean; name: string; passageId: TPassageId; passingConditions: number; priority: number; }> | null; loadTopEligibleStorylet: () => Readonly<{ completionRatio: number; conditionPriorityScore: number; failingConditions: number; isEligible: boolean; name: string; passageId: TPassageId; passingConditions: number; priority: number; }> | null; markStoryletSelected: (storyletName) => void; }; config: { storylets: readonly Readonly<{ conditions: readonly StoryletCondition<TConditionEngine>[]; name: string; passageId: TPassageId; priority?: number; }>[]; }; dependencies: []; engine: TConditionEngine; id: "storylet"; serializedState: { loadedCounts: Record<string, number>; selectedCounts: Record<string, number>; }; state: StoryletPluginState; }>