@drincs/pixi-vn
Version:
Pixi'VN is a npm package that provides various features for creating visual novels.
1 lines • 243 kB
Source Map (JSON)
{"version":3,"sources":["../../src/functions/CanvasUtility.ts","../../src/classes/canvas/CanvasContainer.ts","../../src/functions/TextureUtility.ts","../../src/decorators/EventDecorator.ts","../../src/classes/canvas/CanvasSprite.ts","../../src/classes/canvas/CanvasImage.ts","../../src/classes/canvas/CanvasText.ts","../../src/decorators/CanvasElementDecorator.ts","../../src/decorators/CharacterDecorator.ts","../../src/functions/StepLabelUtility.ts","../../src/classes/LabelAbstract.ts","../../src/classes/Label.ts","../../src/classes/CloseLabel.ts","../../src/types/CloseType.ts","../../src/classes/ChoiceMenuOption.ts","../../src/functions/FlagsUtility.ts","../../src/functions/DialogueUtility.ts","../../src/classes/ticker/TickerBase.ts","../../src/classes/ticker/FadeAlphaTicker.ts","../../src/functions/TickerUtility.ts","../../src/classes/ticker/MoveTicker.ts","../../src/classes/ticker/RotateTicker.ts","../../src/classes/ticker/ZoomTicker.ts","../../src/constants.ts","../../src/functions/ExportUtility.ts","../../src/functions/DiffUtility.ts","../../src/managers/StorageManager.ts","../../src/decorators/TickerDecorator.ts","../../src/functions/EasterEgg.ts","../../src/types/ticker/TagToRemoveAfterType.ts","../../src/managers/WindowManager.ts","../../src/managers/StepManager.ts","../../src/classes/StoredClassModel.ts","../../src/classes/CharacterBaseModel.ts","../../src/classes/DialogueBaseModel.ts","../../src/decorators/LabelDecorator.ts","../../src/labels/TestConstant.ts","../../src/labels/StepLabelTest.ts"],"names":["Container","Sprite","tagToRemoveAfter","diff","index","sha1","tag","ticker","CharacterBaseModel"],"mappings":"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","file":"StepLabelTest.mjs","sourcesContent":["import { Texture } from \"pixi.js\";\nimport { CanvasBase } from \"../classes/canvas\";\nimport { getCanvasElementInstanceById } from \"../decorators/CanvasElementDecorator\";\nimport { ICanvasBaseMemory, ITextureMemory } from \"../interface/canvas\";\n\n/**\n * Get the memory object of the PixiJS texture\n * @param texture PixiJS Texture object\n * @returns Memory object of the texture\n */\nexport function getTextureMemory(texture: Texture): ITextureMemory {\n let sourceTexture = texture.source\n let textureMemory: ITextureMemory = {\n image: sourceTexture.label\n }\n return textureMemory\n}\n\n/**\n * Export a Canvas element to a memory object\n * @param element Canvas element\n * @returns Memory object of the canvas\n */\nexport function exportCanvasElement<T extends CanvasBase<any>>(\n element: T,\n): ICanvasBaseMemory {\n return element.memory\n}\n\n/**\n * Import a Canvas element from a memory object\n * @param memory Memory object of the canvas\n * @returns Canvas element\n */\nexport function importCanvasElement<T extends CanvasBase<any>>(\n memory: ICanvasBaseMemory,\n): T {\n let element = getCanvasElementInstanceById<T>(memory.pixivnId)\n if (element) {\n element.memory = memory\n }\n else {\n throw new Error(\"[Pixi'VN] The element \" + memory.pixivnId + \" could not be created\")\n }\n\n return element\n}\n","import { Container, ContainerOptions } from \"pixi.js\";\nimport { exportCanvasElement, importCanvasElement } from \"../../functions/CanvasUtility\";\nimport ICanvasContainerMemory from \"../../interface/canvas/ICanvasContainerMemory\";\nimport CanvasBase from \"./CanvasBase\";\n\nexport const CANVAS_CONTAINER_ID = \"CanvasContainer\"\n\n/**\n * This class is a extension of the [PIXI.Container class](https://pixijs.com/8.x/examples/basic/container), it has the same properties and methods, \n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const container = new CanvasContainer();\n * GameWindowManager.addCanvasElement(container);\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * for (let i = 0; i < 25; i++)\n * {\n * const bunny = new CanvasSprite(texture);\n * bunny.x = (i % 5) * 40;\n * bunny.y = Math.floor(i / 5) * 40;\n * container.addChild(bunny);\n * }\n * ```\n */\nexport default class CanvasContainer extends Container implements CanvasBase<ICanvasContainerMemory> {\n constructor(options?: ContainerOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_CONTAINER_ID\n }\n pixivnId: string = CANVAS_CONTAINER_ID\n get memory(): ICanvasContainerMemory {\n let memory = getMemoryContainer(this)\n this.children.forEach(child => {\n memory.elements.push(exportCanvasElement(child as CanvasBase<any>))\n })\n return memory\n }\n set memory(value: ICanvasContainerMemory) {\n setMemoryContainer(this, value)\n value.elements.forEach(child => {\n this.addChild(importCanvasElement(child))\n })\n }\n}\n\nexport function getMemoryContainer<T extends Container>(element: T): ICanvasContainerMemory {\n let className = \"CanvasContainer\"\n if (element.hasOwnProperty(\"pixivnId\")) {\n className = (element as any).pixivnId\n }\n return {\n pixivnId: className,\n elements: [],\n\n width: element.width,\n height: element.height,\n\n isRenderGroup: element.isRenderGroup,\n blendMode: element.blendMode,\n tint: element.tint,\n alpha: element.alpha,\n angle: element.angle,\n renderable: element.renderable,\n rotation: element.rotation,\n scale: { x: element.scale.x, y: element.scale.y },\n pivot: { x: element.pivot.x, y: element.pivot.y },\n position: { x: element.position.x, y: element.position.y },\n skew: { x: element.skew.x, y: element.skew.y },\n visible: element.visible,\n x: element.x,\n y: element.y,\n boundsArea: element.boundsArea,\n\n cursor: element.cursor,\n eventMode: element.eventMode,\n interactive: element.interactive,\n interactiveChildren: element.interactiveChildren,\n hitArea: element.hitArea\n }\n}\n\nexport function setMemoryContainer<T extends Container>(element: T | Container, memory: ContainerOptions) {\n memory.isRenderGroup && (element.isRenderGroup = memory.isRenderGroup)\n memory.blendMode && (element.blendMode = memory.blendMode)\n memory.tint && (element.tint = memory.tint)\n memory.alpha && (element.alpha = memory.alpha)\n memory.angle && (element.angle = memory.angle)\n memory.renderable && (element.renderable = memory.renderable)\n memory.rotation && (element.rotation = memory.rotation)\n if (memory.scale) {\n if (typeof memory.scale === \"number\") {\n element.scale.set(memory.scale, memory.scale)\n }\n else {\n element.scale.set(memory.scale.x, memory.scale.y)\n }\n }\n if (memory.pivot) {\n if (typeof memory.pivot === \"number\") {\n element.pivot.set(memory.pivot, memory.pivot)\n }\n else {\n element.pivot.set(memory.pivot.x, memory.pivot.y)\n }\n }\n memory.position && (element.position.set(memory.position.x, memory.position.y))\n memory.skew && (element.skew.set(memory.skew.x, memory.skew.y))\n memory.visible && (element.visible = memory.visible)\n memory.x && (element.x = memory.x)\n memory.y && (element.y = memory.y)\n memory.boundsArea && (element.boundsArea = memory.boundsArea)\n\n memory.cursor && (element.cursor = memory.cursor)\n memory.eventMode && (element.eventMode = memory.eventMode)\n memory.interactive && (element.interactive = memory.interactive)\n memory.interactiveChildren && (element.interactiveChildren = memory.interactiveChildren)\n memory.hitArea && (element.hitArea = memory.hitArea)\n\n // end\n // width and height must be set after the scale\n memory.width && (element.width = memory.width)\n memory.height && (element.height = memory.height)\n}\n","import { Assets, ColorSource, FillGradient, FillPattern, StrokeStyle, TextStyle, TextStyleOptions, Texture } from 'pixi.js';\n\n/**\n * Get a texture from a url.\n * @param imageUrl is the url of the image.\n * @returns the texture of the image, or a text with the error.\n */\nexport async function getTexture(imageUrl: string): Promise<Texture | void> {\n if (Assets.cache.has(imageUrl)) {\n return Assets.get(imageUrl)\n }\n return Assets.load(imageUrl)\n .then((texture) => {\n if (!texture) {\n console.error(\"[Pixi'VN] Texture not found\", imageUrl)\n return\n }\n // if texture not is a Texture, then it is a TextureResource\n if (!(texture instanceof Texture)) {\n console.error(\"[Pixi'VN] File not is a image\", imageUrl)\n return\n }\n\n return texture\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error loading image\", e)\n return\n })\n}\n\nfunction getFillGradientFillPattern(prop: ColorSource | FillGradient | FillPattern | StrokeStyle, propName: keyof TextStyle) {\n if (!(prop instanceof Object)) {\n return prop\n }\n // TODO: FillGradient and FillPattern are not supported yet\n console.warn(`[Pixi'VN] CanvasText.style.${propName} is a FillGradient or FillPattern, this is not supported yet.`, prop)\n return undefined\n}\n\nexport function getTextStyle(style: TextStyle): TextStyleOptions {\n return {\n align: style.align,\n breakWords: style.breakWords,\n dropShadow: style.dropShadow,\n fill: getFillGradientFillPattern(style.stroke, \"fill\"),\n fontFamily: style.fontFamily,\n fontSize: style.fontSize,\n fontStyle: style.fontStyle,\n fontVariant: style.fontVariant,\n fontWeight: style.fontWeight,\n leading: style.leading,\n letterSpacing: style.letterSpacing,\n lineHeight: style.lineHeight,\n padding: style.padding,\n stroke: getFillGradientFillPattern(style.stroke, \"stroke\"),\n textBaseline: style.textBaseline,\n trim: style.trim,\n whiteSpace: style.whiteSpace,\n wordWrap: style.wordWrap,\n wordWrapWidth: style.wordWrapWidth,\n }\n}\n","import { CanvasEvent } from \"../classes\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CanvasEventNamesType } from \"../types\"\nimport { EventIdType } from \"../types/EventIdType\"\n\n/**\n * Canvas Event Register\n */\nexport const registeredEvents: { [name: EventIdType]: typeof CanvasEvent<CanvasEventNamesType> } = {}\n/**\n * Is a decorator that register a event in the game.\n * Is a required decorator for use the event in the game.\n * Thanks to this decoration the game has the possibility of updating the events to the latest modification and saving the game.\n * @param name is th identifier of the event, by default is the name of the class\n * @returns \n */\nexport default function eventDecorator(name?: EventIdType) {\n return function (target: typeof CanvasEvent<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredEvents[name]) {\n console.info(`[Pixi'VN] Event ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredEvents[name] = target\n }\n}\n\n/**\n * Get an event by the id.\n * @param eventId The id of the event.\n * @returns The event type.\n */\nexport function getEventTypeById<T = typeof CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n\n/**\n * Get an event instance by the id.\n * @param eventId The id of the event.\n * @returns The event instance.\n */\nexport function getEventInstanceById<T = CanvasEvent<CanvasBase<any>>>(eventId: EventIdType): T | undefined {\n try {\n let eventType = registeredEvents[eventId]\n if (!eventType) {\n console.error(`[Pixi'VN] Event ${eventId} not found`)\n return\n }\n let event = new eventType()\n return event as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Event ${eventId}`, e)\n return\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextureMemory } from \"../../functions/CanvasUtility\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasBaseMemory from \"../../interface/canvas/ICanvasBaseMemory\";\nimport ICanvasSpriteMemory, { ICanvasSpriteBaseMemory } from \"../../interface/canvas/ICanvasSpriteMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_SPRITE_ID = \"CanvasSprite\"\n\n/**\n * This class is a extension of the [PIXI.Sprite class](https://pixijs.com/8.x/examples/sprite/basic), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n *\n * sprite.anchor.set(0.5);\n * sprite.x = GameWindowManager.screen.width / 2;\n * sprite.y = GameWindowManager.screen.height / 2;\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\nexport default class CanvasSprite<Memory extends SpriteOptions & ICanvasBaseMemory = ICanvasSpriteMemory> extends Sprite implements CanvasBase<Memory | ICanvasSpriteMemory> {\n constructor(options?: SpriteOptions | Texture) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_SPRITE_ID\n }\n pixivnId: string = CANVAS_SPRITE_ID\n get memory(): Memory | ICanvasSpriteMemory {\n return getMemorySprite(this)\n }\n set memory(value: ICanvasSpriteMemory) {\n setMemorySprite(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasSprite> {\n * override fn(event: CanvasEventNamesType, sprite: CanvasSprite): void {\n * if (event === 'pointerdown') {\n * sprite.scale.x *= 1.25;\n * sprite.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * let sprite = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * await sprite.load()\n *\n * sprite.eventMode = 'static';\n * sprite.cursor = 'pointer';\n * sprite.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean): CanvasSprite<any> {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasSprite()\n mySprite.texture = sprite.texture\n return mySprite\n }\n}\n\nexport function getMemorySprite<T extends CanvasSprite<any>>(element: T | CanvasSprite<any>): ICanvasSpriteMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n textureImage: getTextureMemory((element as any).texture),\n anchor: { x: element.anchor.x, y: element.anchor.y },\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemorySprite<Memory extends ICanvasSpriteBaseMemory>(element: CanvasSprite<any>, memory: Memory) {\n setMemoryContainer(element, memory)\n getTexture(memory.textureImage.image).then((texture) => {\n if (texture) {\n element.texture = texture\n }\n })\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event, instance)\n }\n }\n}\n","import { Sprite, SpriteOptions, Texture, TextureSourceLike } from \"pixi.js\";\nimport { addImage, loadImage, showWithDissolveTransition } from \"../../functions\";\nimport { getTexture } from \"../../functions/TextureUtility\";\nimport ICanvasImageMemory from \"../../interface/canvas/ICanvasImageMemory\";\nimport CanvasSprite, { getMemorySprite, setMemorySprite } from \"./CanvasSprite\";\n\nexport const CANVAS_IMAGE_ID = \"CanvasImage\"\n\n/**\n * This class is a extension of the CanvasSprite class, it has the same properties and methods,\n * but it has some features that make texture management easier.\n * You need to use CanvasImage.load() to show the image in the canvas.\n * This class is used for functions like {@link addImage}, {@link loadImage} and {@link showWithDissolveTransition}.\n * @example\n * ```typescript\n * let alien = new CanvasImage({\n * anchor: { x: 0.5, y: 0.5 },\n * x: 100,\n * y: 100,\n * }, 'https://pixijs.com/assets/eggHead.png')\n * await alien.load()\n * GameWindowManager.addCanvasElement(\"alien\", alien)\n * ```\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * alien.x = 100\n * alien.y = 100\n * await alien.load()\n * ```\n */\nexport default class CanvasImage extends CanvasSprite<ICanvasImageMemory> {\n pixivnId: string = CANVAS_IMAGE_ID\n constructor(options?: SpriteOptions | Texture | undefined, imageLink?: string) {\n super(options)\n if (imageLink) {\n this.imageLink = imageLink\n }\n }\n override get memory(): ICanvasImageMemory {\n return {\n ...getMemorySprite(this),\n pixivnId: this.pixivnId,\n imageLink: this.imageLink,\n }\n }\n override set memory(memory: ICanvasImageMemory) {\n setMemorySprite(this, memory)\n this.imageLink = memory.imageLink\n }\n imageLink: string = \"\"\n static override from(source: Texture | TextureSourceLike, skipCache?: boolean) {\n let sprite = Sprite.from(source, skipCache)\n let mySprite = new CanvasImage()\n mySprite.texture = sprite.texture\n return mySprite\n }\n /** \n * Load the image from the link and set the texture of the sprite.\n * @param image The link of the image. If it is not set, it will use the imageLink property.\n * @returns A promise that resolves when the image is loaded.\n */\n async load(image?: string) {\n if (!image) {\n image = this.imageLink\n }\n return getTexture(this.imageLink)\n .then((texture) => {\n if (texture) {\n this.texture = texture\n }\n })\n .catch((e) => {\n console.error(\"[Pixi'VN] Error into CanvasImage.load()\", e)\n })\n }\n}\n","import { ContainerChild, ContainerEvents, EventEmitter, Text, TextOptions } from \"pixi.js\";\nimport { getEventInstanceById, getEventTypeById } from \"../../decorators/EventDecorator\";\nimport { getTextStyle } from \"../../functions/TextureUtility\";\nimport ICanvasTextMemory from \"../../interface/canvas/ICanvasTextTextMemory\";\nimport { CanvasEventNamesType } from \"../../types\";\nimport { EventIdType } from \"../../types/EventIdType\";\nimport CanvasEvent from \"../CanvasEvent\";\nimport CanvasBase from \"./CanvasBase\";\nimport { getMemoryContainer, setMemoryContainer } from \"./CanvasContainer\";\n\nexport const CANVAS_TEXT_ID = \"CanvasText\"\n\n/**\n * This class is a extension of the [PIXI.Text class](https://pixijs.com/8.x/examples/text/pixi-text), it has the same properties and methods,\n * but it has the ability to be saved and loaded by the Pixi'VN library.\n * @example\n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\nexport default class CanvasText extends Text implements CanvasBase<ICanvasTextMemory> {\n constructor(options?: TextOptions) {\n super(options)\n this.pixivnId = this.constructor.prototype.pixivnId || CANVAS_TEXT_ID\n }\n pixivnId: string = CANVAS_TEXT_ID\n get memory(): ICanvasTextMemory {\n return getMemoryText(this)\n }\n set memory(value: ICanvasTextMemory) {\n setMemoryText(this, value)\n }\n private _onEvents: { [name: CanvasEventNamesType]: EventIdType } = {}\n get onEvents() {\n return this._onEvents\n }\n /**\n * is same function as on(), but it keeps in memory the children.\n * @param event The event type, e.g., 'click', 'mousedown', 'mouseup', 'pointerdown', etc.\n * @param eventClass The class that extends CanvasEvent.\n * @returns \n * @example\n * ```typescript\n * \\@eventDecorator()\n * export class EventTest extends CanvasEvent<CanvasText> {\n * override fn(event: CanvasEventNamesType, text: CanvasText): void {\n * if (event === 'pointerdown') {\n * text.scale.x *= 1.25;\n * text.scale.y *= 1.25;\n * }\n * }\n * }\n * ```\n * \n * ```typescript\n * const text = new CanvasText();\n * text.text = \"Hello World\"\n *\n * text.eventMode = 'static';\n * text.cursor = 'pointer';\n * text.onEvent('pointerdown', EventTest);\n *\n * GameWindowManager.addCanvasElement(\"text\", text);\n * ```\n */\n onEvent<T extends CanvasEventNamesType, T2 extends typeof CanvasEvent<typeof this>>(event: T, eventClass: T2) {\n let id = eventClass.prototype.id\n let instance = getEventInstanceById(id)\n this._onEvents[event] = id\n if (instance) {\n super.on(event, () => {\n (instance as CanvasEvent<CanvasBase<any>>).fn(event, this)\n })\n }\n return this\n }\n /**\n * on() does not keep in memory the event class, use onEvent() instead\n * @deprecated\n * @private\n * @param event \n * @param fn \n * @param context \n */\n override on<T extends keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>(event: T, fn: (...args: EventEmitter.ArgumentMap<ContainerEvents<ContainerChild> & { [K: symbol]: any;[K: {} & string]: any; }>[Extract<T, keyof ContainerEvents<ContainerChild> | keyof { [K: symbol]: any;[K: {} & string]: any; }>]) => void, context?: any): this {\n return super.on(event, fn, context)\n }\n}\n\nexport function getMemoryText<T extends CanvasText>(element: T | CanvasText): ICanvasTextMemory {\n let temp = getMemoryContainer(element)\n return {\n ...temp,\n pixivnId: element.pixivnId,\n anchor: { x: element.anchor.x, y: element.anchor.y },\n text: element.text,\n resolution: element.resolution,\n style: getTextStyle(element.style),\n roundPixels: element.roundPixels,\n onEvents: element.onEvents,\n }\n}\n\nexport function setMemoryText(element: CanvasText, memory: ICanvasTextMemory) {\n setMemoryContainer(element, memory)\n if (memory.anchor) {\n if (typeof memory.anchor === \"number\") {\n element.anchor.set(memory.anchor, memory.anchor)\n }\n else {\n element.anchor.set(memory.anchor.x, memory.anchor.y)\n }\n }\n memory.text && (element.text = memory.text)\n memory.resolution && (element.resolution = memory.resolution)\n memory.style && (element.style = memory.style)\n memory.roundPixels && (element.roundPixels = memory.roundPixels)\n for (let event in memory.onEvents) {\n let id = memory.onEvents[event]\n let instance = getEventTypeById(id)\n if (instance) {\n element.onEvent(event as CanvasEventNamesType, instance)\n }\n }\n}\n","import { CanvasContainer, CanvasImage, CanvasSprite, CanvasText } from \"../classes/canvas\"\nimport CanvasBase from \"../classes/canvas/CanvasBase\"\nimport { CANVAS_CONTAINER_ID } from \"../classes/canvas/CanvasContainer\"\nimport { CANVAS_IMAGE_ID } from \"../classes/canvas/CanvasImage\"\nimport { CANVAS_SPRITE_ID } from \"../classes/canvas/CanvasSprite\"\nimport { CANVAS_TEXT_ID } from \"../classes/canvas/CanvasText\"\nimport { CanvasElementTagType } from \"../types/CanvasElementTagType\"\n\nexport const registeredCanvasElement: { [name: CanvasElementTagType]: typeof CanvasBase<any> } = {}\n/**\n * Is a decorator that register a canvas element in the game.\n * @param name Name of the canvas element, by default it will use the class name. If the name is already registered, it will show a warning\n * @returns \n */\nexport default function canvasElementDecorator(name?: CanvasElementTagType) {\n return function (target: typeof CanvasBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredCanvasElement[name]) {\n console.warn(`[Pixi'VN] CanvasElement ${name} already registered`)\n }\n target.prototype.pixivnId = name\n registeredCanvasElement[name] = target\n }\n}\n\nexport function getCanvasElementTypeById<T extends typeof CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n new eventType()\n return eventType as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n\nexport function getCanvasElementInstanceById<T extends CanvasBase<any>>(canvasId: CanvasElementTagType): T | undefined {\n try {\n let eventType = registeredCanvasElement[canvasId]\n if (!eventType) {\n if (canvasId === CANVAS_CONTAINER_ID) {\n eventType = CanvasContainer\n }\n else if (canvasId === CANVAS_IMAGE_ID) {\n eventType = CanvasImage\n }\n else if (canvasId === CANVAS_SPRITE_ID) {\n eventType = CanvasSprite\n }\n else if (canvasId === CANVAS_TEXT_ID) {\n eventType = CanvasText\n }\n }\n\n if (!eventType) {\n console.error(`[Pixi'VN] CanvasElement ${canvasId} not found`)\n return\n }\n let canvasElement = new eventType()\n return canvasElement as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting CanvasElement ${canvasId}`, e)\n return\n }\n}\n","import { CharacterBaseModel } from \"../classes\"\n\nexport const registeredCharacters: { [id: string]: CharacterBaseModel } = {}\n/**\n * Is a function that saves the character. If the character already exists, it will be overwritten.\n * @param character is the character to save\n * @returns \n * @example\n * ```typescript\n * export const liam = new CharacterBaseModel('liam', { name: 'Liam'});\n * export const alice = new CharacterBaseModel('alice', { name: 'Alice'});\n * saveCharacter([liam, alice]);\n * ```\n */\nexport function saveCharacter<T extends CharacterBaseModel = CharacterBaseModel>(character: T | T[]) {\n if (Array.isArray(character)) {\n character.forEach(c => saveCharacter(c))\n return\n }\n if (registeredCharacters[character.id]) {\n console.info(`[Pixi'VN] Character id ${character.id} already exists, it will be overwritten`)\n }\n registeredCharacters[character.id] = character\n}\n\n/**\n * is a function that returns the character by the id\n * @param id is the id of the character\n * @returns the character\n * @example\n * ```typescript\n * const liam = getCharacterById('liam');\n * ```\n */\nexport function getCharacterById<T extends CharacterBaseModel>(id: string): T | undefined {\n try {\n let character = registeredCharacters[id]\n if (!character) {\n console.error(`[Pixi'VN] Character ${id} not found`)\n return\n }\n return character as T\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Character ${id}`, e)\n return\n }\n}\n\n/**\n * is a function that returns all characters\n * @returns all characters\n * @example\n * ```typescript\n * const allCharacters = getAllCharacters();\n * ```\n */\nexport function getAllCharacters<T extends CharacterBaseModel>(): T[] {\n return Object.values(registeredCharacters) as T[]\n}\n","import sha1 from 'crypto-js/sha1';\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\";\nimport { StepLabelType } from \"../types/StepLabelType\";\n\n/**\n * Convert StepLabel to StepHistoryData\n * @param step\n * @returns\n */\nexport function getStepSha1(step: StepLabelType): StepHistoryDataType {\n let sha1String = sha1(step.toString().toLocaleLowerCase())\n return sha1String.toString()\n}\n/**\n * Check if two steps are equal\n * @param step1\n * @param step2\n * @returns\n */\nexport function checkIfStepsIsEqual(step1: StepHistoryDataType | StepLabelType<any>, step2: StepHistoryDataType | StepLabelType<any>): boolean {\n return step1 === step2\n}\n","import { getLabelById } from \"../decorators\"\nimport { checkIfStepsIsEqual } from \"../functions/StepLabelUtility\"\nimport { LabelProps } from \"../interface\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\"\nimport { StepLabelType } from \"../types/StepLabelType\"\n\nexport default abstract class LabelAbstract<TLabel, TProps extends {} = {}> {\n /**\n * @param id is the id of the label\n * @param props is the properties of the label\n */\n constructor(id: LabelIdType, props?: LabelProps<TLabel>) {\n this._id = id\n this._onStepStart = props?.onStepStart\n this._onLoadStep = props?.onLoadStep\n this._onStepEnd = props?.onStepEnd\n this._choiseIndex = props?.choiseIndex\n }\n\n private _id: LabelIdType\n /**\n * Get the id of the label. This variable is used in the system to get the label by id, {@link getLabelById}\n */\n public get id(): LabelIdType {\n return this._id\n }\n\n /**\n * Get the steps of the label.\n */\n public abstract get steps(): StepLabelType<TProps>[]\n\n /**\n * Get the corresponding steps number\n * @param externalSteps\n * @returns Numer of corresponding steps, for example, if externalSteps is [ABC, DEF, GHI] and the steps of the label is [ABC, GHT], the result will be 1\n */\n protected getCorrespondingStepsNumber(externalSteps: StepHistoryDataType[] | StepLabelType[]): number {\n if (externalSteps.length === 0) {\n return 0\n }\n let res: number = 0\n externalSteps.forEach((step, index) => {\n if (checkIfStepsIsEqual(step, this.steps[index])) {\n res = index\n }\n })\n return res\n }\n\n private _onStepStart: ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined\n /**\n * Is a function that will be executed in {@link Label#onStepStart} and when the user goes back to it or when the user laods a save file.\n * @returns Promise<void> or void\n */\n public get onStepStart(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined {\n return async (stepIndex: number, label: TLabel) => {\n if (this._onLoadStep) {\n await this._onLoadStep(stepIndex, label)\n }\n if (this._onStepStart) {\n return await this._onStepStart(stepIndex, label)\n }\n }\n }\n\n private _onLoadStep: ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined\n /**\n * Get the function that will be executed a old step is reloaded. A step is reloaded when the user goes back to it or when the user laods a save file.\n * @returns Promise<void> or void\n */\n public get onLoadStep(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined {\n return this._onLoadStep\n }\n\n private _onStepEnd: ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined\n /**\n * Is a function that will be executed when the step ends.\n * @returns Promise<void> or void\n */\n public get onStepEnd(): ((stepIndex: number, label: TLabel) => void | Promise<void>) | undefined {\n return this._onStepEnd\n }\n\n private _choiseIndex: number | undefined\n public get choiseIndex(): number | undefined {\n return this._choiseIndex\n }\n}\n","import { LabelProps } from \"../interface\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepLabelType } from \"../types/StepLabelType\"\nimport LabelAbstract from \"./LabelAbstract\"\n\n/**\n * Label is a class that contains a list of steps, which will be performed as the game continues.\n * For Ren'py this is the equivalent of a label.\n * @example\n * ```typescript\n * const START_LABEL_ID = \"StartLabel\"\n * \n * export const startLabel = newLabel(START_LABEL_ID,\n * [\n * (props) => {\n * GameWindowManager.clear()\n * setDialogue({ character: liam, text: \"Which test do you want to perform?\" })\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Events Test\", eventsTestLabel),\n * new ChoiceMenuOption(\"Show Image Test\", showImageTest),\n * ])\n * },\n * (props) => GameStepManager.jumpLabel(START_LABEL_ID, props),\n * ]\n * )\n * \n * GameStepManager.callLabel(StartLabel)\n * ```\n */\nexport default class Label<T extends {} = {}> extends LabelAbstract<Label<T>, T> {\n /**\n * @param id is the id of the label\n * @param steps is the list of steps that the label will perform\n * @param props is the properties of the label\n */\n constructor(id: LabelIdType, steps: StepLabelType<T>[] | (() => StepLabelType<T>[]), props?: LabelProps<Label<T>>) {\n super(id, props)\n this._steps = steps\n }\n\n private _steps: StepLabelType<T>[] | (() => StepLabelType<T>[])\n /**\n * Get the steps of the label.\n */\n public get steps(): StepLabelType<T>[] {\n if (typeof this._steps === \"function\") {\n return this._steps()\n }\n return this._steps\n }\n}\n","import Label from \"./Label\"\n\nexport const CLOSE_LABEL_ID = \"__close-label-id__\"\n\n/**\n * CloseLabel is a label used for closing the menu.\n */\nexport default function newCloseLabel<T extends {} = {}>(choiseIndex?: number) {\n return new Label<T>(CLOSE_LABEL_ID, [], {\n choiseIndex: choiseIndex,\n })\n}\n","export type CloseType = \"close\"\nexport const Close: CloseType = \"close\"","import { getLabelById } from \"../decorators\"\nimport { Close, CloseType, LabelRunModeType, StorageObjectType } from \"../types\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport newCloseLabel from \"./CloseLabel\"\nimport Label from \"./Label\"\n\n/**\n * ChoiceMenuOption is a class that contains a Label and a text that will be displayed in the menu.\n * @example\n * ```typescript\n * new ChoiceMenuOption(\"Hello\", HelloLabel, {})\n * ```\n */\nexport default class ChoiceMenuOption<T extends StorageObjectType> {\n /**\n * Text to be displayed in the menu\n */\n text: string\n private _label: Label<T> | LabelIdType\n /**\n * Label to be opened when the option is selected\n */\n get label(): Label<T> {\n let label = this._label\n if (typeof label === \"string\") {\n let res = getLabelById(label)\n if (res) {\n label = res\n }\n else {\n console.error(`Label ${label} not found, so it will be closed`)\n label = newCloseLabel()\n }\n }\n return label\n }\n /**\n * Type of the label to be opened\n */\n type: LabelRunModeType\n /**\n * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.\n * @example\n * ```tsx\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Hello\", helloLabel, { disabled: true }),\n * ])\n * return <List>\n * {getChoiceMenuOptions()?.map((item, index) => {\n * return (\n * <ChoiceButton\n * disabled={item.props.disabled}\n * onClick={() => {\n * afterSelectChoice(item)\n * }}\n * >\n * {item.text}\n * </ChoiceButton>\n * )\n * })}\n * </List>\n * ```\n */\n props: StorageObjectType = {}\n /**\n * @param text Text to be displayed in the menu\n * @param label Label to be opened when the option is selected or the id of the label\n * @param props Properties to be passed to the label and olther parameters that you can use when get all the choice menu options. It be converted to a JSON string, so it cannot contain functions or classes.\n * @param type Type of the label to be opened. @default \"call\"\n */\n constructor(text: string, label: Label<T> | LabelIdType, props: T, type: LabelRunModeType = \"call\") {\n this.text = text\n this._label = label\n this.type = type\n if (props) {\n this.props = props\n }\n }\n}\n\n/**\n * ChoiceMenuOptionClose is a class that contains a text that will be displayed in the menu.\n * It is used to close the menu.\n * @example\n * ```typescript\n * new ChoiceMenuOptionClose(\"Return\")\n * ```\n */\nexport class ChoiceMenuOptionClose<T extends {} = {}> {\n /**\n * Label to be opened when the option is selected\n */\n label: Label<T> = newCloseLabel()\n /**\n * Text to be displayed in the menu\n */\n text: string\n /**\n * If true, the current label will be closed\n */\n closeCurrentLabel: boolean\n /**\n * Type of the label to be opened\n */\n type: CloseType = Close\n /**\n * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.\n * @example\n * ```tsx\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Hello\", helloLabel, { disabled: true }),\n * ])\n * return <List>\n * {getChoiceMenuOptions()?.map((item, index) => {\n * return (\n * <ChoiceButton\n * disabled={item.props.disabled}\n * onClick={() => {\n * afterSelectChoice(item)\n * }}\n * >\n * {item.text}\n * </ChoiceButton>\n * )\n * })}\n * </List>\n * ```\n */\n props: StorageObjectType = {}\n /**\n * @param text Text to be displayed in the menu\n * @param closeCurrentLabel If true, the current label will be closed. @default false\n */\n constructor(text: string, closeCurrentLabel: boolean = false) {\n this.text = text\n this.closeCurrentLabel = closeCurrentLabel\n }\n}\n\nexport type IStoratedChoiceMenuOption = {\n /**\n * Text to be displayed in the menu\n */\n text: string\n /**\n * Label Id to be opened when the option is selected\n */\n label: LabelIdType\n /**\n * Type of the label to be opened\n */\n type: LabelRunModeType\n /**\n * Properties to be passed to the label and olther parameters that you can use when get all the choice menu options.\n * @example\n * ```tsx\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Hello\", helloLabel, { disabled: true }),\n * ])\n * return <List>\n * {getChoiceMenuOptions()?.map((item, index) => {\n * return (\n * <ChoiceButton\n * disabled={item.props.disabled}\n * onClick={() => {\n * afterSelectChoice(item)\n * }}\n * >\n * {item.text}\n * </ChoiceButton>\n * )\n * })}\n * </List>\n * ```\n */\n props: StorageObjectType\n} | {\n /**\n * Text to be displayed in the menu\n */\n text: string\n /**\n * Type of the label to be opened\n */\n type: CloseType\n /**\n * If true, the current label will be closed\n */\n closeCurrentLabel: boolean\n}\n\n","import { GameStorageManager } from \"../managers\"\n\n/**\n * Set a flag to true or false. \n * @param name The name of the flag\n * @param value The value of the flag.\n */\nexport function setFlag(name: string, value: boolean) {\n let flags = GameStorageManager.getVariable<string[]>(GameStorageManager.keysSystem.FLAGS_CATEGORY_KEY) || []\n if (value) {\n if (!flags.includes(name)) {\n flags.push(name)\n }\n } else {\n let index = flags.indexOf(name)\n if (index > -1) {\n flags.splice(index, 1)\n }\n }\n GameStorageManager.setVariable(GameStorageManager.keysSystem.FLAGS_CATEGORY_KEY, flags)\n}\n\n/**\n * Get the value of a flag\n * @param name The name of the flag\n * @returns The value of the flag\n */\nexport function getFlag(name: string): boolean {\n let flags = GameStorageManager.getVariable<string[]>(GameStorageManager.keysSystem.FLAGS_CATEGORY_KEY) || []\n return flags.includes(name)\n}\n","import { CharacterBaseModel, DialogueBaseModel, Label } from \"../classes\";\nimport ChoiceMenuOption, { ChoiceMenuOptionClose, IStoratedChoiceMenuOption } from \"../classes/ChoiceMenuOption\";\nimport newCloseLabel from \"../classes/CloseLabel\";\nimport { DialogueData } from \"../classes/DialogueBaseModel\";\nimport { getLabelById } from \"../decorators\";\nimport { DialogueHistory } from \"../interface\";\nimport { GameStepManager, GameStorageManager } from \"../managers\";\nimport { Close, HistoryChoiceMenuOption } from \"../types\";\nimport { ChoiceMenuOptionsType } from \"../types/ChoiceMenuOptionsType\";\nimport { getFlag, setFlag } from \"./FlagsUtility\";\n\n/**\n * Set the dialogue to be shown in the game\n * @param text Text of the dialogue\n * @example\n * ```typescript\n * setDialogue(\"Hello World\")\n * setDialogue({\n * character: \"character\",\n * text: \"Hello World\"\n * })\n * setDialogue(new DialogueBaseModel(\"Hello World\", character))\n * ```\n */\nexport function setDialogue<TCharacter extends CharacterBaseModel = CharacterBaseModel, TDialogue extends DialogueBaseModel = DialogueBaseModel>(props: {\n character: string | TCharacter,\n text: string | string[],\n} | string | string[] | TDialogue): void {\n let text = ''\n let character: string | undefined = undefined\n let dialogue: TDialogue | DialogueBaseModel\n if (typeof props === 'string') {\n text = props\n dialogue = new DialogueBaseModel(text, character)\n }\n else if (Array.isArray(props)) {\n text = props.join()\n dialogue = new DialogueBaseModel(text, character)\n }\n else if (!(props instanceof DialogueBaseModel)) {\n if (Array.isArray(props.text)) {\n text = props.text.join()\n }\n else {\n text = props.text\n }\n if (props.character) {\n if (typeof props.character === 'string') {\n character = props.character\n }\n else {\n character = props.character.id\n }\n }\n dialogue = new DialogueBaseModel(text, character)\n }\n else {\n dialogue = props\n }\n\n if (getFlag(GameStorageManager.keysSystem.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY)) {\n let glueDialogue = getDialogue<TDialogue>()\n if (glueDialogue) {\n dialogue.text = `${glueDialogue.text}${dialogue.text}`\n }\n setFlag(GameStorageManager.keysSystem.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY, false)\n }\n\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY, dialogue as DialogueData)\n GameStorageManager.setVariable(GameStorageManager.keysSystem.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY, GameStepManager.lastStepIndex)\n}\n\n/**\n * Get the dialogue to be shown in the game\n * @returns Dialogue to be shown in the game\n */\nexport function getDialogue<T extends DialogueBaseModel = DialogueBaseModel>(): T | undefined {\n return GameStorageManager.getVariable<DialogueData>(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY) as T\n}\n\n/**\n * Clear the dialogue to be shown in the game\n */\nexport function clearDialogue(): void {\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_DIALOGUE_MEMORY_KEY, undefined)\n}\n\n/**\n * Set the options to be shown in the game\n * @param options Options to be shown in the game\n * @example\n * ```typescript\n * setChoiceMenuOptions([\n * new ChoiceMenuOption(\"Events Test\", EventsTestLabel, {}),\n * new ChoiceMenuOption(\"Show Image Test\", ShowImageTest, { image: \"imageId\" }, \"call\"),\n * new ChoiceMenuOption(\"Ticker Test\", TickerTestLabel, {}),\n * new ChoiceMenuOption(\"Tinting Test\", TintingTestLabel, {}, \"jump\"),\n * new ChoiceMenuOption(\"Base Canvas Element Test\", BaseCanvasElementTestLabel, {})\n * ])\n * ```\n */\nexport function setChoiceMenuOptions(options: ChoiceMenuOptionsType<any>): void {\n let value: IStoratedChoiceMenuOption[] = options.map((option) => {\n if (option instanceof ChoiceMenuOptionClose) {\n return {\n text: option.text,\n type: Close,\n closeCurrentLabel: option.closeCurrentLabel,\n }\n }\n return {\n ...option,\n label: option.label.id,\n }\n })\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY, value)\n GameStorageManager.setVariable(GameStorageManager.keysSystem.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY, GameStepManager.lastStepIndex)\n}\n\n/**\n * Get the options to be shown in the game\n * @returns Options to be shown in the game\n */\nexport function getChoiceMenuOptions<TChoice extends ChoiceMenuOptionsType = ChoiceMenuOptionsType<{ [key: string | number | symbol]: any }>>(): TChoice | undefined {\n let d = GameStorageManager.getVariable<IStoratedChoiceMenuOption[]>(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY)\n if (d) {\n let options: ChoiceMenuOptionsType = []\n d.forEach((option, index) => {\n if (option.type === Close) {\n let itemLabel = newCloseLabel(index)\n let choice = new ChoiceMenuOptionClose(option.text, option.closeCurrentLabel)\n choice.label = itemLabel\n options.push(choice)\n return\n }\n let label = getLabelById(option.label)\n if (label) {\n let itemLabel = new Label(label.id, label.steps, {\n onStepStart: label.onStepStart,\n choiseIndex: index\n })\n options.push(new ChoiceMenuOption(option.text, itemLabel, option.props, option.type))\n }\n })\n return options as TChoice\n }\n return undefined\n}\n\n/**\n * Clear the options to be shown in the game\n */\nexport function clearChoiceMenuOptions(): void {\n GameStorageManager.setVariable(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY, undefined)\n}\n\n/**\n * Get the history of the dialogues\n * @returns the history of the dialogues\n */\nexport function getDialogueHistory<T extends DialogueBaseModel = DialogueBaseModel>(): DialogueHistory<T>[] {\n let list: DialogueHistory<T>[] = []\n GameStepManager.stepsHistory.forEach((step) => {\n let dialoge = step.dialoge\n let requiredChoices = step.choices\n if (\n list.length > 0 &&\n list[list.length - 1].choices &&\n !list[list.length - 1].playerMadeChoice &&\n step.currentLabel\n ) {\n let oldChoices = list[list.length - 1].choices\n if (oldChoices) {\n let choiceMade = false\n if (step.choiceIndexMade !== undefined && oldChoices.length > step.choiceIndexMade) {\n oldChoices[step.choiceIndexMade].isResponse = true\n choiceMade = true\n }\n list[list.length - 1].playerMadeChoice = choiceMade\n list[list.length - 1].choices = oldChoices\n }\n }\n if (dialoge || requiredChoices) {\n let choices: HistoryChoiceMenuOption[] | undefined = requiredChoices?.map((choice) => {\n return {\n text: choice.text,\n type: choice.type,\n isResponse: false\n }\n })\n list.push({\n dialoge: dialoge as T,\n playerMadeChoice: false,\n choices: choices,\n stepIndex: step.index\n })\n }\n })\n return list\n}\n","import { Ticker, UPDATE_PRIORITY } from \"pixi.js\"\nimport { tickerDecorator } from \"../../decorators\"\nimport { geTickerInstanceById } from \"../../decorators/TickerDecorator\"\nimport ITicker from \"../../interface/ITicker\"\nimport { GameWindowManager } from \"../../managers\"\nimport { StorageElementType } from \"../../types/StorageElementType\"\nimport { TickerIdType } from \"../../types/TickerIdType\"\n\nexport type TickerArgsType = { [id: string]: StorageElementType } | {\n tagToRemoveAfter?: string[] | string,\n [id: string]: StorageElementType\n}[]\n\n/**\n * A class is used to create a ticker element to add into a Pixi Application.\n * You can use GameWindowManager.addTicker() to add this element into the application.\n * This class should be extended and the fn method should be overridden.\n * You must use the {@link tickerDecorator} to register the ticker in the game.\n * In Ren'Py is a transform.\n * @example\n * ```typescript\n * \\@tickerDecorator() // this is equivalent to tickerDecorator(\"RotateTicker\")\n * export class RotateTicker extends TickerBase<{ speed?: number }> {\n * override fn(\n * t: Ticker, // the ticker that is calling this method\n * args: { // the arguments that you passed when you added the ticker\n * speed?: number,\n * },\n * tags: string[], // the tags of the canvas elements that are connected to this ticker\n * tickerId: string, // the id of the ticker. You can use this to get the ticker from the GameWindowManager.currentTickers\n * ): void {\n * let speed = args.speed === undefined ? 0.1 : args.speed\n * tags.forEach((tag) => {\n * let element = GameWindowManager.getCanvasElement(tag)\n * if (element && element instanceof Container) {\n * if (clockwise)\n * element.rotation += speed * t.deltaTime\n * else\n * element.rotation -= speed * t.deltaTime\n * }\n * })\n * }\n * }\n * ```\n */\nexport default class TickerBase<TArgs extends TickerArgsType> implements ITicker<TArgs> {\n /**\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker in seconds. If is undefined, the step will end only when the animation is finished (if the animation doesn't have a goal to reach then it won't finish). @default undefined\n * @param priority The priority of the ticker. @default UPDATE_PRIORITY.NORMAL\n */\n constructor(args: TArgs, duration?: number, priority?: UPDATE_PRIORITY) {\n this.args = args\n this.duration = duration\n this.priority = priority\n this.id = this.constructor.prototype.id\n }\n /**\n * Get the id of the ticker. This variable is used in the system to get the ticker by id, {@link geTickerInstanceById}\n */\n id: TickerIdType = 'ticker_id_not_set'\n args: TArgs\n duration?: number\n priority?: UPDATE_PRIORITY\n /**\n * The method that will be called every frame.\n * This method should be overridden and you can use GameWindowManager.addCanvasElement() to get the canvas element of the canvas, and edit them.\n * @param _ticker The ticker that is calling this method\n * @param _args The arguments that you passed when you added the ticker\n * @param _tags The tags of the canvas elements that are connected to this ticker\n * @param _tickerId The id of the ticker. You can use this to get the ticker from the {@link GameWindowManager.currentTickers}\n */\n fn(_ticker: Ticker, _args: TArgs, _tags: string | string[], _tickerId: string): void { throw new Error(\"[Pixi'VN] The method TickerBase.fn() must be overridden\") }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { GameWindowManager } from \"../../managers\";\nimport { FadeAlphaTickerProps } from \"../../types/ticker/FadeAlphaTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that fades the alpha of the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let bunny = addImage(\"bunny1\", \"https://pixijs.com/assets/eggHead.png\")\n * await bunny.load()\n * GameWindowManager.addCanvasElement(\"bunny\", bunny);\n * // ...\n * const ticker = new FadeAlphaTicker({\n * duration: 4, // 4 seconds\n * type: \"hide\",\n * }),\n * GameWindowManager.addTicker(\"bunny\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class FadeAlphaTicker extends TickerBase<FadeAlphaTickerProps> {\n override fn(\n ticker: Ticker,\n args: FadeAlphaTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let type = args.type === undefined ? \"hide\" : args.type\n let duration = args.duration === undefined ? 1 : args.duration\n let speed = 1 / (duration * 60)\n let limit = args.limit === undefined ? type === \"hide\" ? 0 : 1 : args.limit\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (type === \"hide\" && limit < 0) {\n limit = 0\n }\n if (type === \"show\" && limit > 1) {\n limit = 1\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (type === \"show\" && element.alpha < limit) {\n element.alpha += speed * ticker.deltaTime\n }\n else if (type === \"hide\" && element.alpha > limit) {\n element.alpha -= speed * ticker.deltaTime\n }\n if (type === \"show\" && element.alpha >= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n else if (type === \"hide\" && element.alpha <= limit) {\n element.alpha = limit\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n }\n}\n","import { ITickerProgrationExponential, ITickerProgrationLinear, TickerProgrationType } from \"../interface/TickerProgrationType\";\n\n/**\n * This function updates the progression of the ticker.\n * For example, if the speed of the ticker is 0.1 and the progression is 0.01, then the speed will be 0.11.\n * @param args The arguments that are passed to the ticker\n * @param propertyName The property name that will be updated \n * @param progression The progression of the ticker\n * @param valueConvert The function that converts the amount and limit of progression\n * @returns \n */\nexport function updateTickerProgression<T extends {}>(args: T, propertyName: keyof T, progression: TickerProgrationType, valueConvert?: (value: number) => number) {\n let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit\n if (args[propertyName] === undefined\n || !progression\n || args[propertyName] === limit\n ) {\n return\n }\n if (typeof args[propertyName] === \"number\") {\n if (progression.type === \"linear\") {\n (args as any)[propertyName] = getLinearProgression(args[propertyName], progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName] = getExponentialProgression(args[propertyName], progression)\n }\n }\n // args[propertyName] is { x: number, y: number }\n else if (\n args[propertyName] !== undefined &&\n typeof args[propertyName] === \"object\" &&\n (args as any)[propertyName].haveOwnProperty(\"x\") &&\n (args as any)[propertyName].haveOwnProperty(\"y\") &&\n typeof (args as any)[propertyName].x === \"number\" &&\n typeof (args as any)[propertyName].y === \"number\"\n ) {\n if (progression.type === \"linear\") {\n (args as any)[propertyName].x = getLinearProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getLinearProgression((args as any)[propertyName].y, progression)\n }\n else if (progression.type === \"exponential\") {\n (args as any)[propertyName].x = getExponentialProgression((args as any)[propertyName].x, progression);\n (args as any)[propertyName].y = getExponentialProgression((args as any)[propertyName].y, progression)\n }\n }\n}\n\nfunction getLinearProgression(number: number, progression: ITickerProgrationLinear, valueConvert?: (value: number) => number): number {\n let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit\n let amt = valueConvert ? valueConvert(progression.amt) : progression.amt\n if (limit !== undefined) {\n if (number > limit && amt > 0) {\n return limit\n }\n else if (number < limit && amt < 0) {\n return limit\n }\n }\n return number + amt\n}\n\nfunction getExponentialProgression(number: number, progression: ITickerProgrationExponential, valueConvert?: (value: number) => number): number {\n let limit = valueConvert && progression.limit ? valueConvert(progression.limit) : progression.limit\n if (limit !== undefined) {\n if (number > limit && progression.percentage > 0) {\n return limit\n }\n else if (number < limit && progression.percentage < 0) {\n return limit\n }\n }\n return number + number * progression.percentage\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { MoveTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that moves the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new MoveTicker({\n * speed: 0.1,\n * destination: { x: 100, y: 100 },\n * }),\n * ```\n */\n@tickerDecorator()\nexport default class MoveTicker extends TickerBase<MoveTickerProps> {\n override fn(\n ticker: Ticker,\n args: MoveTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 1\n let ySpeed = 1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = this.speedConvert(args.speed)\n ySpeed = this.speedConvert(args.speed)\n }\n else {\n xSpeed = this.speedConvert(args.speed.x)\n ySpeed = this.speedConvert(args.speed.y)\n }\n }\n let destination = args.destination\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n let xDistance = (destination.x - element.x) > 0 ? 1 : -1\n if (xDistance != 0) {\n element.x += xDistance * xSpeed * ticker.deltaTime\n let newDistance = destination.x - element.x\n if (xDistance < 0 && newDistance > 0 ||\n xDistance > 0 && newDistance < 0\n ) {\n element.x = destination.x\n }\n }\n let yDistance = (destination.y - element.y) > 0 ? 1 : -1\n if (yDistance != 0) {\n element.y += yDistance * ySpeed * ticker.deltaTime\n let newDistance = destination.y - element.y\n if (yDistance < 0 && newDistance > 0 ||\n yDistance > 0 && newDistance < 0\n ) {\n element.y = destination.y\n }\n }\n if (element.x == destination.x && element.y == destination.y) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression, this.speedConvert)\n }\n private speedConvert(speed: number): number {\n return speed / 6\n }\n}\n","import { Container, Sprite, Ticker } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { RotateTickerProps } from \"../../types/ticker/RotateTickerProps\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that rotates the canvas element of the canvas. For centre rotation, set the anchor of the canvas element to 0.5.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new RotateTicker({\n * speed: 0.1,\n * clockwise: true,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class RotateTicker extends TickerBase<RotateTickerProps> {\n override fn(\n ticker: Ticker,\n args: RotateTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let speed = this.speedConvert(args.speed === undefined ? 1 : args.speed)\n let clockwise = args.clockwise === undefined ? true : args.clockwise\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (clockwise)\n element.rotation += speed * ticker.deltaTime\n else\n element.rotation -= speed * ticker.deltaTime\n if (speed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression, this.speedConvert)\n }\n private speedConvert(speed: number): number {\n return speed / 60\n }\n}\n","import { Container, ContainerChild, Sprite, Ticker, UPDATE_PRIORITY } from \"pixi.js\";\nimport { tickerDecorator } from \"../../decorators\";\nimport { updateTickerProgression } from \"../../functions/TickerUtility\";\nimport { GameWindowManager } from \"../../managers\";\nimport { ZoomTickerProps } from \"../../types/ticker\";\nimport TickerBase from \"./TickerBase\";\n\n/**\n * A ticker that zooms the canvas element of the canvas.\n * This ticker can be used on all canvas elements that extend the {@link Container} class.\n * @example\n * ```typescript\n * let alien = addImage(\"alien\", 'https://pixijs.com/assets/eggHead.png')\n * alien.anchor.set(0.5);\n * GameWindowManager.addCanvasElement(\"alien\", alien);\n * const ticker = new ZoomTicker({\n * speed: 0.1,\n * }),\n * GameWindowManager.addTicker(\"alien\", ticker)\n * ```\n */\n@tickerDecorator()\nexport default class ZoomTicker extends TickerBase<ZoomTickerProps> {\n override fn(\n ticker: Ticker,\n args: ZoomTickerProps,\n tags: string[],\n tickerId: string\n ): void {\n let xSpeed = 0.1\n let ySpeed = 0.1\n if (args.speed) {\n if (typeof args.speed === \"number\") {\n xSpeed = this.speedConvert(args.speed)\n ySpeed = this.speedConvert(args.speed)\n }\n else {\n xSpeed = this.speedConvert(args.speed.x)\n ySpeed = this.speedConvert(args.speed.y)\n }\n }\n let tagToRemoveAfter = args.tagToRemoveAfter || []\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n let type = args.type || \"zoom\"\n let xLimit = type === \"zoom\" ? Infinity : 0\n let yLimit = type === \"zoom\" ? Infinity : 0\n if (args.limit) {\n if (typeof args.limit === \"number\") {\n xLimit = args.limit\n yLimit = args.limit\n }\n else {\n xLimit = args.limit.x\n yLimit = args.limit.y\n }\n }\n tags\n .filter((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (args.startOnlyIfHaveTexture) {\n if (element && element instanceof Sprite && element.texture?.label == \"EMPTY\") {\n return false\n }\n }\n return true\n })\n .forEach((tag) => {\n let element = GameWindowManager.getCanvasElement(tag)\n if (element && element instanceof Container) {\n if (\n type === \"zoom\"\n && (element.scale.x < xLimit || element.scale.y < yLimit)\n ) {\n element.scale.x += xSpeed * ticker.deltaTime\n element.scale.y += ySpeed * ticker.deltaTime\n }\n else if (\n type === \"unzoom\"\n && (element.scale.x > xLimit || element.scale.y > yLimit)\n ) {\n element.scale.x -= xSpeed * ticker.deltaTime\n element.scale.y -= ySpeed * ticker.deltaTime\n }\n if (type === \"zoom\") {\n if (element.scale.x > xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y > yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x >= xLimit && element.scale.y >= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n else if (type === \"unzoom\") {\n if (element.scale.x < xLimit) {\n element.scale.x = xLimit\n }\n if (element.scale.y < yLimit) {\n element.scale.y = yLimit\n }\n if (element.scale.x <= xLimit && element.scale.y <= yLimit) {\n element.scale.x = xLimit\n element.scale.y = yLimit\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n if (xSpeed < 0.00001 && ySpeed < 0.00001 && !(args.speedProgression && args.speedProgression.type == \"linear\" && args.speedProgression.amt != 0)) {\n this.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n }\n })\n if (args.speedProgression)\n updateTickerProgression(args, \"speed\", args.speedProgression, this.speedConvert)\n }\n private speedConvert(speed: number): number {\n return speed / 60\n }\n\n onEndOfTicker<T extends Container = Container>(\n tag: string,\n tickerId: string,\n _element: T,\n tagToRemoveAfter: string[] | string,\n ): void {\n GameWindowManager.onEndOfTicker(tag, this, tagToRemoveAfter, tickerId)\n }\n}\n\n\nexport class ZoomInOutTicker extends ZoomTicker {\n constructor(props: ZoomTickerProps, duration?: number, priority?: UPDATE_PRIORITY) {\n super(props, duration, priority)\n }\n override onEndOfTicker<T extends Container = Container<ContainerChild>>(tag: string, tickerId: string, element: T, tagToRemoveAfter: string[] | string): void {\n if (element.children.length > 0) {\n let elementChild = element.children[0]\n GameWindowManager.addCanvasElement(tag, elementChild as any)\n }\n super.onEndOfTicker(tag, tickerId, element, tagToRemoveAfter)\n }\n}\n","import { PauseType, RepeatType } from \"./types\"\n\nexport const PIXIVN_VERSION = '0.6.14'\nexport const Repeat: RepeatType = \"repeat\"\n/**\n * Pause the tickers for a duration.\n * @param duration Duration in seconds\n * @returns The pause object\n */\nexport function Pause(duration: number): PauseType {\n return {\n type: \"pause\",\n duration: duration,\n }\n}\n","/**\n * This function is used to create a deep copy of the element\n * @param element The element to be copied\n * @returns The copied element\n */\nexport function createExportableElement<T>(element: T): T {\n try {\n let elementString = JSON.stringify(element)\n return JSON.parse(elementString)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error creating exportable element\", e)\n throw new Error(\"[Pixi'VN] Error creating exportable element\")\n }\n}\n","import deepDiff from \"deep-diff\"\nimport { createExportableElement } from \"./ExportUtility\"\n\nexport function restoreDeepDiffChanges<T extends object = object>(data: T, differences: deepDiff.Diff<T, T>[]): T {\n let result = createExportableElement(data)\n differences.forEach((diff) => {\n let dataToEdit: any = result\n if (diff.path && diff.path.length > 0) {\n diff.path.forEach((path, index) => {\n if (diff.path && index === diff.path.length - 1) {\n if (diff.kind === \"E\" || diff.kind === \"D\") {\n dataToEdit[path] = diff.lhs\n }\n else if (diff.kind === \"N\") {\n // if path is a number, dataToEdit is an array\n if (Number.isInteger(path)) {\n // remove index from array\n if (Array.isArray(dataToEdit)) {\n dataToEdit.splice(path, 1)\n }\n }\n // if path is a string, dataToEdit is an object\n else if (typeof path === \"string\") {\n // remove key from object\n delete dataToEdit[path]\n }\n }\n else if (diff.kind === \"A\") {\n let index = diff.index\n if (diff.item.kind === \"N\") {\n // remove index from array\n (dataToEdit[path] as any[]).splice(index, 1)\n }\n else if (diff.item.kind === \"E\" || diff.item.kind === \"D\") {\n // edit index in array\n (dataToEdit[path] as any[])[index] = diff.item.lhs\n }\n else if (diff.item.kind === \"A\") {\n console.warn(\"[Pixi'VN] Nested array found, skipping diff\", diff)\n }\n else {\n console.warn(\"[Pixi'VN] No array found, skipping diff\", diff)\n }\n }\n }\n else {\n dataToEdit = dataToEdit[path]\n }\n })\n }\n else {\n console.warn(\"[Pixi'VN] No path found, skipping diff\", diff)\n }\n })\n return result\n}","import { createExportableElement } from \"../functions/ExportUtility\"\nimport { ExportedStorage } from \"../interface/export\"\nimport { StorageElementType } from \"../types/StorageElementType\"\n\nexport default class GameStorageManager {\n private static storage: { [key: string]: StorageElementType } = {}\n private constructor() { }\n public static get keysSystem() {\n return {\n /**\n * The key of the current dialogue memory\n */\n CURRENT_DIALOGUE_MEMORY_KEY: \"___current_dialogue_memory___\",\n /**\n * The key of the last dialogue added in the step memory\n */\n LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY: \"___last_dialogue_added_in_step_memory___\",\n /**\n * The key of the current menu options memory\n */\n CURRENT_MENU_OPTIONS_MEMORY_KEY: \"___current_menu_options_memory___\",\n /**\n * The key of the last menu options added in the step memory\n */\n LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY: \"___last_menu_options_added_in_step_memory___\",\n /**\n * The key of the characters memory\n */\n CHARACTER_CATEGORY_KEY: \"___character___\",\n /**\n * The key of the flags memory\n */\n FLAGS_CATEGORY_KEY: \"___flags___\",\n /**\n * This variable is used to add the next dialog text into the current dialog memory.\n * This value was added to introduce Ink Glue functionality https://github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md#glue\n */\n ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY: \"___glue___\",\n }\n }\n /**\n * Set a variable in the storage\n * @param key The key of the variable\n * @param value The value of the variable. If undefined, the variable will be removed\n * @returns\n */\n public static setVariable(key: string, value: StorageElementType) {\n key = key.toLowerCase()\n if (value === undefined || value === null) {\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n return\n }\n GameStorageManager.storage[key] = value\n }\n /**\n * Get a variable from the storage\n * @param key The key of the variable\n * @returns The value of the variable. If the variable does not exist, it will return undefined\n */\n public static getVariable<T extends StorageElementType>(key: string): T | undefined {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n return GameStorageManager.storage[key] as T\n }\n return undefined\n }\n /**\n * Remove a variable from the storage\n * @param key The key of the variable\n * @returns\n */\n public static removeVariable(key: string) {\n key = key.toLowerCase()\n if (GameStorageManager.storage.hasOwnProperty(key)) {\n delete GameStorageManager.storage[key]\n }\n }\n /**\n * Clear the storage and the oidsUsed\n * @returns\n */\n public static clear() {\n GameStorageManager.storage = {}\n }\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n public static export(): ExportedStorage {\n return createExportableElement(GameStorageManager.storage)\n }\n public static importJson(dataString: string) {\n GameStorageManager.import(JSON.parse(dataString))\n }\n public static import(data: object) {\n GameStorageManager.clear()\n try {\n if (data) {\n GameStorageManager.storage = (data as ExportedStorage)\n }\n else {\n console.warn(\"[Pixi'VN] No storage data found\")\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","import { UPDATE_PRIORITY } from \"pixi.js\"\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\"\nimport { TickerIdType } from \"../types/TickerIdType\"\n\n/**\n * A dictionary that contains all tickers registered and avvailable to be used.\n */\nexport const registeredTickers: { [name: TickerIdType]: typeof TickerBase } = {}\n/**\n * Is a decorator that register a ticker in the game.\n * Is a required decorator for use the ticker in the game.\n * Thanks to this decoration the game has the possibility of updating the tickers to the latest modification and saving the game.\n * @param name is th identifier of the label, by default is the name of the class\n * @returns \n */\nexport default function tickerDecorator(name?: TickerIdType) {\n return function (target: typeof TickerBase<any>) {\n if (!name) {\n name = target.name\n }\n if (registeredTickers[name]) {\n console.info(`[Pixi'VN] Ticker ${name} already exists, it will be overwritten`)\n }\n target.prototype.id = name\n registeredTickers[name] = target\n }\n}\n\n/**\n * Get a ticker instance by the id.\n * @param tickerId The id of the ticker.\n * @param args The arguments that you want to pass to the ticker.\n * @param duration The duration of the ticker. If is undefined, the ticker will be called every frame.\n * @param priority The priority of the ticker. If is undefined, the priority will be UPDATE_PRIORITY.NORMAL.\n * @returns The instance of the ticker\n */\nexport function geTickerInstanceById<TArgs extends TickerArgsType>(tickerId: TickerIdType, args: TArgs, duration?: number, priority?: UPDATE_PRIORITY): TickerBase<TArgs> | undefined {\n try {\n let ticker = registeredTickers[tickerId]\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n return new ticker(args, duration, priority)\n }\n catch (e) {\n console.error(`[Pixi'VN] Error while getting Ticker ${tickerId}`, e)\n return\n }\n}\n","export function asciiArtLog() {\n console.info(`\n ____ _ _ ___ ___ _ \n | _ \\\\(_)_ _(_| ) \\\\ / / \\\\ | |\n | |_) | \\\\ \\\\/ / |/ \\\\ \\\\ / /| \\\\| |\n | __/| |> <| | \\\\ V / | |\\\\ |\n |_| |_/_/\\\\_\\\\_| \\\\_/ |_| \\\\_|\n `)\n}","export const tagToRemoveAfter = \"tagToRemoveAfter\";\nexport type tagToRemoveAfterType = \"tagToRemoveAfter\";\n","import { initDevtools } from '@pixi/devtools';\nimport sha1 from 'crypto-js/sha1';\nimport { Application, ApplicationOptions, Container, Ticker } from \"pixi.js\";\nimport CanvasBase from \"../classes/canvas/CanvasBase\";\nimport TickerBase, { TickerArgsType } from \"../classes/ticker/TickerBase\";\nimport { Repeat } from \"../constants\";\nimport { geTickerInstanceById } from \"../decorators/TickerDecorator\";\nimport { exportCanvasElement, importCanvasElement } from \"../functions/CanvasUtility\";\nimport { asciiArtLog } from \"../functions/EasterEgg\";\nimport { createExportableElement } from \"../functions/ExportUtility\";\nimport { ITicker, ITickersSteps, TickerHistory, TickerTimeoutHistory } from \"../interface\";\nimport { ITickersStep } from \"../interface/ITickersSteps\";\nimport { ICanvasBaseMemory } from \"../interface/canvas\";\nimport { ExportedCanvas } from \"../interface/export\";\nimport { PauseType } from \"../types/PauseType\";\nimport { RepeatType } from \"../types/RepeatType\";\nimport { TickerIdType } from \"../types/TickerIdType\";\nimport { tagToRemoveAfter } from '../types/ticker/TagToRemoveAfterType';\n\n/**\n * This class is responsible for managing the canvas, the tickers, the events, and the window size and the children of the window.\n */\nexport default class GameWindowManager {\n private constructor() { }\n\n private static _app: Application | undefined = undefined\n /**\n * The PIXI Application instance.\n * It not recommended to use this property directly.\n */\n static get app() {\n if (!GameWindowManager._app) {\n throw new Error(\"[Pixi'VN] GameWindowManager.app is undefined\")\n }\n return GameWindowManager._app\n }\n private static _isInitialized: boolean = false\n /**\n * If the manager is initialized.\n */\n static get isInitialized() {\n return GameWindowManager._isInitialized\n }\n /**\n * This is the div that have same size of the canvas.\n * This is useful to put interface elements.\n * You can use React or other framework to put elements in this div.\n */\n static htmlLayout: HTMLElement\n static canvasWidth: number\n static canvasHeight: number\n static get screen() {\n return GameWindowManager.app.screen\n }\n\n /**\n * Initialize the PIXI Application and the interface div.\n * This method should be called before any other method.\n * @param element The html element where I will put the canvas. Example: document.body\n * @param width The width of the canvas\n * @param height The height of the canvas\n * @param options The options of PIXI Application\n * @example\n * ```typescript\n * const body = document.body\n * if (!body) {\n * throw new Error('body element not found')\n * }\n * await GameWindowManager.initialize(body, 1920, 1080, {\n * backgroundColor: \"#303030\"\n * })\n * ```\n */\n public static async initialize(element: HTMLElement, width: number, height: number, options?: Partial<ApplicationOptions>): Promise<void> {\n GameWindowManager.canvasWidth = width\n GameWindowManager.canvasHeight = height\n GameWindowManager._app = new Application()\n return GameWindowManager.app.init({\n resolution: window.devicePixelRatio || 1,\n autoDensity: true,\n width: width,\n height: height,\n ...options\n }).then(() => {\n initDevtools({ app: GameWindowManager._app });\n\n GameWindowManager._isInitialized = true\n // Manager.app.ticker.add(Manager.update)\n this.addCanvasIntoHTMLElement(element)\n // listen for the browser telling us that the screen size changed\n window.addEventListener(\"resize\", GameWindowManager.resize)\n\n // call it manually once so we are sure we are the correct size after starting\n GameWindowManager.resize()\n\n asciiArtLog()\n });\n }\n\n /**\n * Add the canvas into a html element.\n * @param element it is the html element where I will put the canvas. Example: document.body\n */\n private static addCanvasIntoHTMLElement(element: HTMLElement) {\n if (GameWindowManager.isInitialized) {\n element.appendChild(GameWindowManager.app.canvas as HTMLCanvasElement)\n }\n else {\n console.error(\"[Pixi'VN] GameWindowManager is not initialized\")\n }\n }\n /**\n * Initialize the interface div and add it into a html element.\n * @param element it is the html element where I will put the interface div. Example: document.getElementById('root')\n * @example\n * ```tsx\n * const root = document.getElementById('root')\n * if (!root) {\n * throw new Error('root element not found')\n * }\n * GameWindowManager.initializeHTMLLayout(root)\n * const reactRoot = createRoot(GameWindowManager.htmlLayout)\n * reactRoot.render(\n * <App />\n * )\n * ```\n */\n public static initializeHTMLLayout(element: HTMLElement) {\n let div = document.createElement('div')\n div.style.position = 'absolute'\n div.style.pointerEvents = 'none'\n element.appendChild(div)\n GameWindowManager.htmlLayout = div\n GameWindowManager.resize()\n }\n\n /* Resize Metods */\n\n /**\n * This method returns the scale of the screen.\n */\n public static get screenScale() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return Math.min(screenWidth / GameWindowManager.canvasWidth, screenHeight / GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the width of the screen enlarged by the scale.\n */\n public static get screenWidth() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasWidth)\n }\n /**\n * This method returns the height of the screen enlarged by the scale.\n */\n public static get screenHeight() {\n return Math.floor(GameWindowManager.screenScale * GameWindowManager.canvasHeight)\n }\n /**\n * This method returns the horizontal margin of the screen.\n */\n public static get horizontalMargin() {\n let screenWidth = Math.max(document.documentElement.clientWidth, window.innerWidth || 0)\n return (screenWidth - GameWindowManager.screenWidth) / 2\n }\n /**\n * This method returns the vertical margin of the screen.\n */\n public static get verticalMargin() {\n let screenHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0)\n return (screenHeight - GameWindowManager.screenHeight) / 2\n }\n /**\n * This method is called when the screen is resized.\n */\n private static resize(): void {\n // now we use css trickery to set the sizes and margins\n if (GameWindowManager.isInitialized) {\n let style = GameWindowManager.app.canvas.style;\n style.width = `${GameWindowManager.screenWidth}px`;\n style.height = `${GameWindowManager.screenHeight}px`;\n (style as any).marginLeft = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginRight = `${GameWindowManager.horizontalMargin}px`;\n (style as any).marginTop = `${GameWindowManager.verticalMargin}px`;\n (style as any).marginBottom = `${GameWindowManager.verticalMargin}px`;\n }\n\n if (GameWindowManager.htmlLayout) {\n GameWindowManager.htmlLayout.style.width = `${GameWindowManager.screenWidth}px`\n GameWindowManager.htmlLayout.style.height = `${GameWindowManager.screenHeight}px`\n GameWindowManager.htmlLayout.style.marginLeft = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginRight = `${GameWindowManager.horizontalMargin}px`\n GameWindowManager.htmlLayout.style.marginTop = `${GameWindowManager.verticalMargin}px`\n GameWindowManager.htmlLayout.style.marginBottom = `${GameWindowManager.verticalMargin}px`\n }\n }\n\n /* Edit Canvas Elements Methods */\n\n /**\n * This is a dictionary that contains all Canvas Elements of Canvas, currently.\n */\n static get currentCanvasElements() {\n return GameWindowManager._children\n }\n private static _children: { [tag: string]: CanvasBase<any> } = {}\n /**\n * The order of the children tags.\n */\n private static childrenTagsOrder: string[] = []\n /**\n * Add a canvas element to the canvas.\n * If there is a canvas element with the same tag, it will be removed.\n * @param tag The tag of the canvas element.\n * @param canvasElement The canvas elements to be added.\n * @example\n * ```typescript\n * const texture = await Assets.load('https://pixijs.com/assets/bunny.png');\n * const sprite = CanvasSprite.from(texture);\n * GameWindowManager.addCanvasElement(\"bunny\", sprite);\n * ```\n */\n public static addCanvasElement(tag: string, canvasElement: CanvasBase<any>) {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.removeCanvasElement(tag)\n }\n GameWindowManager.app.stage.addChild(canvasElement)\n GameWindowManager._children[tag] = canvasElement\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n /**\n * Remove a canvas element from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n * @param tags The tag of the canvas element to be removed.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.removeCanvasElement(\"bunny\");\n * ```\n */\n public static removeCanvasElement(tags: string | string[]) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n tags.forEach((tag) => {\n if (GameWindowManager._children[tag]) {\n GameWindowManager.app.stage.removeChild(GameWindowManager._children[tag])\n delete GameWindowManager._children[tag]\n GameWindowManager.removeTickerByCanvasElement(tag)\n }\n })\n GameWindowManager.childrenTagsOrder = GameWindowManager.childrenTagsOrder.filter((t) => !tags.includes(t))\n }\n /**\n * Get a canvas element by the tag.\n * @param tag The tag of the canvas element.\n * @returns The canvas element.\n * @example\n * ```typescript\n * const sprite = GameWindowManager.getCanvasElement<CanvasSprite>(\"bunny\");\n * ```\n */\n public static getCanvasElement<T extends CanvasBase<any>>(tag: string): T | undefined {\n return GameWindowManager._children[tag] as T | undefined\n }\n /**\n * Check if a DisplayObject is on the canvas.\n * @param pixiElement The DisplayObject to be checked.\n * @returns If the DisplayObject is on the canvas.\n */\n public static canvasElementIsOnCanvas<T extends Container>(pixiElement: T) {\n return GameWindowManager.app.stage.children.includes(pixiElement)\n }\n /**\n * Remove all canvas elements from the canvas.\n * And remove all tickers that are not connected to any canvas element.\n */\n public static removeCanvasElements() {\n GameWindowManager.app.stage.removeChildren()\n GameWindowManager._children = {}\n GameWindowManager.childrenTagsOrder = []\n GameWindowManager.removeAllTickers()\n }\n /**\n * Edit the tag of a canvas element.\n * @param oldTag The old tag of the canvas element.\n * @param newTag The new tag of the canvas element.\n */\n public static editCanvasElementTag(oldTag: string, newTag: string) {\n if (GameWindowManager._children[oldTag]) {\n GameWindowManager._children[newTag] = GameWindowManager._children[oldTag]\n delete GameWindowManager._children[oldTag]\n }\n if (GameWindowManager._currentTickersSteps[oldTag]) {\n GameWindowManager._currentTickersSteps[newTag] = GameWindowManager._currentTickersSteps[oldTag]\n delete GameWindowManager._currentTickersSteps[oldTag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(oldTag)) {\n ticker.canvasElementTags = ticker.canvasElementTags.map((t) => t === oldTag ? newTag : t)\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n if (typeof tagToRemoveAfter === \"string\") {\n tagToRemoveAfter = [tagToRemoveAfter]\n }\n if (Array.isArray(tagToRemoveAfter)) {\n ticker.args.tagToRemoveAfter = tagToRemoveAfter.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.tags.includes(oldTag)) {\n TickerTimeout.tags = TickerTimeout.tags.map((t) => t === oldTag ? newTag : t)\n }\n }\n }\n\n /** Edit Tickers Methods */\n\n /**\n * Currently tickers that are running.\n */\n public static get currentTickers() {\n return GameWindowManager._currentTickers\n }\n public static get currentTickersList() {\n return Object.values(GameWindowManager._currentTickers)\n }\n private static get currentTickersWithoutCreatedBySteps() {\n return Object.fromEntries(Object.entries(GameWindowManager._currentTickers).filter(([_, ticker]) => !ticker.createdByTicketStepsId))\n }\n private static _currentTickers: { [id: string]: TickerHistory<any> } = {}\n /**\n * The steps of the tickers\n */\n public static get currentTickersSteps() {\n return GameWindowManager._currentTickersSteps\n }\n private static _currentTickersSteps: { [tag: string]: ITickersSteps } = {}\n private static _currentTickersTimeouts: { [timeout: string]: TickerTimeoutHistory } = {}\n private static generateTickerId(tickerData: TickerHistory<any>): string {\n try {\n return sha1(JSON.stringify(tickerData)).toString() + \"_\" + Math.random().toString(36).substring(7)\n }\n catch (e) {\n throw new Error(`[Pixi'VN] Error to generate ticker id: ${e}`)\n }\n }\n /**\n * Run a ticker. You can run multiple addTicker with the same tag and different tickerClasses.\n * If you run a ticker with the same tag and tickerClass, the old ticker will be removed.\n * If already exists a sequence of tickers with the same tag, it will be removed.\n * @param canvasEslementTag The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be run.\n * @param args The arguments to be used in the ticker.\n * @param duration The time to be used in the ticker. This number is in seconds. If it is undefined, the ticker will run forever.\n * @param priority The priority to be used in the ticker.\n * @returns \n * @example\n * ```typescript\n * GameWindowManager.addTicker(\"alien\", new RotateTicker({ speed: 0.2 }))\n * ```\n */\n static addTicker<TArgs extends TickerArgsType>(canvasElementTag: string | string[], ticker: TickerBase<TArgs>) {\n let tickerId: TickerIdType = ticker.id\n if (typeof canvasElementTag === \"string\") {\n canvasElementTag = [canvasElementTag]\n }\n if (!geTickerInstanceById<TArgs>(tickerId, ticker.args, ticker.duration, ticker.priority)) {\n console.error(`[Pixi'VN] Ticker ${tickerId} not found`)\n return\n }\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerId,\n args: createExportableElement(ticker.args),\n canvasElementTags: canvasElementTag,\n priority: ticker.priority,\n duration: ticker.duration,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n }\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(canvasElementTag, tickerId, timeout.toString(), true)\n }\n }\n private static pushTicker<TArgs extends TickerArgsType>(id: string, tickerData: TickerHistory<TArgs>, ticker: TickerBase<TArgs>) {\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(tickerData.canvasElementTags, ticker)\n GameWindowManager._currentTickers[id] = tickerData\n tickerData.fn = (t: Ticker) => {\n let data = GameWindowManager._currentTickers[id]\n if (data) {\n ticker?.fn(t, data.args, data.canvasElementTags, id)\n }\n }\n GameWindowManager.app.ticker.add(tickerData.fn, undefined, tickerData.priority)\n }\n /**\n * Run a sequence of tickers. If exists a ticker steps with the same tag, it will be removed.\n * @param tag The tag of canvas element that will use the tickers.\n * @param steps The steps of the tickers.\n * @param currentStepNumber The current step number. It is used to continue the sequence of tickers.\n * @returns\n * @example\n * ```typescript\n * GameWindowManager.addTickersSteps(\"alien\", [\n * new RotateTicker({ speed: 0.1, clockwise: true }, 2), // 2 seconds\n * Pause(1), // 1 second\n * new RotateTicker({ speed: 0.2, clockwise: false }, 2),\n * Repeat,\n * ])\n * ```\n */\n static addTickersSteps<TArgs extends TickerArgsType>(tag: string, steps: (ITicker<TArgs> | RepeatType | PauseType)[], currentStepNumber = 0) {\n if (steps.length == 0) {\n console.warn(\"[Pixi'VN] The steps of the tickers is empty\")\n return\n }\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n GameWindowManager._currentTickersSteps[tag] = {\n currentStepNumber: currentStepNumber,\n steps: steps.map((step) => {\n if (step === Repeat) {\n return step\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n return step as PauseType\n }\n let tickerId = (step as ITicker<TArgs>).id\n return {\n ticker: tickerId,\n args: createExportableElement((step as ITicker<TArgs>).args),\n duration: step.duration,\n }\n })\n }\n GameWindowManager.runTickersSteps(tag)\n }\n private static restoneTickersSteps(data: { [tag: string]: ITickersSteps }) {\n for (let tag in data) {\n let steps = data[tag]\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n }\n private static runTickersSteps<TArgs extends TickerArgsType>(tag: string) {\n let step = GameWindowManager._currentTickersSteps[tag].steps[GameWindowManager._currentTickersSteps[tag].currentStepNumber]\n if (step === Repeat) {\n step = GameWindowManager._currentTickersSteps[tag].steps[0]\n GameWindowManager._currentTickersSteps[tag].currentStepNumber = 0\n if (step === Repeat) {\n console.error(\"[Pixi'VN] TikersSteps has a RepeatType in the first step\")\n return\n }\n }\n if (step.hasOwnProperty(\"type\") && (step as PauseType).type === \"pause\") {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, (step as PauseType).duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, \"steps\", timeout.toString(), false)\n return\n }\n let ticker = geTickerInstanceById<TArgs>((step as ITickersStep<TArgs>).ticker, (step as ITickersStep<TArgs>).args, step.duration, (step as ITickersStep<TArgs>).priority)\n if (!ticker) {\n console.error(`[Pixi'VN] Ticker ${(step as ITickersStep<TArgs>).ticker} not found`)\n return\n }\n let tickerName: TickerIdType = ticker.id\n let tickerHistory: TickerHistory<TArgs> = {\n fn: () => { },\n id: tickerName,\n args: createExportableElement(ticker.args),\n canvasElementTags: [tag],\n priority: ticker.priority,\n duration: ticker.duration,\n createdByTicketStepsId: tag,\n }\n let id = GameWindowManager.generateTickerId(tickerHistory)\n GameWindowManager.pushTicker(id, tickerHistory, ticker)\n if (ticker.duration) {\n let timeout = setTimeout(() => {\n let tickerTimeoutInfo = GameWindowManager._currentTickersTimeouts[timeout.toString()]\n if (tickerTimeoutInfo) {\n GameWindowManager.removeTicker(id)\n tickerTimeoutInfo.tags.forEach((tag) => {\n GameWindowManager.nextTickerStep(tag)\n })\n }\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }, ticker.duration * 1000);\n GameWindowManager.addTickerTimeoutInfo(tag, tickerName, timeout.toString(), false)\n }\n }\n private static nextTickerStep(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n let steps = GameWindowManager._currentTickersSteps[tag]\n if (steps.currentStepNumber + 1 < steps.steps.length) {\n steps.currentStepNumber++\n GameWindowManager._currentTickersSteps[tag] = steps\n GameWindowManager.runTickersSteps(tag)\n }\n else {\n GameWindowManager.removeTickerStepByCanvasElement(tag)\n }\n }\n }\n public static onEndOfTicker(canvasElementTags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string, canvasElementTagsToDelete: string | string[], tickerId: string) {\n let tickerData = GameWindowManager._currentTickers[tickerId]\n GameWindowManager.removeAssociationBetweenTickerCanvasElement(canvasElementTags, ticker)\n GameWindowManager.removeCanvasElement(canvasElementTagsToDelete)\n if (tickerData) {\n GameWindowManager.removeTicker(tickerId)\n if (tickerData.duration == undefined && tickerData.createdByTicketStepsId) {\n GameWindowManager.nextTickerStep(tickerData.createdByTicketStepsId)\n }\n }\n }\n /**\n * Remove a connection between a canvas element and a ticker.\n * And remove the ticker if there is no canvas element connected to it.\n * @param tags The tag of the canvas element that will use the ticker.\n * @param ticker The ticker class to be removed.\n * @example\n * ```typescript\n * GameWindowManager.removeAssociationBetweenTickerCanvasElement(\"alien\", RotateTicker)\n * ```\n */\n public static removeAssociationBetweenTickerCanvasElement(tags: string | string[], ticker: typeof TickerBase<any> | TickerBase<any> | string) {\n let tickerId: TickerIdType\n if (typeof ticker === \"string\") {\n tickerId = ticker\n }\n else if (ticker instanceof TickerBase) {\n tickerId = ticker.id\n }\n else {\n tickerId = ticker.prototype.id\n }\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.id === tickerId) {\n GameWindowManager._currentTickers[id].canvasElementTags = ticker.canvasElementTags.filter((e) => !tags.includes(e))\n }\n }\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let TickerTimeout = GameWindowManager._currentTickersTimeouts[timeout]\n if (TickerTimeout.ticker === tickerId && TickerTimeout.canBeDeletedBeforeEnd) {\n GameWindowManager._currentTickersTimeouts[timeout].tags = TickerTimeout.tags.filter((t) => !tags.includes(t))\n }\n }\n GameWindowManager.removeTickersWithoutAssociatedCanvasElement()\n }\n /**\n * Remove all tickers that are not connected to any existing canvas element.\n */\n private static removeTickersWithoutAssociatedCanvasElement() {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n ticker.canvasElementTags = ticker.canvasElementTags.filter((e) => GameWindowManager._children[e])\n if (ticker.canvasElementTags.length === 0) {\n GameWindowManager.removeTicker(id)\n }\n }\n for (let tag in GameWindowManager._currentTickersSteps) {\n if (GameWindowManager._children[tag] === undefined) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n }\n Object.entries(GameWindowManager._currentTickersTimeouts).forEach(([timeout, { tags }]) => {\n if (tags.length === 0) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n })\n }\n private static addTickerTimeoutInfo(tags: string | string[], ticker: string, timeout: string, canBeDeletedBeforeEnd: boolean) {\n if (typeof tags === \"string\") {\n tags = [tags]\n }\n GameWindowManager._currentTickersTimeouts[timeout] = {\n tags: tags,\n ticker: ticker,\n canBeDeletedBeforeEnd: canBeDeletedBeforeEnd\n }\n }\n private static removeTickerTimeoutInfo(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n if (GameWindowManager._currentTickersTimeouts[timeout]) {\n delete GameWindowManager._currentTickersTimeouts[timeout]\n }\n }\n private static removeTickerTimeout(timeout: NodeJS.Timeout | string) {\n if (typeof timeout !== \"string\") {\n timeout = timeout.toString()\n }\n clearTimeout(Number(timeout))\n GameWindowManager.removeTickerTimeoutInfo(timeout)\n }\n private static removeTickerTimeoutsByTag(tag: string, checkCanBeDeletedBeforeEnd: boolean) {\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n let tagsWithoutTagToRemove = GameWindowManager._currentTickersTimeouts[timeout].tags.filter((t) => t !== tag)\n if (tagsWithoutTagToRemove.length === 0) {\n let canBeDeletedBeforeEnd = GameWindowManager._currentTickersTimeouts[timeout].canBeDeletedBeforeEnd\n if (!checkCanBeDeletedBeforeEnd || canBeDeletedBeforeEnd) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n else {\n GameWindowManager._currentTickersTimeouts[timeout].tags = tagsWithoutTagToRemove\n }\n }\n }\n /**\n * Remove all tickers from the canvas.\n */\n public static removeAllTickers() {\n GameWindowManager._currentTickersSteps = {}\n Object.keys(GameWindowManager._currentTickers).forEach((id) => {\n GameWindowManager.removeTicker(id)\n })\n GameWindowManager._currentTickers = {}\n for (let timeout in GameWindowManager._currentTickersTimeouts) {\n GameWindowManager.removeTickerTimeout(timeout)\n }\n }\n /**\n * Remove all tickers from a canvas element.\n * @param tag The tag of the canvas element that will use the ticker.\n */\n private static removeTickerByCanvasElement(tag: string | string[]) {\n if (typeof tag === \"string\") {\n tag = [tag]\n }\n tag.forEach((tag) => {\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.canvasElementTags.includes(tag)) {\n GameWindowManager.removeTicker(id)\n }\n }\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n GameWindowManager.removeTickerTimeoutsByTag(tag, false)\n delete GameWindowManager._currentTickersSteps[tag]\n })\n }\n private static removeTickerStepByCanvasElement(tag: string) {\n if (GameWindowManager._currentTickersSteps[tag]) {\n delete GameWindowManager._currentTickersSteps[tag]\n }\n for (let id in GameWindowManager._currentTickers) {\n let ticker = GameWindowManager._currentTickers[id]\n if (ticker.createdByTicketStepsId === tag) {\n GameWindowManager.removeTicker(id)\n }\n }\n }\n private static removeTicker(tickerId: string) {\n let ticker = GameWindowManager._currentTickers[tickerId]\n if (ticker) {\n if (ticker.args.hasOwnProperty(tagToRemoveAfter)) {\n let tagToRemoveAfter: string | string[] = ticker.args.tagToRemoveAfter\n GameWindowManager.removeCanvasElement(tagToRemoveAfter)\n }\n GameWindowManager.app.ticker.remove(ticker.fn)\n delete GameWindowManager._currentTickers[tickerId]\n }\n }\n\n /**\n * Clear the canvas and the tickers.\n */\n static clear() {\n GameWindowManager.removeCanvasElements()\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the canvas and the tickers to a JSON string.\n * @returns The JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the canvas and the tickers to an object.\n * @returns The object.\n */\n public static export(): ExportedCanvas {\n let currentElements: { [tag: string]: ICanvasBaseMemory } = {}\n for (let tag in GameWindowManager._children) {\n currentElements[tag] = exportCanvasElement(GameWindowManager._children[tag])\n }\n return {\n currentTickers: createExportableElement(GameWindowManager.currentTickersWithoutCreatedBySteps),\n currentTickersSteps: createExportableElement(GameWindowManager._currentTickersSteps),\n currentElements: createExportableElement(currentElements),\n childrenTagsOrder: createExportableElement(GameWindowManager.childrenTagsOrder),\n }\n }\n /**\n * Import the canvas and the tickers from a JSON string.\n * @param dataString The JSON string.\n */\n public static importJson(dataString: string) {\n GameWindowManager.import(JSON.parse(dataString))\n }\n /**\n * Import the canvas and the tickers from an object.\n * @param data The object.\n */\n public static import(data: object) {\n GameWindowManager.clear()\n try {\n if (data.hasOwnProperty(\"childrenTagsOrder\") && data.hasOwnProperty(\"currentElements\")) {\n let currentElements = (data as ExportedCanvas)[\"currentElements\"]\n let childrenTagsOrder = (data as ExportedCanvas)[\"childrenTagsOrder\"]\n childrenTagsOrder.forEach((tag) => {\n if (currentElements[tag]) {\n let element = importCanvasElement(currentElements[tag])\n GameWindowManager.addCanvasElement(tag, element)\n GameWindowManager.childrenTagsOrder.push(tag)\n }\n })\n }\n else {\n console.error(\"[Pixi'VN] The data does not have the properties childrenTagsOrder and currentElements\")\n return\n }\n if (data.hasOwnProperty(\"currentTickers\")) {\n let currentTickers = (data as ExportedCanvas)[\"currentTickers\"]\n for (let id in currentTickers) {\n let t = currentTickers[id]\n let tags: string[] = t.canvasElementTags\n let ticker = geTickerInstanceById(t.id, t.args, t.duration, t.priority)\n if (ticker) {\n GameWindowManager.addTicker(tags, ticker)\n }\n else {\n console.error(`[Pixi'VN] Ticker ${t.id} not found`)\n }\n }\n }\n if (data.hasOwnProperty(\"currentTickersSteps\")) {\n let currentTickersSteps = (data as ExportedCanvas)[\"currentTickersSteps\"]\n GameWindowManager.restoneTickersSteps(currentTickersSteps)\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n}\n","import { diff } from \"deep-diff\"\nimport { DialogueBaseModel, Label } from \"../classes\"\nimport { ChoiceMenuOptionClose, IStoratedChoiceMenuOption } from \"../classes/ChoiceMenuOption\"\nimport newCloseLabel, { CLOSE_LABEL_ID } from \"../classes/CloseLabel\"\nimport { getLabelById } from \"../decorators/LabelDecorator\"\nimport { getChoiceMenuOptions, getDialogue } from \"../functions\"\nimport { restoreDeepDiffChanges } from \"../functions/DiffUtility\"\nimport { createExportableElement } from \"../functions/ExportUtility\"\nimport { getStepSha1 } from \"../functions/StepLabelUtility\"\nimport ExportedStep from \"../interface/export/ExportedStep\"\nimport IHistoryStep, { IHistoryStepData } from \"../interface/IHistoryStep\"\nimport IOpenedLabel from \"../interface/IOpenedLabel\"\nimport { LabelIdType } from \"../types/LabelIdType\"\nimport { StepHistoryDataType } from \"../types/StepHistoryDataType\"\nimport { StepLabelPropsType, StepLabelResultType, StepLabelType } from \"../types/StepLabelType\"\nimport GameStorageManager from \"./StorageManager\"\nimport GameWindowManager from \"./WindowManager\"\n\n/**\n * GameStepManager is a class that manages the steps and labels of the game.\n */\nexport default class GameStepManager {\n private constructor() { }\n /**\n * stepHistory is a list of label events and steps that occurred during the progression of the steps.\n */\n private static _stepsHistory: IHistoryStep[] = []\n static get stepsHistory() {\n return GameStepManager._stepsHistory\n }\n private static _lastStepIndex: number = 0\n /**\n * lastStepIndex is the last step index that occurred during the progression of the steps. **Not is the length of the stepsHistory - 1.**\n */\n static get lastStepIndex() {\n return GameStepManager._lastStepIndex\n }\n /**\n * Increase the last step index that occurred during the progression of the steps.\n */\n private static increaseLastStepIndex() {\n GameStepManager._lastStepIndex++\n }\n private static _openedLabels: IOpenedLabel[] = []\n static get openedLabels() {\n return GameStepManager._openedLabels\n }\n /**\n * currentLabelId is the current label id that occurred during the progression of the steps.\n */\n private static get currentLabelId(): LabelIdType | undefined {\n if (GameStepManager._openedLabels.length > 0) {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n return item.label\n }\n return undefined\n }\n /**\n * currentLabel is the current label that occurred during the progression of the steps.\n */\n static get currentLabel(): Label | undefined {\n if (GameStepManager.currentLabelId) {\n return getLabelById(GameStepManager.currentLabelId)\n }\n }\n private static get currentLabelStepIndex(): number | null {\n if (GameStepManager._openedLabels.length > 0) {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n return item.currentStepIndex\n }\n return null\n }\n /**\n * lastHistoryStep is the last history step that occurred during the progression of the steps.\n */\n private static get lastHistoryStep(): IHistoryStep | null {\n if (GameStepManager._stepsHistory.length > 0) {\n return GameStepManager._stepsHistory[GameStepManager._stepsHistory.length - 1]\n }\n return null\n }\n private static _originalStepData: IHistoryStepData | undefined = undefined\n private static get originalStepData(): IHistoryStepData {\n if (!GameStepManager._originalStepData) {\n return {\n path: \"\",\n storage: {},\n canvas: {\n childrenTagsOrder: [],\n currentElements: {},\n currentTickers: {},\n currentTickersSteps: {},\n },\n labelIndex: -1,\n openedLabels: [],\n }\n }\n return createExportableElement(GameStepManager._originalStepData)\n }\n private static set originalStepData(value: IHistoryStepData) {\n GameStepManager._originalStepData = createExportableElement(value)\n }\n\n private static get currentStepData(): IHistoryStepData {\n let currentStepData: IHistoryStepData = {\n path: window.location.pathname,\n storage: GameStorageManager.export(),\n canvas: GameWindowManager.export(),\n labelIndex: GameStepManager.currentLabelStepIndex || 0,\n openedLabels: createExportableElement(GameStepManager._openedLabels),\n }\n return currentStepData\n }\n\n /* Edit History Methods */\n\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n */\n private static addStepHistory(step: StepLabelType<any>, choiseMade?: number) {\n let stepHistory: StepHistoryDataType = getStepSha1(step)\n let currentStepData: IHistoryStepData = GameStepManager.currentStepData\n if (GameStepManager.originalStepData) {\n if (GameStepManager.originalStepData.openedLabels.length === currentStepData.openedLabels.length) {\n try {\n let lastStepDataOpenedLabelsString = JSON.stringify(GameStepManager.originalStepData.openedLabels)\n let historyStepOpenedLabelsString = JSON.stringify(currentStepData.openedLabels)\n if (\n lastStepDataOpenedLabelsString === historyStepOpenedLabelsString &&\n GameStepManager.originalStepData.path === currentStepData.path &&\n GameStepManager.originalStepData.labelIndex === currentStepData.labelIndex\n ) {\n return\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error comparing openedLabels\", e)\n }\n }\n }\n let data = diff(GameStepManager.originalStepData, currentStepData)\n if (data) {\n let dialoge: DialogueBaseModel | undefined = undefined\n let requiredChoices: IStoratedChoiceMenuOption[] | undefined = undefined\n if (GameStorageManager.getVariable<number>(GameStorageManager.keysSystem.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY) === GameStepManager.lastStepIndex) {\n dialoge = getDialogue()\n }\n if (GameStorageManager.getVariable<number>(GameStorageManager.keysSystem.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY) === GameStepManager.lastStepIndex) {\n requiredChoices = GameStorageManager.getVariable<IStoratedChoiceMenuOption[]>(GameStorageManager.keysSystem.CURRENT_MENU_OPTIONS_MEMORY_KEY)\n }\n GameStepManager._stepsHistory.push({\n diff: data,\n currentLabel: GameStepManager.currentLabelId,\n dialoge: dialoge,\n choices: requiredChoices,\n stepSha1: stepHistory,\n index: GameStepManager.lastStepIndex,\n choiceIndexMade: choiseMade\n })\n GameStepManager.originalStepData = currentStepData\n }\n GameStepManager.increaseLastStepIndex()\n }\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n */\n private static pushNewLabel(label: LabelIdType) {\n let currentLabel = getLabelById(label)\n if (!currentLabel) {\n throw new Error(`[Pixi'VN] Label ${label} not found`)\n }\n GameStepManager._openedLabels.push({\n label: label,\n currentStepIndex: 0,\n })\n }\n /**\n * Close the current label and add it to the history.\n * @returns \n */\n static closeCurrentLabel() {\n if (!GameStepManager.currentLabelId) {\n console.warn(\"[Pixi'VN] No label to close\")\n return\n }\n if (!GameStepManager.currentLabel) {\n console.error(\"[Pixi'VN] currentLabel not found\")\n return\n }\n GameStepManager._openedLabels.pop()\n }\n /**\n * Close all labels and add them to the history. **Attention: This method can cause an unhandled game ending.**\n */\n static closeAllLabels() {\n while (GameStepManager._openedLabels.length > 0) {\n GameStepManager.closeCurrentLabel()\n }\n }\n /**\n * Increase the current step index of the current label.\n */\n private static increaseCurrentStepIndex() {\n let item = GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1]\n GameStepManager._openedLabels[GameStepManager._openedLabels.length - 1] = {\n ...item,\n currentStepIndex: item.currentStepIndex + 1,\n }\n }\n private static restorLastLabelList() {\n GameStepManager._openedLabels = GameStepManager.originalStepData.openedLabels\n }\n\n /* Run Methods */\n\n static get canGoNext(): boolean {\n let options = getChoiceMenuOptions()\n if (options && options.length > 0) {\n return false\n }\n return true\n }\n /**\n * Execute the next step and add it to the history.\n * @param props The props to pass to the step.\n * @param choiseMade The index of the choise made by the player. (This params is used in the choice menu)\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * function nextOnClick() {\n * setLoading(true)\n * GameStepManager.goNext(yourParams)\n * .then((result) => {\n * setUpdate((p) => p + 1)\n * setLoading(false)\n * if (result) {\n * // your code\n * }\n * })\n * .catch((e) => {\n * setLoading(false)\n * console.error(e)\n * })\n * }\n * ```\n */\n public static async goNext(props: StepLabelPropsType, choiseMade?: number): Promise<StepLabelResultType> {\n if (!GameStepManager.canGoNext) {\n console.warn(\"[Pixi'VN] The player must make a choice\")\n return\n }\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onStepEnd) {\n await GameStepManager.currentLabel.onStepEnd(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStepManager.increaseCurrentStepIndex()\n return await GameStepManager.runCurrentStep(props, choiseMade)\n }\n /**\n * Execute the current step and add it to the history.\n * @param props The props to pass to the step.\n * @param choiseMade The choise made by the player.\n * @returns StepLabelResultType or undefined.\n */\n private static async runCurrentStep<T extends {}>(props: StepLabelPropsType<T>, choiseMade?: number): Promise<StepLabelResultType> {\n if (GameStepManager.currentLabelId) {\n let currentLabelStepIndex = GameStepManager.currentLabelStepIndex\n if (currentLabelStepIndex === null) {\n console.error(\"[Pixi'VN] currentLabelStepIndex is null\")\n return\n }\n let currentLabel = GameStepManager.currentLabel as Label<T> | undefined\n if (!currentLabel) {\n console.error(\"[Pixi'VN] currentLabel not found\")\n return\n }\n if (currentLabel.steps.length > currentLabelStepIndex) {\n let onStepRun = currentLabel.onStepStart\n if (onStepRun) {\n await onStepRun(currentLabelStepIndex, currentLabel)\n }\n let step = currentLabel.steps[currentLabelStepIndex]\n let result = await step(props)\n GameStepManager.addStepHistory(step, choiseMade)\n return result\n }\n else if (GameStepManager.openedLabels.length > 1) {\n GameStepManager.closeCurrentLabel()\n return await GameStepManager.goNext(props, choiseMade)\n }\n else {\n GameStepManager.restorLastLabelList()\n if (GameStepManager.gameEnd) {\n return await GameStepManager.gameEnd(props)\n }\n console.error(\"[Pixi'VN] The end of the game is not managed, so the game is blocked. Read this documentation to know how to manage the end of the game: https://pixi-vn.web.app/start/labels.html#how-manage-the-end-of-the-game\")\n return\n }\n }\n }\n /**\n * Execute the label and add it to the history. (It's similar to Ren'Py's call function)\n * @param label The label to execute or the id of the label\n * @param props The props to pass to the label.\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.callLabel(startLabel, yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n * @example\n * ```typescript\n * // if you use it in a step label you should return the result.\n * return GameStepManager.callLabel(startLabel).then((result) => {\n * return result\n * })\n * ```\n */\n public static async callLabel<T extends {} = {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n let choiseMade: number | undefined = undefined\n let labelId: LabelIdType\n if (typeof label === 'string') {\n labelId = label\n }\n else {\n labelId = label.id\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n }\n try {\n if (labelId === CLOSE_LABEL_ID) {\n let closeCurrentLabel = newCloseLabel<T>(choiseMade)\n let choice: ChoiceMenuOptionClose<T> = {\n label: closeCurrentLabel,\n text: \"\",\n closeCurrentLabel: false,\n type: \"close\",\n props: {},\n }\n return GameStepManager.closeChoiceMenu(choice, props)\n }\n let tempLabel = getLabelById<Label<T>>(labelId)\n if (!tempLabel) {\n throw new Error(`[Pixi'VN] Label ${labelId} not found`)\n }\n\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onStepEnd) {\n await GameStepManager.currentLabel.onStepEnd(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStepManager.pushNewLabel(tempLabel.id)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error calling label\", e)\n return\n }\n return await GameStepManager.runCurrentStep<T>(props, choiseMade)\n }\n /**\n * Execute the label, close the current label, execute the new label and add the new label to the history. (It's similar to Ren'Py's jump function)\n * @param label The label to execute.\n * @param props The props to pass to the label or the id of the label\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.jumpLabel(startLabel, yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n * @example\n * ```typescript\n * // if you use it in a step label you should return the result.\n * return GameStepManager.jumpLabel(startLabel).then((result) => {\n * return result\n * })\n * ```\n */\n public static async jumpLabel<T extends {}>(label: Label<T> | LabelIdType, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n GameStepManager.closeCurrentLabel()\n let choiseMade: number | undefined = undefined\n let labelId: LabelIdType\n if (typeof label === 'string') {\n labelId = label\n }\n else {\n labelId = label.id\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n }\n try {\n if (labelId === CLOSE_LABEL_ID) {\n let closeCurrentLabel = newCloseLabel<T>(choiseMade)\n let choice: ChoiceMenuOptionClose<T> = {\n label: closeCurrentLabel,\n text: \"\",\n closeCurrentLabel: false,\n type: \"close\",\n props: {},\n }\n return GameStepManager.closeChoiceMenu<T>(choice, props)\n }\n let tempLabel = getLabelById<Label<T>>(labelId)\n if (!tempLabel) {\n throw new Error(`[Pixi'VN] Label ${labelId} not found`)\n }\n\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onStepEnd) {\n await GameStepManager.currentLabel.onStepEnd(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStepManager.pushNewLabel(tempLabel.id)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error jumping label\", e)\n return\n }\n return await GameStepManager.runCurrentStep<T>(props, choiseMade)\n }\n /**\n * When the player is in a choice menu, can use this function to exit to the choice menu.\n * @param choice\n * @param props\n * @returns StepLabelResultType or undefined.\n * @example\n * ```typescript\n * GameStepManager.closeChoiceMenu(yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n */\n public static async closeChoiceMenu<T extends {} = {}>(choice: ChoiceMenuOptionClose<T>, props: StepLabelPropsType<T>): Promise<StepLabelResultType> {\n let label: Label<T> = choice.label\n let choiseMade: number | undefined = undefined\n if (typeof label.choiseIndex === \"number\") {\n choiseMade = label.choiseIndex\n }\n if (choice.closeCurrentLabel) {\n GameStepManager.closeCurrentLabel()\n }\n return GameStepManager.goNext(props, choiseMade)\n }\n\n /* After Update Methods */\n\n // /**\n // * After the update or code edit, some steps or labels may no longer match.\n // * - In case of step mismatch, the game will be updated to the last matching step.\n // * - In case of label mismatch, the game gives an error.\n // * @returns \n // */\n // private static afterUpdate() {\n // // TODO: implement\n // if (!GameStepManager.currentLabel) {\n // // TODO: implement\n // return\n // }\n // let currentLabel = getLabelInstanceByClassName(GameStepManager.currentLabel)\n // if (!currentLabel) {\n // console.error(\"Label not found\")\n // return\n // }\n // let oldSteps = GameStepManager.stepsAfterLastHistoryLabel\n // let currentStepIndex = currentLabel.getCorrespondingStepsNumber(oldSteps)\n // let stepToRemove = oldSteps.length - currentStepIndex\n // GameStepManager.removeLastHistoryNodes(stepToRemove)\n // GameStepManager.loadLastStep()\n // }\n // private static loadLastStep() {\n // // TODO: implement\n // }\n // /**\n // * Remove a number of items from the last of the history.\n // * @param itemNumber The number of items to remove from the last of the history.\n // */\n // private static removeLastHistoryNodes(itemNumber: number) {\n // // TODO: implement\n // for (let i = 0; i < itemNumber; i++) {\n // GameStepManager._stepsHistory.pop()\n // }\n // }\n // /**\n // * stepsAfterLastHistoryLabel is a list of steps that occurred after the last history label.\n // */\n // private static get stepsAfterLastHistoryLabel(): StepHistoryDataType[] {\n // let length = GameStepManager._stepsHistory.length\n // let steps: StepHistoryDataType[] = []\n // for (let i = length - 1; i >= 0; i--) {\n // let element = GameStepManager._stepsHistory[i]\n // if (typeof element === \"object\" && \"stepSha1\" in element) {\n // steps.push(element.stepSha1)\n // }\n // else {\n // break\n // }\n // }\n\n // steps = steps.reverse()\n // return steps\n // }\n\n /* Go Back & Refresh Methods */\n\n /**\n * Go back to the last step and add it to the history.\n * @param navigate The navigate function.\n * @param steps The number of steps to go back.\n * @returns \n * @example\n * ```typescript\n * export function goBack(navigate: (path: string) => void, afterBack?: () => void) {\n * GameStepManager.goBack(navigate)\n * afterBack && afterBack()\n * }\n * ```\n */\n public static async goBack(navigate: (path: string) => void, steps: number = 1) {\n if (steps <= 0) {\n console.warn(\"[Pixi'VN] Steps must be greater than 0\")\n return\n }\n if (GameStepManager._stepsHistory.length <= 1) {\n console.warn(\"[Pixi'VN] No steps to go back\")\n return\n }\n let restoredStep = GameStepManager.goBackInternal(steps, GameStepManager.originalStepData)\n if (restoredStep) {\n GameStepManager._originalStepData = restoredStep\n GameStepManager._openedLabels = createExportableElement(restoredStep.openedLabels)\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onLoadStep) {\n await GameStepManager.currentLabel.onLoadStep(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n GameStorageManager.import(createExportableElement(restoredStep.storage))\n GameWindowManager.import(createExportableElement(restoredStep.canvas))\n navigate(restoredStep.path)\n }\n else {\n console.error(\"[Pixi'VN] Error going back\")\n }\n }\n private static goBackInternal(steps: number, restoredStep: IHistoryStepData): IHistoryStepData {\n if (steps <= 0) {\n return restoredStep\n }\n if (GameStepManager._stepsHistory.length == 0) {\n return restoredStep\n }\n let lastHistoryStep = GameStepManager.lastHistoryStep\n if (lastHistoryStep) {\n try {\n let result = restoreDeepDiffChanges(restoredStep, lastHistoryStep.diff)\n GameStepManager._lastStepIndex = lastHistoryStep.index\n GameStepManager._stepsHistory.pop()\n return GameStepManager.goBackInternal(steps - 1, result)\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error applying diff\", e)\n return restoredStep\n }\n }\n else {\n return restoredStep\n }\n }\n\n /**\n * Return true if it is possible to go back.\n */\n public static get canGoBack(): boolean {\n return GameStepManager._stepsHistory.length > 1\n }\n\n /**\n * Add a label to the history.\n */\n public static clear() {\n GameStepManager._stepsHistory = []\n GameStepManager._openedLabels = []\n }\n\n /* Export and Import Methods */\n\n /**\n * Export the history to a JSON string.\n * @returns The history in a JSON string.\n */\n public static exportJson(): string {\n return JSON.stringify(this.export())\n }\n /**\n * Export the history to an object.\n * @returns The history in an object.\n */\n public static export(): ExportedStep {\n return {\n stepsHistory: GameStepManager._stepsHistory,\n openedLabels: GameStepManager._openedLabels,\n lastStepIndex: GameStepManager._lastStepIndex,\n originalStepData: GameStepManager._originalStepData,\n }\n }\n /**\n * Import the history from a JSON string.\n * @param dataString The history in a JSON string.\n */\n public static async importJson(dataString: string) {\n await GameStepManager.import(JSON.parse(dataString))\n }\n /**\n * Import the history from an object.\n * @param data The history in an object.\n */\n public static async import(data: object) {\n GameStepManager.clear()\n try {\n if (data.hasOwnProperty(\"stepsHistory\")) {\n GameStepManager._stepsHistory = (data as ExportedStep)[\"stepsHistory\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import stepsHistory data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"openedLabels\")) {\n GameStepManager._openedLabels = (data as ExportedStep)[\"openedLabels\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import openedLabels data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"lastStepIndex\")) {\n GameStepManager._lastStepIndex = (data as ExportedStep)[\"lastStepIndex\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import lastStepIndex data, so will be ignored\")\n }\n if (data.hasOwnProperty(\"originalStepData\")) {\n GameStepManager._originalStepData = (data as ExportedStep)[\"originalStepData\"]\n }\n else {\n console.warn(\"[Pixi'VN] Could not import originalStepData data, so will be ignored\")\n }\n\n if (GameStepManager.currentLabel && GameStepManager.currentLabel.onLoadStep) {\n await GameStepManager.currentLabel.onLoadStep(GameStepManager.currentLabelStepIndex || 0, GameStepManager.currentLabel)\n }\n }\n catch (e) {\n console.error(\"[Pixi'VN] Error importing data\", e)\n }\n }\n\n /**\n * Function to be executed at the end of the game. It should be set in the game initialization.\n * @example\n * ```typescript\n * GameStepManager.gameEnd = async (props) => {\n * props.navigate(\"/end\")\n * }\n * ```\n */\n static gameEnd: StepLabelType | undefined = undefined\n}\n","import { GameStorageManager } from \"../managers\"\n\n/**\n * StoredClassModel is a abstract class that contains the methods to store a class in the game.\n * I suggest you extend this class to create your own stored class.\n * @example\n * ```typescript\n * export class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n * constructor(id: string, props: CharacterBaseModelProps) {\n * super(\"___character___\", id)\n * this.defaultName = props.name\n * this.defaultSurname = props.surname\n * }\n * private defaultName: string = \"\"\n * get name(): string {\n * return this.getStorageProperty<string>(\"name\") || this.defaultName\n * }\n * set name(value: string) {\n * this.setStorageProperty<string>(\"name\", value)\n * }\n * private defaultSurname?: string\n * get surname(): string | undefined {\n * return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n * }\n * set surname(value: string | undefined) {\n * this.setStorageProperty<string>(\"surname\", value)\n * }\n * }\n * ```\n */\nexport default class StoredClassModel {\n /**\n * @param categoryId The id of the category. For example if you are storing a character class, you can use \"characters\" as categoryId. so all instances of the character class will be stored in the \"characters\" category.\n * @param id The id of instance of the class. This id must be unique for the category.\n */\n constructor(categoryId: string, id: string) {\n this.categoryId = categoryId\n this._id = id\n }\n private _id: string\n /**\n * Is id of the stored class. is unique for this class.\n */\n get id(): string {\n return this._id\n }\n private categoryId: string\n /**\n * Update a property in the storage.\n * @param propertyName The name of the property to set.\n * @param value The value to set. If is undefined, the property will be removed from the storage.\n */\n protected setStorageProperty<T>(propertyName: string, value: T | undefined): void {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (!storage) {\n storage = {}\n }\n // if storage not have a key with the id\n if (!storage.hasOwnProperty(this.id)) {\n storage[this.id] = {}\n }\n\n if (value === undefined || value === null) {\n if (storage[this.id].hasOwnProperty(propertyName)) {\n delete storage[this.id][propertyName]\n }\n }\n else {\n storage[this.id] = { ...storage[this.id], [propertyName]: value }\n }\n\n if (Object.keys(storage[this.id]).length === 0) {\n delete storage[this.id]\n }\n\n GameStorageManager.setVariable(this.categoryId, storage)\n }\n /**\n * Get a property from the storage.\n * @param propertyName The name of the property to get.\n * @returns The value of the property. If the property is not found, returns undefined.\n */\n protected getStorageProperty<T>(propertyName: string): T | undefined {\n let storage = GameStorageManager.getVariable<any>(this.categoryId)\n if (storage && storage.hasOwnProperty(this.id) && storage[this.id].hasOwnProperty(propertyName)) {\n return storage[this.id][propertyName]\n }\n return undefined\n }\n}\n","import { saveCharacter } from \"../decorators\"\nimport { CharacterBaseModelProps } from \"../interface\"\nimport { GameStorageManager } from \"../managers\"\nimport StoredClassModel from \"./StoredClassModel\"\n\n/**\n * CharacterBaseModel is a class that is used to create a character model.\n * I suggest you extend this class to create your own character models.\n * You must use the {@link saveCharacter} function to save the character in the game.\n * @example\n * ```typescript\n * export const liam = new CharacterBaseModel('liam', {\n * name: 'Liam',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * export const alice = new CharacterBaseModel('alice', {\n * name: 'Alice',\n * surname: 'Smith',\n * age: 25,\n * icon: \"https://pixijs.com/assets/eggHead.png\",\n * color: \"#9e2e12\"\n * });\n * saveCharacter([liam, alice]);\n * ```\n */\nexport default class CharacterBaseModel extends StoredClassModel implements CharacterBaseModelProps {\n /**\n * @param id The id of the character.\n * @param props The properties of the character.\n */\n constructor(id: string, props: CharacterBaseModelProps) {\n super(GameStorageManager.keysSystem.CHARACTER_CATEGORY_KEY, id)\n this.defaultName = props.name\n this.defaultSurname = props.surname\n this.defaultAge = props.age\n this._icon = props.icon\n this._color = props.color\n }\n private defaultName: string = \"\"\n /***\n * The name of the character.\n * If you set undefined, it will return the default name.\n */\n get name(): string {\n return this.getStorageProperty<string>(\"name\") || this.defaultName\n }\n set name(value: string | undefined) {\n this.setStorageProperty<string>(\"name\", value)\n }\n private defaultSurname?: string\n /**\n * The surname of the character.\n * If you set undefined, it will return the default surname.\n */\n get surname(): string | undefined {\n return this.getStorageProperty<string>(\"surname\") || this.defaultSurname\n }\n set surname(value: string | undefined) {\n this.setStorageProperty<string>(\"surname\", value)\n }\n private defaultAge?: number | undefined\n /**\n * The age of the character.\n * If you set undefined, it will return the default age.\n */\n get age(): number | undefined {\n return this.getStorageProperty<number>(\"age\") || this.defaultAge\n }\n set age(value: number | undefined) {\n this.setStorageProperty<number>(\"age\", value)\n }\n private _icon?: string\n /**\n * The icon of the character.\n */\n get icon(): string | undefined {\n return this._icon\n }\n private _color?: string | undefined\n /**\n * The color of the character.\n */\n get color(): string | undefined {\n return this._color\n }\n}\n","import { StorageElementType } from \"../types\"\nimport CharacterBaseModel from \"./CharacterBaseModel\"\n\nexport type DialogueData = {\n /**\n * The text of the dialogue.\n */\n text: string\n /**\n * The id of the character that is speaking.\n */\n character?: string\n /**\n * Other parameters that can be stored in the dialogue.\n */\n oltherParams?: Record<string | number | symbol, StorageElementType>\n}\n\n/**\n * Base class for all dialogue models.\n * You can extend this class, but it is not reccomended. You can use the oltherParams property to store any other data you need.\n * @example\n * ```typescript\n * setDialogue(new DialogueBaseModel(\"Hello World\", character))\n * ```\n */\nexport default class DialogueBaseModel<TCharacter extends CharacterBaseModel = CharacterBaseModel> implements DialogueData {\n /**\n * @param text The text of the dialogue.\n * @param character The id of the character that is speaking. \n * @param oltherParams Other parameters that can be stored in the dialogue.\n */\n constructor(text: string | DialogueData, character?: string | TCharacter, oltherParams: { [key: string]: StorageElementType } = {}) {\n if (typeof text === \"string\") {\n this.text = text\n if (typeof character === \"string\") {\n this.character = character\n }\n else {\n this.character = character?.id\n }\n this.oltherParams = oltherParams\n }\n else {\n this.text = text.text\n if (text.character) {\n this.character = text.character\n }\n this.oltherParams = text.oltherParams || {}\n }\n }\n /**\n * The text of the dialogue.\n */\n text: string = \"\"\n /**\n * The id of the character that is speaking.\n */\n character?: string\n /**\n * Other parameters that can be stored in the dialogue.\n */\n oltherParams: { [key: string]: StorageElementType } = {}\n /**\n * Export the dialogue to a DialogueBaseData object.\n * \n * @returns The data of the dialogue.\n */\n export(): DialogueData {\n return {\n text: this.text,\n character: this.character,\n oltherParams: this.oltherParams\n }\n }\n}\n","import { Label, LabelJson } from \"../classes\"\nimport LabelAbstract from \"../classes/LabelAbstract\"\nimport { LabelProps } from \"../interface\"\nimport { StepLabelType } from \"../types\"\nimport { LabelIdType } from \"../types/LabelIdType\"\n\nexport const registeredLabels: { [key: LabelIdType]: (LabelAbstract<any> | Label<any> | LabelJson<any>) } = {}\n\n/**\n * Creates a new label and registers it in the system.\n * **This function must be called at least once at system startup to register the label, otherwise the system cannot be used.**\n * @param id The id of the label, it must be unique\n * @param steps The steps of the label\n * @param props The properties of the label\n * @returns The created label\n */\nexport function newLabel<T extends {} = {}>(id: LabelIdType, steps: StepLabelType<T>[] | (() => StepLabelType<T>[]), props?: Omit<LabelProps<Label<T>>, \"choiseIndex\">): Label<T> {\n if (registeredLabels[id]) {\n console.info(`[Pixi'VN] Label ${id} already exists, it will be overwritten`)\n }\n let label = new Label<T>(id, steps, props)\n registeredLabels[id] = label\n return label\n}\n\n/**\n * Gets a label by its id\n * @param id The id of the label\n * @returns The label or undefined if it does not exist\n */\nexport function getLabelById<T = Label<any>>(id: LabelIdType): T | undefined {\n let label = registeredLabels[id]\n if (!label) {\n console.error(`[Pixi'VN] Label ${id} not found`)\n return\n }\n return label as T\n}\n\n/**\n * Saves a label in the system\n * @param label The label to be saved\n */\nexport function saveLabel<T extends LabelAbstract<any>>(label: T) {\n registeredLabels[label.id] = label\n}\n","import { CharacterBaseModel } from \"../classes\";\nimport { saveCharacter } from \"../decorators\";\n\nexport const juliette = new CharacterBaseModel('___pixivn_juliette___', {\n name: 'Juliette',\n age: 25,\n icon: \"https://firebasestorage.googleapis.com/v0/b/pixi-vn.appspot.com/o/public%2Fcharacters%2Fjuliette-square.webp?alt=media\",\n color: \"#ac0086\"\n});\n\nsaveCharacter(juliette);\n\nexport const eggHeadImage = \"https://pixijs.com/assets/eggHead.png\"\nexport const eggHeadName = `<span style=\"color:purple\">Egg Head</span>`\nexport const flowerTopImage = \"https://pixijs.com/assets/flowerTop.png\"\nexport const flowerTopName = `<span style=\"color:green\">Flower Top</span>`\nexport const helmlokImage = \"https://pixijs.com/assets/helmlok.png\"\nexport const helmlokName = `<span style=\"color:blue\">Helmlok</span>`\nexport const skullyImage = \"https://pixijs.com/assets/skully.png\"\nexport const skullyName = `<span style=\"color:red\">Skully</span>`\nexport const bunnyImage = \"https://pixijs.com/assets/bunny.png\"\nexport const bunnyName = `Bunny`\n","import { newLabel } from \"../decorators\"\nimport { setDialogue } from \"../functions\"\nimport { juliette } from \"./TestConstant\"\n\nconst STEP_LABEL_TEST_LABEL = \"___pixi_vn_step_label_test___\"\nexport const stepLabelTestLAbel = newLabel(STEP_LABEL_TEST_LABEL, [\n async () => {\n setDialogue({ character: juliette, text: \"Pixi'VN manages the succession of \\\"screens\\\" with steps. Each step is a function that can be asynchronous.\" })\n },\n async () => {\n setDialogue({ character: juliette, text: \"The labels are containers of steps, they are used to organize the steps in a more readable way. For start a steps sequence, you must call or jump to a label.\" })\n },\n async () => {\n setDialogue({ character: juliette, text: \"It is also possible to ask the player to make a choice.\" })\n },\n async () => {\n setDialogue({ character: juliette, text: \"Browsing through available tests is one way to test the steps/labels system.\" })\n },\n])\n"]}