@drincs/pixi-vn 1.6.0 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvas.cjs +1 -2
- package/dist/canvas.mjs +2 -3
- package/dist/characters.cjs +1 -2
- package/dist/characters.mjs +1 -2
- package/dist/{chunk-FIGGUFAM.mjs → chunk-D45QSSXG.mjs} +1 -2
- package/dist/{chunk-TKYEUKV4.mjs → chunk-HACUDOYJ.mjs} +1 -2
- package/dist/{chunk-UIXKMF72.mjs → chunk-IWAXXFXE.mjs} +1 -2
- package/dist/{chunk-2ZJFDDPE.mjs → chunk-L4IHQ3VT.mjs} +1 -2
- package/dist/{chunk-JJFD2BVW.mjs → chunk-TTRUPDAB.mjs} +1 -2
- package/dist/chunk-XSN6P5JL.mjs +0 -0
- package/dist/{chunk-EC6URLQW.mjs → chunk-ZW3MIPMS.mjs} +1 -2
- package/dist/history.cjs +1 -2
- package/dist/history.mjs +1 -2
- package/dist/index.cjs +2 -3
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +2 -3
- package/dist/motion.cjs +1 -2
- package/dist/motion.mjs +1 -2
- package/dist/narration.cjs +1 -2
- package/dist/narration.mjs +2 -3
- package/dist/sound.cjs +1 -2
- package/dist/sound.mjs +1 -2
- package/dist/storage.cjs +1 -2
- package/dist/storage.mjs +1 -2
- package/dist/vite-listener.cjs +1 -2
- package/dist/vite-listener.mjs +1 -2
- package/dist/vite.cjs +1 -2
- package/dist/vite.mjs +1 -2
- package/package.json +1 -1
- package/dist/canvas.cjs.map +0 -1
- package/dist/canvas.mjs.map +0 -1
- package/dist/characters.cjs.map +0 -1
- package/dist/characters.mjs.map +0 -1
- package/dist/chunk-2ZJFDDPE.mjs.map +0 -1
- package/dist/chunk-52EK6LYW.mjs +0 -2
- package/dist/chunk-52EK6LYW.mjs.map +0 -1
- package/dist/chunk-EC6URLQW.mjs.map +0 -1
- package/dist/chunk-FIGGUFAM.mjs.map +0 -1
- package/dist/chunk-JJFD2BVW.mjs.map +0 -1
- package/dist/chunk-TKYEUKV4.mjs.map +0 -1
- package/dist/chunk-UIXKMF72.mjs.map +0 -1
- package/dist/history.cjs.map +0 -1
- package/dist/history.mjs.map +0 -1
- package/dist/index.cjs.map +0 -1
- package/dist/index.mjs.map +0 -1
- package/dist/motion.cjs.map +0 -1
- package/dist/motion.mjs.map +0 -1
- package/dist/narration.cjs.map +0 -1
- package/dist/narration.mjs.map +0 -1
- package/dist/sound.cjs.map +0 -1
- package/dist/sound.mjs.map +0 -1
- package/dist/storage.cjs.map +0 -1
- package/dist/storage.mjs.map +0 -1
- package/dist/vite-listener.cjs.map +0 -1
- package/dist/vite-listener.mjs.map +0 -1
- package/dist/vite.cjs.map +0 -1
- package/dist/vite.mjs.map +0 -1
package/dist/narration.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/narration/decorators/RegisteredLabels.ts","../src/narration/NarrationManagerStatic.ts","../src/narration/NarrationManager.ts","../src/narration/classes/ChoiceMenuOption.ts","../src/narration/types/CloseType.ts","../src/narration/classes/CloseChoiceOption.ts","../src/narration/classes/Label.ts","../src/narration/classes/LabelAbstract.ts","../src/narration/decorators/newLabel.ts","../src/narration/index.ts"],"names":["registeredLabels","CachedMap","RegisteredLabels","get","id","label","logger","add","l","values","has","keys","RegisteredLabels_default","_NarrationManagerStatic","GameUnifier","NARRATION_STORAGE_KEY","SYSTEM_RESERVED_STORAGE_KEYS","value","nestedId","currentLabelStepIndex","currentLabelStepIndexId","labelId","currentLabel","stepSha1","obj","data","lastStep","list","item","min","max","options","usedRandomNumbers","allNumbers","_","i","randomIndex","randomNumber","createExportableElement","stepIndex","allOpenedLabels","oldStepIndex","openCount","stepSha","choiceMade","allChoicesMade","alredyMade","PixiError","biggestStep","stepId","res","__publicField","NarrationManagerStatic","NarrationManager","ignoreSameStep","dialogue","choices","inputValue","isGlued","openedLabels","historyInfo","choice","index","showWarn","choiceMenuOptions","props","runNow","steps","result","e","step","err","lastHistoryStep","tempLabel","type","error","glueDialogue","newText","d","onlyHaveNoChoice","option","alreadyChoices","info","defaultValue","promise","labelInfo","newChoiceOption","text","Close","newCloseChoiceOption","import_sha1","P","v","LabelAbstract","Label","sha1","newLabel","narration"],"mappings":"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","file":"narration.mjs","sourcesContent":["import { CachedMap } from \"../../classes\";\nimport { logger } from \"../../utils/log-utility\";\nimport Label from \"../classes/Label\";\nimport LabelAbstract from \"../classes/LabelAbstract\";\nimport { LabelIdType } from \"../types/LabelIdType\";\n\n/**\n * A Map that contains all labels registered and available to be used.\n * The key is the id of the label and the value is the label itself.\n */\nconst registeredLabels = new CachedMap<LabelIdType, LabelAbstract<any> | Label<any>>({ cacheSize: 10 });\n\nnamespace RegisteredLabels {\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 */\n export function get<T = LabelAbstract<any>>(id: LabelIdType): T | undefined {\n let label = registeredLabels.get(id);\n if (!label) {\n logger.error(`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 */\n export function add(label: LabelAbstract<any, any> | LabelAbstract<any, any>[]) {\n if (Array.isArray(label)) {\n label.forEach((l) => add(l));\n return;\n }\n if (registeredLabels.has(label.id)) {\n logger.info(`Label \"${label.id}\" already exists, it will be overwritten`);\n }\n registeredLabels.set(label.id, label);\n }\n\n /**\n * Get a list of all labels registered.\n * @returns An array of labels.\n */\n export function values(): LabelAbstract<any>[] {\n return Array.from(registeredLabels.values());\n }\n\n /**\n * Check if a label is registered\n * @param id The id of the label\n * @returns True if the label is registered, false otherwise\n */\n export function has(id: string): boolean {\n return registeredLabels.has(id);\n }\n\n /**\n * Get a list of all label ids registered.\n * @returns An array of label ids.\n */\n export function keys(): string[] {\n return Array.from(registeredLabels.keys());\n }\n}\nexport default RegisteredLabels;\n","import { GameUnifier, PixiError } from \"@drincs/pixi-vn/core\";\nimport { LabelAbstract } from \".\";\nimport { NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS } from \"../constants\";\nimport { createExportableElement } from \"../utils\";\nimport { logger } from \"../utils/log-utility\";\nimport Label from \"./classes/Label\";\nimport RegisteredLabels from \"./decorators/RegisteredLabels\";\nimport HistoryStep from \"./interfaces/HistoryStep\";\nimport OpenedLabel from \"./interfaces/OpenedLabel\";\nimport ChoicesMadeType from \"./types/ChoicesMadeType\";\nimport { LabelIdType } from \"./types/LabelIdType\";\n\ntype AllOpenedLabelsType = { [key: LabelIdType]: { biggestStep: number; openCount: number } };\n\ntype CurrentStepTimesCounterMemotyData = {\n stepCounters?: number[];\n usedRandomNumbers?: { [minmaxkey: string]: number[] };\n stepSha1: string;\n};\ntype CurrentStepTimesCounterMemoty = {\n [key: LabelIdType]: {\n [key: string]: CurrentStepTimesCounterMemotyData;\n };\n};\n\nexport default class NarrationManagerStatic {\n private constructor() {}\n static choiceMadeTemp: undefined | number = undefined;\n static lastHistoryStep: Omit<HistoryStep, \"diff\"> | null = null;\n /**\n * is a list of all labels that have been opened during the progression of the steps.\n * the key is the label id and the biggest step opened.\n */\n static get allOpenedLabels() {\n return (\n GameUnifier.getVariable<AllOpenedLabelsType>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.OPENED_LABELS_COUNTER_KEY,\n ) || {}\n );\n }\n static set allOpenedLabels(value: AllOpenedLabelsType) {\n GameUnifier.setVariable(NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS.OPENED_LABELS_COUNTER_KEY, value);\n }\n static getCurrentStepTimesCounterData(nestedId: string = \"\"): CurrentStepTimesCounterMemotyData | null {\n let currentLabelStepIndex = NarrationManagerStatic.currentLabelStepIndex;\n if (currentLabelStepIndex === null) {\n logger.error(\"currentLabelStepIndex is null\");\n return null;\n }\n let currentLabelStepIndexId = `${currentLabelStepIndex}${nestedId}`;\n let labelId = NarrationManagerStatic.currentLabelId;\n let currentLabel = NarrationManagerStatic._currentLabel;\n if (!labelId || currentLabelStepIndex === null || !currentLabel) {\n logger.error(\"currentLabelId or currentLabelStepIndex is null or currentLabel not found\");\n return null;\n }\n let stepSha1 = currentLabel.getStepSha(currentLabelStepIndex) || \"error\";\n let obj =\n GameUnifier.getVariable<CurrentStepTimesCounterMemoty>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_STEP_TIMES_COUNTER_KEY,\n ) || {};\n if (!obj[labelId]) {\n obj[labelId] = {};\n }\n if (!obj[labelId][currentLabelStepIndexId] || obj[labelId][currentLabelStepIndexId].stepSha1 != stepSha1) {\n obj[labelId][currentLabelStepIndexId] = { stepSha1: stepSha1 };\n }\n return obj[labelId][currentLabelStepIndexId];\n }\n private static setCurrentStepTimesCounterData(nestedId: string = \"\", data: CurrentStepTimesCounterMemotyData) {\n let currentLabelStepIndex = NarrationManagerStatic.currentLabelStepIndex;\n let currentLabelStepIndexId = currentLabelStepIndex + nestedId;\n let labelId = NarrationManagerStatic.currentLabelId;\n if (!labelId || currentLabelStepIndex === null) {\n logger.error(\"currentLabelId or currentLabelStepIndex is null\");\n return;\n }\n let obj =\n GameUnifier.getVariable<CurrentStepTimesCounterMemoty>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_STEP_TIMES_COUNTER_KEY,\n ) || {};\n if (!obj[labelId]) {\n obj[labelId] = {};\n }\n obj[labelId][currentLabelStepIndexId] = data;\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_STEP_TIMES_COUNTER_KEY,\n obj,\n );\n }\n static getCurrentStepTimesCounter(nestedId: string = \"\"): number {\n let lastStep = NarrationManagerStatic._stepCounter;\n let obj = NarrationManagerStatic.getCurrentStepTimesCounterData(nestedId);\n if (!obj) {\n logger.error(\"getCurrentStepTimesCounter obj is null\");\n return 0;\n }\n let list = obj.stepCounters || [];\n let listContainLastStep = list.find((item) => item === lastStep);\n if (!listContainLastStep) {\n list.push(lastStep);\n obj.stepCounters = list;\n NarrationManagerStatic.setCurrentStepTimesCounterData(nestedId, obj);\n }\n return list.length;\n }\n static getRandomNumber(\n min: number,\n max: number,\n options: {\n onceOnly?: boolean;\n nestedId?: string;\n } = {},\n ): number | undefined {\n let nestedId = options.nestedId || \"\";\n let onceonly = options.onceOnly || false;\n if (onceonly) {\n let obj = NarrationManagerStatic.getCurrentStepTimesCounterData(nestedId);\n if (!obj) {\n return undefined;\n }\n let usedRandomNumbers = obj.usedRandomNumbers || {};\n // get a random number between min and max and not in the usedRandomNumbers, if all numbers are in the usedRandomNumbers, return null\n let allNumbers = Array.from({ length: max - min + 1 }, (_, i) => i + min).filter(\n (item) => !usedRandomNumbers[`${min}-${max}`]?.includes(item),\n );\n if (allNumbers.length === 0) {\n return undefined;\n }\n let randomIndex = Math.floor(Math.random() * allNumbers.length);\n let randomNumber = allNumbers[randomIndex];\n if (!usedRandomNumbers[`${min}-${max}`]) {\n usedRandomNumbers[`${min}-${max}`] = [];\n }\n usedRandomNumbers[`${min}-${max}`].push(randomNumber);\n obj.usedRandomNumbers = usedRandomNumbers;\n NarrationManagerStatic.setCurrentStepTimesCounterData(nestedId, obj);\n return randomNumber;\n }\n return Math.floor(Math.random() * (max - min + 1)) + min;\n }\n static resetCurrentStepTimesCounter(nestedId: string = \"\") {\n let currentLabelStepIndex = NarrationManagerStatic.currentLabelStepIndex;\n let currentLabelStepIndexId = currentLabelStepIndex + nestedId;\n let labelId = NarrationManagerStatic.currentLabelId;\n if (!labelId || currentLabelStepIndex === null) {\n logger.error(\"currentLabelId or currentLabelStepIndex is null\");\n return;\n }\n let obj =\n GameUnifier.getVariable<CurrentStepTimesCounterMemoty>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_STEP_TIMES_COUNTER_KEY,\n ) || {};\n if (!obj[labelId]) {\n obj[labelId] = {};\n }\n obj[labelId][currentLabelStepIndexId] = { stepCounters: [], stepSha1: \"\" };\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_STEP_TIMES_COUNTER_KEY,\n obj,\n );\n }\n /**\n * is a list of all choices made by the player during the progression of the steps.\n */\n static get allChoicesMade() {\n return (\n GameUnifier.getVariable<ChoicesMadeType[]>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.ALL_CHOICES_MADE_KEY,\n ) || []\n );\n }\n static set allChoicesMade(value: ChoicesMadeType[]) {\n GameUnifier.setVariable(NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS.ALL_CHOICES_MADE_KEY, value);\n }\n static _stepCounter: number = 0;\n /**\n * Increase the last step index that occurred during the progression of the steps.\n */\n static increaseStepCounter() {\n NarrationManagerStatic._stepCounter++;\n }\n private static _openedLabels: OpenedLabel[] = [];\n static get openedLabels(): OpenedLabel[] {\n return createExportableElement(NarrationManagerStatic._openedLabels);\n }\n static set openedLabels(value: OpenedLabel[]) {\n NarrationManagerStatic._openedLabels = createExportableElement(value);\n }\n private static _originalOpenedLabels: OpenedLabel[] = [];\n static get originalOpenedLabels(): OpenedLabel[] {\n return createExportableElement(NarrationManagerStatic._originalOpenedLabels);\n }\n static set originalOpenedLabels(value: OpenedLabel[]) {\n NarrationManagerStatic._originalOpenedLabels = createExportableElement(value);\n }\n static get _currentLabel(): Label | undefined {\n if (NarrationManagerStatic.currentLabelId) {\n return RegisteredLabels.get(NarrationManagerStatic.currentLabelId);\n }\n }\n /**\n * currentLabelId is the current label id that occurred during the progression of the steps.\n */\n static get currentLabelId(): LabelIdType | undefined {\n if (NarrationManagerStatic._openedLabels.length > 0) {\n let item = NarrationManagerStatic._openedLabels[NarrationManagerStatic._openedLabels.length - 1];\n return item.label;\n }\n return undefined;\n }\n static get currentLabelStepIndex(): number | null {\n if (NarrationManagerStatic._openedLabels.length > 0) {\n let item = NarrationManagerStatic._openedLabels[NarrationManagerStatic._openedLabels.length - 1];\n return item.currentStepIndex;\n }\n return null;\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 * @param stepIndex The step index of the label.\n */\n static addLabelHistory(label: LabelIdType, stepIndex: number) {\n let allOpenedLabels = NarrationManagerStatic.allOpenedLabels;\n let oldStepIndex = NarrationManagerStatic.allOpenedLabels[label]?.biggestStep || 0;\n let openCount = NarrationManagerStatic.allOpenedLabels[label]?.openCount || 0;\n if (!oldStepIndex || oldStepIndex < stepIndex) {\n allOpenedLabels[label] = { biggestStep: stepIndex, openCount: openCount };\n NarrationManagerStatic.allOpenedLabels = allOpenedLabels;\n }\n }\n static addChoicesMade(label: LabelIdType, stepIndex: number, stepSha: string, choiceMade: number) {\n let allChoicesMade = NarrationManagerStatic.allChoicesMade;\n let alredyMade = allChoicesMade.findIndex(\n (item) =>\n item.labelId === label &&\n item.stepIndex === stepIndex &&\n item.choiceIndex === choiceMade &&\n item.stepSha1 === stepSha,\n );\n if (alredyMade < 0) {\n allChoicesMade.push({\n labelId: label,\n stepIndex: stepIndex,\n choiceIndex: choiceMade,\n stepSha1: stepSha,\n madeTimes: 1,\n });\n } else {\n allChoicesMade[alredyMade].madeTimes++;\n }\n NarrationManagerStatic.allChoicesMade = allChoicesMade;\n }\n /**\n * Add a label to the history.\n * @param label The label to add to the history.\n * @throws {PixiError} when the label is not found in the registered labels.\n */\n static pushNewLabel(label: LabelIdType) {\n let currentLabel = RegisteredLabels.get(label);\n if (!currentLabel) {\n throw new PixiError(\"unregistered_element\", `Label ${label} not found`);\n }\n NarrationManagerStatic._openedLabels.push({\n label: label,\n currentStepIndex: 0,\n });\n let allOpenedLabels = NarrationManagerStatic.allOpenedLabels;\n let biggestStep = NarrationManagerStatic.allOpenedLabels[label]?.biggestStep || 0;\n let openCount = NarrationManagerStatic.allOpenedLabels[label]?.openCount || 0;\n allOpenedLabels[label] = { biggestStep: biggestStep, openCount: openCount + 1 };\n NarrationManagerStatic.allOpenedLabels = allOpenedLabels;\n }\n /**\n * Increase the current step index of the current label.\n */\n static increaseCurrentStepIndex() {\n if (NarrationManagerStatic._openedLabels.length > 0) {\n let item = NarrationManagerStatic._openedLabels[NarrationManagerStatic._openedLabels.length - 1];\n NarrationManagerStatic._openedLabels[NarrationManagerStatic._openedLabels.length - 1] = {\n ...item,\n currentStepIndex: item.currentStepIndex + 1,\n };\n }\n }\n\n private static _onStepStart?: (stepId: number, label: LabelAbstract<any>) => void | Promise<void>;\n static set onStepStart(value: (stepId: number, label: LabelAbstract<any>) => void | Promise<void>) {\n NarrationManagerStatic._onStepStart = value;\n }\n static get onStepStart(): ((stepId: number, label: LabelAbstract<any>) => Promise<void[]>) | undefined {\n return async (stepId: number, label: LabelAbstract<any>) => {\n let res: (Promise<void> | void)[] = [];\n if (NarrationManagerStatic.onLoadingLabel && stepId === 0) {\n res.push(NarrationManagerStatic.onLoadingLabel(stepId, label));\n }\n if (NarrationManagerStatic._onStepStart) {\n res.push(NarrationManagerStatic._onStepStart(stepId, label));\n }\n return await Promise.all(res);\n };\n }\n static onLoadingLabel?: (stepId: number, label: LabelAbstract<any>) => void | Promise<void>;\n static onStepEnd?: (stepId: number, label: LabelAbstract<any>) => void | Promise<void>;\n}\n","import { CharacterInterface, DialogueInterface } from \"@drincs/pixi-vn\";\nimport { GameUnifier, PixiError } from \"@drincs/pixi-vn/core\";\nimport { NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS } from \"../constants\";\nimport type { StorageElementType } from \"../storage\";\nimport { createExportableElement } from \"../utils\";\nimport { logger } from \"../utils/log-utility\";\nimport LabelAbstract from \"./classes/LabelAbstract\";\nimport RegisteredLabels from \"./decorators/RegisteredLabels\";\nimport { StoredDialogue } from \"./interfaces/DialogueInterface\";\nimport HistoryStep, { AdditionalShaSpetsEnum } from \"./interfaces/HistoryStep\";\nimport NarrationGameState from \"./interfaces/NarrationGameState\";\nimport NarrationManagerInterface from \"./interfaces/NarrationManagerInterface\";\nimport StoredChoiceInterface, { StoredIndexedChoiceInterface } from \"./interfaces/StoredChoiceInterface\";\nimport NarrationManagerStatic from \"./NarrationManagerStatic\";\nimport ChoicesMadeType from \"./types/ChoicesMadeType\";\nimport { InputInfo } from \"./types/InputInfo\";\nimport { LabelIdType } from \"./types/LabelIdType\";\nimport { StepLabelPropsType, StepLabelResultType } from \"./types/StepLabelType\";\n\n/**\n * This class is a class that manages the steps and labels of the game.\n */\nexport default class NarrationManager implements NarrationManagerInterface {\n get currentStepTimesCounter(): number {\n return NarrationManagerStatic.getCurrentStepTimesCounter();\n }\n set currentStepTimesCounter(_: 0) {\n NarrationManagerStatic.resetCurrentStepTimesCounter();\n }\n getRandomNumber(min: number, max: number, options: { onceOnly?: boolean } = {}): number | undefined {\n return NarrationManagerStatic.getRandomNumber(min, max, options);\n }\n get stepCounter() {\n return NarrationManagerStatic._stepCounter;\n }\n get openedLabels() {\n return NarrationManagerStatic.openedLabels;\n }\n get currentLabel(): LabelAbstract<any> | undefined {\n return NarrationManagerStatic._currentLabel;\n }\n\n /* Edit History Methods */\n\n /**\n * Add a label to the history.\n * @param stepSha The sha1 of the step.\n * @param options The options.\n */\n private addStepHistory(\n stepSha: string,\n options: {\n choiceMade?: number;\n ignoreSameStep?: boolean;\n } = {},\n ) {\n const { choiceMade, ignoreSameStep } = options;\n let dialogue: StoredDialogue | undefined = undefined;\n let choices: StoredChoiceInterface[] | undefined = undefined;\n let inputValue: StorageElementType | undefined = undefined;\n let isGlued =\n GameUnifier.getVariable(NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS.LAST_STEP_GLUED) ===\n this.stepCounter;\n if (\n GameUnifier.getVariable<number>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY,\n ) === this.stepCounter\n ) {\n dialogue = GameUnifier.getVariable<StoredDialogue>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_DIALOGUE_MEMORY_KEY,\n );\n }\n if (\n GameUnifier.getVariable<number>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY,\n ) === this.stepCounter\n ) {\n choices = GameUnifier.getVariable<any>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_MENU_OPTIONS_MEMORY_KEY,\n ) as StoredChoiceInterface[];\n }\n if (\n GameUnifier.getVariable<StorageElementType>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_INPUT_ADDED_IN_STEP_MEMORY_KEY,\n ) === this.stepCounter\n ) {\n inputValue = GameUnifier.getVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_VALUE_MEMORY_KEY,\n );\n }\n const openedLabels = NarrationManagerStatic.openedLabels;\n let historyInfo: Omit<HistoryStep, \"diff\"> = {\n currentLabel: NarrationManagerStatic.currentLabelId,\n dialogue: dialogue,\n choices: choices,\n stepSha1: stepSha,\n index: this.stepCounter,\n labelStepIndex: NarrationManagerStatic.currentLabelStepIndex,\n choiceIndexMade: choiceMade,\n inputValue: inputValue,\n alreadyMadeChoices: this.alreadyCurrentStepMadeChoices,\n isGlued: isGlued,\n openedLabels: openedLabels,\n };\n NarrationManagerStatic.originalOpenedLabels = openedLabels;\n GameUnifier.addHistoryItem(historyInfo, { ignoreSameStep });\n NarrationManagerStatic.lastHistoryStep = historyInfo;\n NarrationManagerStatic.increaseStepCounter();\n }\n closeCurrentLabel() {\n if (!NarrationManagerStatic.currentLabelId) {\n logger.warn(\"No label to close\");\n return;\n }\n if (!this.currentLabel) {\n logger.error(\"currentLabel not found\");\n return;\n }\n let openedLabels = NarrationManagerStatic.openedLabels;\n openedLabels.pop();\n NarrationManagerStatic.openedLabels = openedLabels;\n GameUnifier.onLabelClosing(this.openedLabels.length);\n }\n closeAllLabels() {\n while (NarrationManagerStatic.openedLabels.length > 0) {\n this.closeCurrentLabel();\n GameUnifier.onLabelClosing(this.openedLabels.length);\n }\n }\n public isLabelAlreadyCompleted(label: LabelIdType | LabelAbstract<any>): boolean {\n let labelId: LabelIdType;\n if (typeof label === \"string\") {\n labelId = label;\n } else {\n labelId = label.id;\n }\n let allOpenedLabels = NarrationManagerStatic.allOpenedLabels;\n let lastStep = allOpenedLabels[labelId]?.biggestStep || 0;\n if (lastStep) {\n let currentLabel = RegisteredLabels.get(labelId);\n if (currentLabel) {\n return currentLabel.stepCount <= lastStep;\n }\n }\n return false;\n }\n private get alreadyCurrentStepMadeChoicesObj(): ChoicesMadeType[] | undefined {\n let currentLabelStepIndex = NarrationManagerStatic.currentLabelStepIndex;\n let currentLabel = this.currentLabel;\n if (currentLabelStepIndex === null || !currentLabel) {\n return;\n }\n let stepSha = currentLabel.getStepSha(currentLabelStepIndex);\n if (!stepSha) {\n logger.warn(\"stepSha not found, setting to ERROR\");\n stepSha = AdditionalShaSpetsEnum.ERROR;\n }\n return NarrationManagerStatic.allChoicesMade.filter((choice) => {\n return (\n choice.labelId === currentLabel?.id &&\n choice.stepIndex === currentLabelStepIndex &&\n choice.stepSha1 === stepSha\n );\n });\n }\n get alreadyCurrentStepMadeChoices(): number[] | undefined {\n return this.alreadyCurrentStepMadeChoicesObj?.map((choice) => choice.choiceIndex);\n }\n get isCurrentStepAlreadyOpened(): boolean {\n let currentLabel = NarrationManagerStatic.currentLabelId;\n if (currentLabel) {\n let lastStep = NarrationManagerStatic.allOpenedLabels[currentLabel]?.openCount || 0;\n if (\n NarrationManagerStatic.currentLabelStepIndex &&\n lastStep >= NarrationManagerStatic.currentLabelStepIndex\n ) {\n return true;\n }\n }\n return false;\n }\n public getTimesLabelOpened(label: LabelIdType): number {\n return NarrationManagerStatic.allOpenedLabels[label]?.openCount || 0;\n }\n public getTimesChoiceMade(index: number): number {\n return this.alreadyCurrentStepMadeChoicesObj?.find((choice) => choice.choiceIndex === index)?.madeTimes || 0;\n }\n addCurrentStepToHistory(): void {\n this.addStepHistory(AdditionalShaSpetsEnum.DEVELOPER, { ignoreSameStep: true });\n }\n\n /* Run Methods */\n\n private getCanContinue(options?: {\n /**\n * If true, show a warning in the console.\n * @default false\n */\n showWarn?: boolean;\n }): boolean {\n let showWarn = options?.showWarn || false;\n let choiceMenuOptions = this.choices;\n if (choiceMenuOptions && choiceMenuOptions.length > 0) {\n showWarn && logger.warn(\"The player must make a choice\");\n return false;\n }\n if (this.isRequiredInput) {\n showWarn && logger.warn(\"The player must enter a value\");\n return false;\n }\n return true;\n }\n get canContinue(): boolean {\n if (GameUnifier.runningStepsCount !== 0) {\n return false;\n }\n return this.getCanContinue();\n }\n private async onStepStart(label: LabelAbstract<any, any>, stepId: number) {\n let res: (void | Promise<void> | Promise<void[]>)[] = [];\n if (label.onStepStart) {\n res.push(label.onStepStart(stepId, label));\n }\n if (NarrationManagerStatic.onStepStart) {\n res.push(NarrationManagerStatic.onStepStart(stepId, label));\n }\n return await Promise.all(res);\n }\n private async onStepEnd(label: LabelAbstract<any, any>, stepId: number) {\n let res: (void | Promise<void>)[] = [];\n if (label.onStepEnd) {\n res.push(label.onStepEnd(stepId, label));\n }\n if (NarrationManagerStatic.onStepEnd) {\n res.push(NarrationManagerStatic.onStepEnd(stepId, label));\n }\n return await Promise.all(res);\n }\n public async continue(\n props: StepLabelPropsType,\n options: { steps?: number; runNow?: boolean; choiceMade?: number } = {},\n ) {\n const { runNow = false, steps = 1 } = options;\n if (!Number.isFinite(steps)) {\n logger.warn(`[continue] The parameter steps must be a valid finite number, received: ${steps}`);\n return;\n }\n if (steps <= 0) {\n logger.warn(`[continue] The parameter steps must be greater than 0, received: ${steps}`);\n return;\n }\n if (!runNow && !this.getCanContinue({ showWarn: true })) {\n return;\n }\n if (!runNow && GameUnifier.runningStepsCount !== 0) {\n GameUnifier.increaseContinueRequest(steps);\n return;\n }\n if (steps > 1) {\n GameUnifier.increaseContinueRequest(steps - 1);\n }\n GameUnifier.runningStepsCount++;\n let result: StepLabelResultType = undefined;\n try {\n if (GameUnifier.runningStepsCount === 1) {\n await GameUnifier.onPreContinue();\n }\n NarrationManagerStatic.increaseCurrentStepIndex();\n result = await this.runCurrentStep(props, options);\n } catch (e) {\n logger.error(\"Error continuing\", e);\n throw e;\n } finally {\n GameUnifier.runningStepsCount--;\n result = (await this.afterRunCurrentStep(props)) || result;\n }\n return result;\n }\n private async afterRunCurrentStep(props: StepLabelPropsType<any>) {\n if (GameUnifier.runningStepsCount === 0 && GameUnifier.continueRequestsCount !== 0) {\n return await GameUnifier.processNavigationRequests(props);\n }\n if (this.openedLabels.length === 0) {\n if (GameUnifier.onEnd) {\n return await GameUnifier.onEnd(props, { labelId: \"end\" });\n } else {\n logger.error(\n \"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/other-narrative-features.html#how-manage-the-end-of-the-game\",\n );\n }\n }\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 options The options.\n * @returns StepLabelResultType or undefined.\n */\n private async runCurrentStep<T extends {}>(\n props: StepLabelPropsType<T>,\n options: {\n /**\n * The index of the choice made by the player. (This params is used in the choice menu)\n */\n choiceMade?: number;\n } = {},\n ): Promise<StepLabelResultType> {\n const { choiceMade } = options;\n if (NarrationManagerStatic.currentLabelId) {\n let currentLabelStepIndex = NarrationManagerStatic.currentLabelStepIndex;\n if (currentLabelStepIndex === null) {\n logger.error(\"currentLabelStepIndex is null\");\n return;\n }\n let currentLabel = NarrationManagerStatic._currentLabel as LabelAbstract<any, T> | undefined;\n if (!currentLabel) {\n logger.error(\"currentLabel not found\");\n return;\n }\n if (currentLabel.stepCount > currentLabelStepIndex) {\n try {\n await this.onStepStart(currentLabel, currentLabelStepIndex);\n } catch (e) {\n logger.error(\"Error running onStepStart\", e);\n if (this.onStepError) {\n await this.onStepError(e, props);\n }\n return;\n }\n let step = currentLabel.getStepById(currentLabelStepIndex);\n if (!step) {\n logger.error(\"step not found\");\n return;\n }\n let stepSha = currentLabel.getStepSha(currentLabelStepIndex);\n if (!stepSha) {\n logger.warn(\"stepSha not found, setting to ERROR\");\n stepSha = AdditionalShaSpetsEnum.ERROR;\n }\n let result;\n let err = undefined;\n try {\n result = await step(props, { labelId: currentLabel.id });\n } catch (e) {\n logger.error(\"Error running step\", e);\n err = e;\n }\n\n try {\n let choiceMenuOptions = this.choices;\n if (choiceMenuOptions?.length === 1 && choiceMenuOptions[0].autoSelect) {\n let choice = choiceMenuOptions[0];\n result = await this.selectChoice(choice, props);\n }\n } catch (e) {\n logger.error(\"Error auto-selecting choice\", e);\n if (err === undefined) {\n err = e as any;\n }\n }\n\n try {\n let lastHistoryStep = NarrationManagerStatic.lastHistoryStep;\n if (choiceMade !== undefined && lastHistoryStep) {\n stepSha = lastHistoryStep.stepSha1;\n if (!stepSha) {\n logger.warn(\"stepSha not found, setting to ERROR\");\n stepSha = AdditionalShaSpetsEnum.ERROR;\n }\n NarrationManagerStatic.addChoicesMade(\n lastHistoryStep.currentLabel || \"error\",\n typeof lastHistoryStep.labelStepIndex === \"number\" ? lastHistoryStep.labelStepIndex : -1,\n lastHistoryStep.stepSha1 || AdditionalShaSpetsEnum.ERROR,\n choiceMade,\n );\n NarrationManagerStatic.choiceMadeTemp = choiceMade;\n }\n } catch (e) {\n logger.warn(\"Error adding choice made to history\", e);\n }\n\n try {\n // Only add to history if is the main step (not a nested call/jump)\n if (GameUnifier.runningStepsCount === 1) {\n NarrationManagerStatic.addLabelHistory(currentLabel.id, currentLabelStepIndex);\n this.addStepHistory(stepSha, {\n ...options,\n choiceMade: NarrationManagerStatic.choiceMadeTemp,\n });\n NarrationManagerStatic.choiceMadeTemp = undefined;\n }\n } catch (e) {\n logger.warn(\"Error adding step to history\", e);\n }\n\n try {\n this.currentLabel &&\n (await this.onStepEnd(this.currentLabel, NarrationManagerStatic.currentLabelStepIndex || 0));\n } catch (e) {\n logger.warn(\"Error running onStepEnd\", e);\n }\n\n if (err && this.onStepError) {\n await this.onStepError(err, props);\n }\n return result;\n } else if (this.openedLabels.length > 1) {\n this.closeCurrentLabel();\n return await this.continue(props, options);\n } else if (this.openedLabels.length === 1) {\n NarrationManagerStatic.openedLabels = [];\n return;\n }\n } else if (this.openedLabels.length === 0) {\n return;\n } else {\n logger.error(\"currentLabelId not found\");\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 * @param options Additional options.\n * @returns StepLabelResultType or undefined.\n * @throws {PixiError} when the label is not found in the registered labels.\n */\n public async call<T extends {} = {}>(\n label: LabelAbstract<any, T> | LabelIdType,\n props: StepLabelPropsType<T>,\n options?: {\n /**\n * The index of the choice made by the player. (This params is used in the choice menu)\n */\n choiceMade?: number;\n },\n ): Promise<StepLabelResultType> {\n const { choiceMade } = options || {};\n let labelId: LabelIdType;\n if (typeof label === \"string\") {\n labelId = label;\n } else {\n labelId = label.id;\n }\n GameUnifier.runningStepsCount++;\n let result: StepLabelResultType = undefined;\n try {\n let tempLabel = RegisteredLabels.get<LabelAbstract<any, T>>(labelId);\n if (!tempLabel) {\n throw new PixiError(\"unregistered_element\", `Label ${labelId} not found`);\n }\n\n NarrationManagerStatic.pushNewLabel(tempLabel.id);\n result = await this.runCurrentStep<T>(props, { choiceMade: choiceMade });\n } catch (e) {\n logger.error(\"Error calling label\", e);\n throw e;\n } finally {\n GameUnifier.runningStepsCount--;\n result = (await this.afterRunCurrentStep(props)) || result;\n }\n return result;\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 or the id of the label.\n * @param props The props to pass to the label.\n * @param options Additional options.\n * @returns StepLabelResultType or undefined.\n * @throws {PixiError} when the label is not found in the registered labels.\n */\n public async jump<T extends {}>(\n label: LabelAbstract<any, T> | LabelIdType,\n props: StepLabelPropsType<T>,\n options?: {\n /**\n * The index of the choice made by the player. (This params is used in the choice menu)\n */\n choiceMade?: number;\n },\n ): Promise<StepLabelResultType> {\n if (this.stepCounter === 0) {\n return await this.call(label, props, options);\n }\n if (this.openedLabels.length > 0) this.closeCurrentLabel();\n const { choiceMade } = options || {};\n let labelId: LabelIdType;\n if (typeof label === \"string\") {\n labelId = label;\n } else {\n labelId = label.id;\n }\n GameUnifier.runningStepsCount++;\n let result: StepLabelResultType = undefined;\n try {\n let tempLabel = RegisteredLabels.get<LabelAbstract<any, T>>(labelId);\n if (!tempLabel) {\n throw new PixiError(\"unregistered_element\", `Label ${labelId} not found`);\n }\n\n NarrationManagerStatic.pushNewLabel(tempLabel.id);\n result = await this.runCurrentStep<T>(props, { choiceMade: choiceMade });\n } catch (e) {\n logger.error(\"Error jumping to label\", e);\n throw e;\n } finally {\n GameUnifier.runningStepsCount--;\n result = (await this.afterRunCurrentStep(props)) || result;\n }\n return result;\n }\n /**\n * Select a choice from the choice menu and close the choice menu.\n * @param item The choice item selected by the player.\n * @param props The props to pass to the label.\n * @returns StepLabelResultType or undefined.\n * @throws {PixiError} when the choice type is not `\"call\"`, `\"jump\"`, or `\"close\"`.\n */\n public async selectChoice<T extends {}>(\n item: StoredIndexedChoiceInterface,\n props: StepLabelPropsType<T>,\n ): Promise<StepLabelResultType> {\n this.choices = undefined;\n const type = item.type;\n switch (type) {\n case \"call\":\n return await this.call(\n item.label,\n { ...item.props, ...props },\n {\n choiceMade: item.choiceIndex,\n },\n );\n case \"jump\":\n return await this.jump(\n item.label,\n { ...item.props, ...props },\n {\n choiceMade: item.choiceIndex,\n },\n );\n case \"close\":\n return await this.closeChoiceMenu(item, { ...item.props, ...props });\n default:\n logger.error(`Type ${type} not found`);\n throw new PixiError(\"invalid_usage\", `Type ${type} not found`);\n }\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 * @throws {PixiError} when `choice.type` is not `\"close\"`.\n * @example\n * ```typescript\n * narration.closeChoiceMenu(yourParams).then((result) => {\n * if (result) {\n * // your code\n * }\n * })\n * ```\n */\n public async closeChoiceMenu<T extends {} = {}>(\n choice: StoredIndexedChoiceInterface,\n props: StepLabelPropsType<T>,\n ): Promise<StepLabelResultType> {\n if (choice.type !== \"close\") {\n logger.error(\"For closeChoiceMenu, the type must be close\");\n throw new PixiError(\"invalid_usage\", \"For closeChoiceMenu, the type must be close\");\n }\n let choiceMade: number | undefined = undefined;\n if (typeof choice.choiceIndex === \"number\") {\n choiceMade = choice.choiceIndex;\n }\n if (choice.closeCurrentLabel) {\n this.closeCurrentLabel();\n }\n return await this.continue(props, { choiceMade });\n }\n\n /* Go Back & Refresh Methods */\n\n private get onStepError() {\n // Always return a runner that calls GameUnifier.runOnError so that\n // all registered handlers (including the legacy single `onError`)\n // are executed in order.\n return async (error: unknown, props: StepLabelPropsType) => {\n try {\n await GameUnifier.runOnError(error, props);\n } catch (e) {\n logger.error(\"Error in onError handler\", e);\n }\n };\n }\n\n public get dialogue():\n | (Partial<DialogueInterface> & {\n text: string | string[];\n character?: CharacterInterface | string;\n })\n | undefined {\n const dialogue = GameUnifier.getVariable<StoredDialogue>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_DIALOGUE_MEMORY_KEY,\n );\n if (!dialogue) {\n return undefined;\n }\n return {\n ...dialogue,\n character: dialogue.character\n ? GameUnifier.getCharacter(dialogue.character) || dialogue.character\n : undefined,\n };\n }\n /**\n * Dialogue to be shown in the game.\n * @throws {PixiError} when the dialogue contains functions or class instances that cannot be serialized to JSON.\n */\n public set dialogue(dialogue: DialogueInterface | string | string[] | undefined) {\n if (dialogue === undefined) {\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_DIALOGUE_MEMORY_KEY,\n undefined,\n );\n return;\n }\n\n if (typeof dialogue === \"string\" || Array.isArray(dialogue)) {\n dialogue = { text: dialogue };\n }\n\n if (this.dialogGlue) {\n let glueDialogue = GameUnifier.getVariable<StoredDialogue>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_DIALOGUE_MEMORY_KEY,\n );\n if (glueDialogue) {\n let newText = [];\n if (Array.isArray(glueDialogue.text)) {\n newText = [...glueDialogue.text];\n } else {\n newText = [glueDialogue.text];\n }\n if (Array.isArray(dialogue.text)) {\n newText = [...newText, ...dialogue.text];\n } else {\n newText = [...newText, dialogue.text];\n }\n dialogue.text = newText;\n dialogue.character = dialogue.character || glueDialogue.character;\n }\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_STEP_GLUED,\n this.stepCounter,\n );\n this.dialogGlue = false;\n }\n try {\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_DIALOGUE_MEMORY_KEY,\n createExportableElement({\n ...dialogue,\n character: typeof dialogue.character === \"string\" ? dialogue.character : dialogue.character?.id,\n }),\n );\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY,\n this.stepCounter,\n );\n } catch (e) {\n logger.error(\"DialogueInterface cannot contain functions or classes\");\n throw new PixiError(\"not_json_serializable\", \"ChoiceInterface cannot contain functions or classes\");\n }\n }\n public get choices(): StoredIndexedChoiceInterface[] | undefined {\n let d = GameUnifier.getVariable<any>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_MENU_OPTIONS_MEMORY_KEY,\n ) as StoredChoiceInterface[];\n if (d) {\n let onlyHaveNoChoice: StoredIndexedChoiceInterface[] = [];\n let options: StoredIndexedChoiceInterface[] = d.map((option, index) => {\n return {\n ...option,\n choiceIndex: index,\n };\n });\n let alreadyChoices = this.alreadyCurrentStepMadeChoices;\n options = options.filter((option, index) => {\n if (option.oneTime) {\n if (alreadyChoices && alreadyChoices.includes(index)) {\n return false;\n }\n }\n if (option.onlyHaveNoChoice) {\n onlyHaveNoChoice.push(option);\n return false;\n }\n return true;\n });\n if (options.length > 0) {\n return options;\n } else if (onlyHaveNoChoice.length > 0) {\n let firstOption = onlyHaveNoChoice[0];\n return [firstOption];\n }\n }\n return undefined;\n }\n /**\n * The options to be shown in the game.\n * @throws {PixiError} when a choice contains functions or class instances that cannot be serialized to JSON.\n */\n public set choices(options: StoredChoiceInterface[] | undefined) {\n if (!options || options.length === 0) {\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_MENU_OPTIONS_MEMORY_KEY,\n undefined,\n );\n return;\n }\n try {\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_MENU_OPTIONS_MEMORY_KEY,\n createExportableElement(options) as any,\n );\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY,\n this.stepCounter,\n );\n } catch (e) {\n logger.error(\"ChoiceInterface cannot contain functions or classes\");\n throw new PixiError(\"not_json_serializable\", \"ChoiceInterface cannot contain functions or classes\");\n }\n }\n public get dialogGlue(): boolean {\n return GameUnifier.getFlag(SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY);\n }\n public set dialogGlue(value: boolean) {\n GameUnifier.setFlag(SYSTEM_RESERVED_STORAGE_KEYS.ADD_NEXT_DIALOG_TEXT_INTO_THE_CURRENT_DIALOG_FLAG_KEY, value);\n }\n public get inputValue(): StorageElementType {\n return GameUnifier.getVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_VALUE_MEMORY_KEY,\n );\n }\n public set inputValue(value: StorageElementType) {\n this.removeInputRequest();\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_VALUE_MEMORY_KEY,\n value,\n );\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.LAST_INPUT_ADDED_IN_STEP_MEMORY_KEY,\n this.stepCounter,\n );\n }\n public get isRequiredInput(): boolean {\n return (\n GameUnifier.getVariable<InputInfo>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_INFO_MEMORY_KEY,\n )?.isRequired || false\n );\n }\n public get inputType(): string | undefined {\n return GameUnifier.getVariable<InputInfo>(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_INFO_MEMORY_KEY,\n )?.type;\n }\n public requestInput(info: Omit<InputInfo, \"isRequired\">, defaultValue?: StorageElementType) {\n (info as InputInfo).isRequired = true;\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_INFO_MEMORY_KEY,\n info,\n );\n if (defaultValue !== undefined) {\n GameUnifier.setVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_VALUE_MEMORY_KEY,\n defaultValue,\n );\n } else {\n GameUnifier.removeVariable(\n NARRATION_STORAGE_KEY,\n SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_VALUE_MEMORY_KEY,\n );\n }\n }\n public removeInputRequest() {\n GameUnifier.removeVariable(NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_INFO_MEMORY_KEY);\n GameUnifier.removeVariable(NARRATION_STORAGE_KEY, SYSTEM_RESERVED_STORAGE_KEYS.CURRENT_INPUT_VALUE_MEMORY_KEY);\n }\n\n public clear() {\n NarrationManagerStatic.openedLabels = [];\n NarrationManagerStatic._stepCounter = 0;\n }\n\n /* Export and Import Methods */\n\n public export(): NarrationGameState {\n return {\n openedLabels: createExportableElement(NarrationManagerStatic.openedLabels),\n stepCounter: this.stepCounter,\n };\n }\n\n private async onLoadingLabel(currentLabelStepIndex: number) {\n const promise = this.openedLabels.map(async (labelInfo) => {\n let res: (void | Promise<void>)[] = [];\n let label = RegisteredLabels.get(labelInfo.label);\n if (label) {\n if (label.onLoadingLabel) {\n res.push(label.onLoadingLabel(currentLabelStepIndex, label));\n }\n if (NarrationManagerStatic.onLoadingLabel) {\n res.push(NarrationManagerStatic.onLoadingLabel(currentLabelStepIndex, label));\n }\n }\n return await Promise.all(res);\n });\n return await Promise.all(promise);\n }\n public async restore(data: object, lastHistoryStep: Omit<HistoryStep, \"diff\"> | null) {\n this.clear();\n try {\n NarrationManagerStatic.lastHistoryStep = lastHistoryStep;\n if (data.hasOwnProperty(\"openedLabels\")) {\n NarrationManagerStatic.openedLabels = (data as NarrationGameState)[\"openedLabels\"];\n NarrationManagerStatic.originalOpenedLabels = NarrationManagerStatic.openedLabels;\n } else {\n logger.warn(\"Could not import openedLabels data, so will be ignored\");\n }\n if (data.hasOwnProperty(\"stepCounter\")) {\n NarrationManagerStatic._stepCounter = (data as NarrationGameState)[\"stepCounter\"];\n } else {\n logger.warn(\"Could not import stepCounter data, so will be ignored\");\n }\n\n try {\n await this.onLoadingLabel(NarrationManagerStatic.currentLabelStepIndex || 0);\n } catch (e) {\n logger.error(\"Error running onLoadingLabel\", e);\n }\n } catch (e) {\n logger.error(\"Error importing data\", e);\n }\n }\n}\n","import { ChoiceInterface } from \"@drincs/pixi-vn\";\nimport { StorageObjectType } from \"../../storage\";\nimport { ChoiceOptionInterface } from \"../interfaces/StoredChoiceInterface\";\nimport { LabelIdType } from \"../types/LabelIdType\";\nimport LabelRunModeType from \"../types/LabelRunModeType\";\nimport Label from \"./Label\";\nimport LabelAbstract from \"./LabelAbstract\";\n\ninterface ChoiceMenuOptionOptions\n extends Omit<ChoiceInterface, \"text\" | \"label\" | \"type\" | \"props\" | \"closeCurrentLabel\"> {\n /**\n * Type of the label to be opened. @default \"call\"\n */\n type?: LabelRunModeType;\n}\n\n/**\n * Function to create a new choice menu option.\n * @example\n * ```typescript\n * newChoiceOption(\"Hello\", HelloLabel, {})\n * ```\n */\nexport function newChoiceOption<T extends StorageObjectType>(\n text: ChoiceInterface[\"text\"],\n label: Label<T> | LabelAbstract<any, T> | LabelIdType,\n props: T,\n options?: ChoiceMenuOptionOptions\n): ChoiceOptionInterface {\n const labelId = typeof label === \"string\" ? label : label.id;\n return {\n ...options,\n label: labelId,\n props: props,\n text,\n type: options?.type || \"call\",\n };\n}\n","export type CloseType = \"close\"\nexport const Close: CloseType = \"close\"","import { ChoiceInterface } from \"@drincs/pixi-vn\";\nimport { CloseChoiceOptionInterface } from \"../interfaces/StoredChoiceInterface\";\nimport { Close } from \"../types/CloseType\";\n\ninterface ChoiceMenuOptionCloseOptions\n extends Omit<ChoiceInterface, \"text\" | \"label\" | \"type\" | \"props\" | \"closeCurrentLabel\"> {\n /**\n * If true, the current label will be closed. @default false\n */\n closeCurrentLabel?: boolean;\n}\n\n/**\n * Function to create a new choice menu option that will close the menu.\n * @example\n * ```typescript\n * newCloseChoiceOption(\"Return\")\n * ```\n */\nexport function newCloseChoiceOption(\n text: ChoiceInterface[\"text\"],\n options?: ChoiceMenuOptionCloseOptions\n): CloseChoiceOptionInterface {\n return {\n ...options,\n type: Close,\n text,\n };\n}\n","import sha1 from \"crypto-js/sha1\";\nimport { LabelProps } from \"../..\";\nimport { logger } from \"../../utils/log-utility\";\nimport { AdditionalShaSpetsEnum } from \"../interfaces/HistoryStep\";\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 * canvas.clear()\n * narration.dialogue = { character: liam, text: \"Which test do you want to perform?\" }\n * narration.choices = [\n * newChoiceOption(\"Events Test\", eventsTestLabel),\n * newChoiceOption(\"Show Image Test\", showImageTest),\n * ]\n * },\n * (props) => narration.jump(START_LABEL_ID, props),\n * ]\n * )\n *\n * narration.call(StartLabel)\n * ```\n */\nexport default class Label<T extends {} = {}> extends LabelAbstract<Label<T>, T> {\n public get stepCount(): number {\n return this.steps.length;\n }\n public getStepById(stepId: number): StepLabelType<T> | undefined {\n return this.steps[stepId];\n }\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 public getStepSha(index: number): string {\n if (index < 0 || index >= this.steps.length) {\n logger.warn(\"stepSha not found, setting to ERROR\");\n return AdditionalShaSpetsEnum.ERROR;\n }\n try {\n let step = this.steps[index];\n let sha1String = sha1(step.toString().toLocaleLowerCase());\n return sha1String.toString();\n } catch (e) {\n logger.warn(\"stepSha not found, setting to ERROR\", e);\n return AdditionalShaSpetsEnum.ERROR;\n }\n }\n}\n","import RegisteredLabels from \"../decorators/RegisteredLabels\";\nimport LabelProps from \"../interfaces/LabelProps\";\nimport { LabelIdType } from \"../types/LabelIdType\";\nimport { StepLabelType } from \"../types/StepLabelType\";\n\nexport default abstract class LabelAbstract<TLabel, TProps extends {} = {}, StepIdType = number>\n implements LabelProps<TLabel, StepIdType>\n{\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, StepIdType>) {\n this.id = id;\n this._onStepStart = props?.onStepStart;\n this._onLoadingLabel = props?.onLoadingLabel;\n this._onStepEnd = props?.onStepEnd;\n }\n\n /**\n * Get the id of the label. This variable is used in the system to get the label by id, {@link RegisteredLabels.get}\n */\n readonly id: LabelIdType;\n\n /**\n * Get the number of steps in the label. This variable is used in the system to get the number of steps in the label.\n * @returns The number of steps in the label\n */\n public abstract get stepCount(): number;\n\n /**\n * Get the sha of the step\n * @param index Index of the step\n */\n public abstract getStepSha(stepId: StepIdType): string | undefined;\n\n /**\n * Get the step by id\n * @param stepId Id of the step\n * @return The step or undefined if it does not exist\n */\n public abstract getStepById(stepId: StepIdType): StepLabelType<TProps> | undefined;\n\n private _onStepStart: ((stepId: StepIdType, label: TLabel) => void | Promise<void>) | undefined;\n public get onStepStart(): ((stepId: StepIdType, label: TLabel) => void | Promise<void>) | undefined {\n return async (stepId: StepIdType, label: TLabel) => {\n if (this._onLoadingLabel && stepId === 0) {\n await this._onLoadingLabel(stepId, label);\n }\n if (this._onStepStart) {\n return await this._onStepStart(stepId, label);\n }\n };\n }\n\n private _onLoadingLabel: ((stepId: StepIdType, label: TLabel) => void | Promise<void>) | undefined;\n public get onLoadingLabel(): ((stepId: StepIdType, label: TLabel) => void | Promise<void>) | undefined {\n return this._onLoadingLabel;\n }\n\n private _onStepEnd: ((stepId: StepIdType, label: TLabel) => void | Promise<void>) | undefined;\n public get onStepEnd(): ((stepId: StepIdType, label: TLabel) => void | Promise<void>) | undefined {\n return this._onStepEnd;\n }\n}\n","import Label from \"../classes/Label\";\nimport LabelProps from \"../interfaces/LabelProps\";\nimport { LabelIdType } from \"../types/LabelIdType\";\nimport LabelSteps from \"../types/LabelSteps\";\nimport RegisteredLabels from \"./RegisteredLabels\";\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 default function newLabel<T extends {} = {}>(\n id: LabelIdType,\n steps: LabelSteps<T> | (() => LabelSteps<T>),\n props?: LabelProps<Label<T>>\n): Label<T> {\n let label = new Label<T>(id, steps, props);\n RegisteredLabels.add(label);\n return label;\n}\n","import { NarrationManagerInterface } from \"..\";\nimport NarrationManager from \"./NarrationManager\";\n\nexport { newChoiceOption } from \"./classes/ChoiceMenuOption\";\nexport { newCloseChoiceOption } from \"./classes/CloseChoiceOption\";\nexport { default as Label } from \"./classes/Label\";\nexport { default as LabelAbstract } from \"./classes/LabelAbstract\";\nexport { default as newLabel } from \"./decorators/newLabel\";\nexport { default as RegisteredLabels } from \"./decorators/RegisteredLabels\";\nexport type { default as ChoiceInterface } from \"./interfaces/ChoiceInterface\";\nexport type { default as DialogueInterface } from \"./interfaces/DialogueInterface\";\nexport type { default as HistoryStep } from \"./interfaces/HistoryStep\";\nexport type { default as LabelProps } from \"./interfaces/LabelProps\";\nexport type { default as NarrationGameState } from \"./interfaces/NarrationGameState\";\nexport type { default as NarrationHistory } from \"./interfaces/NarrationHistory\";\nexport type { default as NarrationManagerInterface } from \"./interfaces/NarrationManagerInterface\";\nexport type { default as OpenedLabel } from \"./interfaces/OpenedLabel\";\nexport type { default as StepLabelProps } from \"./interfaces/StepLabelProps\";\nexport type { default as StepLabelResult } from \"./interfaces/StepLabelResult\";\nexport type {\n ChoiceOptionInterface,\n CloseChoiceOptionInterface,\n default as StoredChoiceInterface,\n StoredIndexedChoiceInterface,\n} from \"./interfaces/StoredChoiceInterface\";\nexport { default as NarrationManagerStatic } from \"./NarrationManagerStatic\";\nexport { Close } from \"./types/CloseType\";\nexport type { CloseType } from \"./types/CloseType\";\nexport type { default as HistoryChoiceMenuOption } from \"./types/HistoryChoiceMenuOption\";\nexport type { InputInfo } from \"./types/InputInfo\";\nexport type { default as LabelRunModeType } from \"./types/LabelRunModeType\";\nexport type { default as LabelSteps } from \"./types/LabelSteps\";\nexport type { StepLabelPropsType, StepLabelResultType, StepLabelType } from \"./types/StepLabelType\";\nexport { narration };\n\nconst narration: NarrationManagerInterface = new NarrationManager();\n"]}
|
package/dist/sound.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sound/index.ts","../src/constants.ts","../src/utils/log-utility.ts","../src/utils/export-utility.ts","../src/sound/functions/channel-utility.ts","../src/sound/SoundManagerStatic.ts","../src/sound/functions/proxy-utility.ts","../src/sound/classes/AudioChannel.ts","../src/sound/functions/sound-utility.ts","../src/sound/SoundManager.ts","../src/sound/constants.ts"],"names":["GENERAL_CHANNEL","logger","message","optionalParams","createExportableElement","element","elementString","e","PixiError","calculateVolume","mediaVolume","channelVolume","SoundManagerStatic","__publicField","proxyMedia","mediaAlias","media","channel","target","prop","receiver","entry","value","AudioChannel","alias","channelOptions","aliasOrMediaAlias","soundAliasOrOptions","options","soundAlias","oldMedia","sound","timeoutId","item","GameUnifier","mediaId","mediaInstance","mediaMuted","instances","FilterMemoryToFilter","filter","res","f","filters","FilterToFilterMemory","SoundManager","filtersAll","sourceOptions","s","legacy","autoPause","volume","speed","paramOptions","PIXI","promise","assets","key","Sound","a","perChannelOptions","mediaInstances","result","data","soundsPlaying","promises","usedChannels","channelAlias","promises2","mediaInstanceData","instance","id"],"mappings":"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","file":"sound.cjs","sourcesContent":["import { GameUnifier } from \"@drincs/pixi-vn/core\";\nimport SoundManagerInterface from \"./interfaces/SoundManagerInterface\";\nimport SoundManager from \"./SoundManager\";\nimport SoundManagerStatic from \"./SoundManagerStatic\";\n\nexport { filters } from \"./constants\";\nexport type { default as AudioChannelInterface } from \"./interfaces/AudioChannelInterface\";\nexport type { default as IMediaInstance } from \"./interfaces/IMediaInstance\";\nexport type {\n ExportedSound,\n ExportedSoundPlay,\n default as SoundGameState,\n SoundPlay,\n} from \"./interfaces/SoundGameState\";\nexport type {\n ChannelOptions,\n default as SoundOptions,\n SoundPlayOptions,\n SoundPlayOptionsWithChannel,\n} from \"./interfaces/SoundOptions\";\nexport { default as SoundManagerStatic } from \"./SoundManagerStatic\";\nexport type { default as SoundFilterMemory } from \"./types/SoundFilterMemory\";\n\nconst sound: SoundManagerInterface = new SoundManager();\n\nGameUnifier.addOnPreContinue(async () => {\n try {\n SoundManagerStatic.delayTimeoutInstances.forEach((id) => {\n clearTimeout(id[0]);\n const instance = SoundManagerStatic.mediaInstances[id[1]];\n if (instance) {\n instance.instance.paused = false;\n }\n });\n SoundManagerStatic.delayTimeoutInstances = [];\n Object.values(SoundManagerStatic.channels).forEach((channel) => {\n if (!channel.background) {\n channel.stopAll();\n }\n });\n } catch (e) {}\n});\n\nexport { sound };\n","import type { PauseType, RepeatType } from \"./canvas\";\n\nexport { version as PIXIVN_VERSION } from \"../package.json\";\n/**\n * @deprecated\n */\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 * @deprecated\n */\nexport function Pause(duration: number): PauseType {\n return {\n type: \"pause\",\n duration: duration,\n };\n}\n\n/**\n * Is a special alias to indicate the game layer.\n */\nexport const CANVAS_APP_GAME_LAYER_ALIAS = \"__game_layer__\";\n\nexport const CANVAS_CONTAINER_ID = \"Container\";\nexport const CANVAS_IMAGE_CONTAINER_ID = \"ImageContainer\";\nexport const CANVAS_IMAGE_ID = \"Image\";\nexport const CANVAS_SPRITE_ID = \"Sprite\";\nexport const CANVAS_TEXT_ID = \"Text\";\nexport const CANVAS_VIDEO_ID = \"Video\";\n\n/**\n * The default audio channel for sounds that don't specify one.\n */\nexport const GENERAL_CHANNEL = \"general\";\nexport const MAIN_STORAGE_KEY = \"storage\";\nexport const TEMP_STORAGE_KEY = \"temp\";\nexport const NARRATION_STORAGE_KEY = \"narration\";\nexport const FLAGS_KEY = \"flags\";\n\nexport const SYSTEM_RESERVED_STORAGE_KEYS = {\n /**\n * The key of the current dialogue memory\n */\n CURRENT_DIALOGUE_MEMORY_KEY: \"dialogue\",\n /**\n * The key of step counter of the current dialogue memory\n */\n LAST_DIALOGUE_ADDED_IN_STEP_MEMORY_KEY: \"dialogue:step_counter\",\n /**\n * The key of the current menu options memory\n */\n CURRENT_MENU_OPTIONS_MEMORY_KEY: \"choice:options\",\n /**\n * The key of the last menu options added in the step memory\n */\n LAST_MENU_OPTIONS_ADDED_IN_STEP_MEMORY_KEY: \"choice:step_counter\",\n /**\n * The key of the input memory. This value can be read by pixi-vn json importer\n */\n CURRENT_INPUT_VALUE_MEMORY_KEY: \"input:value\",\n /**\n * The key of the last input added in the step memory\n */\n LAST_INPUT_ADDED_IN_STEP_MEMORY_KEY: \"input:step_counter\",\n /**\n * The key of the current input info\n */\n CURRENT_INPUT_INFO_MEMORY_KEY: \"input:info\",\n /**\n * The key of the characters memory\n */\n CHARACTER_CATEGORY_KEY: \"character\",\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 * The key of a list of all labels that have been opened during the progression of the steps.\n */\n OPENED_LABELS_COUNTER_KEY: \"label:opened\",\n /**\n * The key of a list of all choices that have been made during the progression of the steps.\n */\n ALL_CHOICES_MADE_KEY: \"choices:made\",\n /**\n * The key of the current step times counter.\n * This value was added to introduce Ink Sequences, cycles and other alternatives https://github.com/inkle/ink/blob/master/Documentation/WritingWithInk.md#sequences-cycles-and-other-alternatives\n */\n CURRENT_STEP_TIMES_COUNTER_KEY: \"label:history\",\n /**\n * The key of the last dialogue step glued in the step memory\n */\n LAST_STEP_GLUED: \"glue:last_step\",\n};\n","export namespace logger {\n export const log = (message?: any, ...optionalParams: any[]) =>\n console.log(`[Pixi’VN] ${message}`, ...optionalParams);\n export const warn = (message?: any, ...optionalParams: any[]) =>\n console.warn(`[Pixi’VN] ${message}`, ...optionalParams);\n export const error = (message?: any, ...optionalParams: any[]) =>\n console.error(`[Pixi’VN] ${message}`, ...optionalParams);\n export const info = (message?: any, ...optionalParams: any[]) =>\n console.info(`[Pixi’VN] ${message}`, ...optionalParams);\n}\n","import { PixiError } from \"@drincs/pixi-vn/core\";\nimport { logger } from \"./log-utility\";\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 * @throws {PixiError} when the element is not JSON serializable (e.g. contains functions or class instances).\n */\nexport function createExportableElement<T>(element: T): T {\n try {\n if (typeof element === \"undefined\") {\n return element;\n }\n let elementString = JSON.stringify(element);\n return JSON.parse(elementString);\n } catch (e) {\n logger.error(\"Error creating exportable element\", element, e);\n throw new PixiError(\"not_json_serializable\", \"Error creating exportable element\");\n }\n}\n","/**\n * This function calculates the final volume of a sound by multiplying the media volume and the channel volume.\n * If one of the volumes is undefined, it returns the other volume. If both are undefined, it returns 1.\n * @param mediaVolume The volume of the media instance, which can be undefined.\n * @param channelVolume The volume of the audio channel, which can be undefined.\n * @returns The final volume of the sound, or 1 if both mediaVolume and channelVolume are undefined.\n */\nexport function calculateVolume(mediaVolume: number | undefined, channelVolume: number | undefined): number {\n if (mediaVolume === undefined && channelVolume === undefined) {\n return 1;\n } else if (channelVolume === undefined) {\n return mediaVolume!;\n } else if (mediaVolume === undefined) {\n return channelVolume;\n }\n // if mediaVolume is 0.5 and channelVolume is 0.5, the result should be 0.25\n // if mediaVolume is 0.7 and channelVolume is 0.5, the result should be 0.35\n // if mediaVolume is 0.5 and channelVolume is 0.7, the result should be 0.35\n return mediaVolume * channelVolume;\n}\n","import AudioChannelInterface from \"./interfaces/AudioChannelInterface\";\nimport IMediaInstance from \"./interfaces/IMediaInstance\";\nimport { SoundPlayOptions } from \"./interfaces/SoundOptions\";\n\nexport default class SoundManagerStatic {\n private constructor() {}\n static mediaInstances: {\n [alias: string]: {\n channelAlias: string;\n soundAlias: string;\n instance: IMediaInstance;\n stepCounter: number;\n options: SoundPlayOptions;\n };\n } = {};\n static channels: { [alias: string]: AudioChannelInterface } = {};\n static delayTimeoutInstances: [number | NodeJS.Timeout, string][] = [];\n}\n","import { IMediaInstance } from \"@pixi/sound\";\nimport SoundManagerStatic from \"../SoundManagerStatic\";\nimport type AudioChannel from \"../classes/AudioChannel\";\nimport { calculateVolume } from \"./channel-utility\";\n\nexport function proxyMedia(mediaAlias: string, media: IMediaInstance, channel: AudioChannel): IMediaInstance {\n return new Proxy(media, {\n get(target, prop, receiver) {\n switch (prop) {\n case \"volume\":\n case \"muted\": {\n const entry = SoundManagerStatic.mediaInstances[mediaAlias];\n if (entry) {\n return entry.options[prop as keyof typeof entry.options];\n }\n return Reflect.get(target, prop, receiver);\n }\n case \"paused\":\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n set(target, prop, value, receiver) {\n if (mediaAlias in SoundManagerStatic.mediaInstances) {\n switch (prop) {\n case \"volume\":\n SoundManagerStatic.mediaInstances[mediaAlias].options[prop] = value;\n value = calculateVolume(value, channel.channelOptions.volume);\n return Reflect.set(target, prop, value, receiver);\n case \"muted\":\n SoundManagerStatic.mediaInstances[mediaAlias].options[prop] = value;\n if (channel.channelOptions.muted) {\n return Reflect.set(target, prop, true, receiver);\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n case \"loop\":\n case \"delay\":\n case \"end\":\n case \"filters\":\n case \"singleInstance\":\n case \"speed\":\n case \"sprite\":\n case \"start\":\n SoundManagerStatic.mediaInstances[mediaAlias].options[prop] = value;\n default:\n return Reflect.set(target, prop, value, receiver);\n }\n }\n return Reflect.set(target, prop, value, receiver);\n },\n });\n}\n","import { GameUnifier } from \"@drincs/pixi-vn/core\";\nimport { sound } from \"@pixi/sound\";\nimport { calculateVolume } from \"../functions/channel-utility\";\nimport { proxyMedia } from \"../functions/proxy-utility\";\nimport AudioChannelInterface from \"../interfaces/AudioChannelInterface\";\nimport IMediaInstance from \"../interfaces/IMediaInstance\";\nimport { ChannelOptions, SoundPlayOptions } from \"../interfaces/SoundOptions\";\nimport SoundManagerStatic from \"../SoundManagerStatic\";\n\nexport default class AudioChannel implements AudioChannelInterface {\n constructor(\n readonly alias: string,\n readonly channelOptions: ChannelOptions = {},\n ) {}\n async play(alias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;\n async play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;\n async play(\n aliasOrMediaAlias: string,\n soundAliasOrOptions?: string | SoundPlayOptions,\n options?: SoundPlayOptions,\n ): Promise<IMediaInstance> {\n let mediaAlias: string;\n let soundAlias: string;\n if (typeof soundAliasOrOptions === \"string\") {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = soundAliasOrOptions;\n } else {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = aliasOrMediaAlias;\n options = soundAliasOrOptions;\n }\n if (mediaAlias in SoundManagerStatic.mediaInstances) {\n const oldMedia = SoundManagerStatic.mediaInstances[mediaAlias];\n oldMedia.instance.stop();\n options = {\n ...oldMedia.options,\n ...options,\n };\n }\n const media = proxyMedia(\n mediaAlias,\n await sound.play(soundAlias, {\n ...(options ?? {}),\n filters: [...(this.channelOptions.filters || []), ...(options?.filters || [])],\n muted: Boolean(this.channelOptions.muted) || Boolean(options?.muted),\n volume: calculateVolume(options?.volume, this.channelOptions.volume),\n }),\n this,\n );\n if (options?.delay) {\n media.paused = true;\n const timeoutId = setTimeout(() => {\n media.paused = false;\n SoundManagerStatic.delayTimeoutInstances = SoundManagerStatic.delayTimeoutInstances.filter(\n (item) => item[0] !== timeoutId,\n );\n }, options.delay * 1000);\n SoundManagerStatic.delayTimeoutInstances.push([timeoutId, mediaAlias]);\n }\n SoundManagerStatic.mediaInstances[mediaAlias] = {\n channelAlias: this.alias,\n soundAlias: soundAlias,\n instance: media,\n stepCounter: GameUnifier.stepCounter,\n options: {\n volume: options?.volume ?? 1,\n muted: options?.muted ?? false,\n loop: options?.loop ?? false,\n ...(options ?? {}),\n },\n };\n media.on(\"end\", () => {\n delete SoundManagerStatic.mediaInstances[mediaAlias];\n });\n return media;\n }\n private updateMediaVolume() {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias) {\n const mediaVolume = mediaInstance.options.volume ?? 1;\n mediaInstance.instance.volume = mediaVolume;\n }\n }\n }\n get volume(): number {\n return this.channelOptions.volume ?? 1;\n }\n set volume(value: number) {\n this.channelOptions.volume = value;\n this.updateMediaVolume();\n }\n private updateMediaMuted() {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias) {\n const mediaMuted = mediaInstance.options.muted ?? false;\n // Apply only the per-media muted state; the proxy is responsible for\n // enforcing channel-level muting without overwriting per-media options.\n mediaInstance.instance.muted = mediaMuted;\n }\n }\n }\n get muted(): boolean {\n return this.channelOptions.muted ?? false;\n }\n set muted(value: boolean) {\n this.channelOptions.muted = value;\n this.updateMediaMuted();\n }\n toggleMuteAll(): boolean {\n this.muted = !this.muted;\n return this.muted;\n }\n get mediaInstances(): IMediaInstance[] {\n return Object.values(SoundManagerStatic.mediaInstances).reduce((instances: IMediaInstance[], mediaInstance) => {\n if (mediaInstance.channelAlias === this.alias) {\n instances.push(mediaInstance.instance);\n }\n return instances;\n }, []);\n }\n get background(): boolean {\n return this.channelOptions.background || false;\n }\n stopAll() {\n for (const mediaAlias in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaAlias];\n if (mediaInstance.channelAlias === this.alias) {\n mediaInstance.instance.stop();\n delete SoundManagerStatic.mediaInstances[mediaAlias];\n }\n }\n return this;\n }\n pauseAll() {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias && !mediaInstance.instance.paused) {\n mediaInstance.instance.paused = true;\n }\n }\n return this;\n }\n resumeAll(): this {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias && mediaInstance.instance.paused) {\n mediaInstance.instance.paused = false;\n }\n }\n return this;\n }\n}\n","import { Filter, filters } from \"@pixi/sound\";\nimport { logger } from \"../../utils/log-utility\";\nimport SoundFilterMemory from \"../types/SoundFilterMemory\";\n\nexport function FilterMemoryToFilter(filter: SoundFilterMemory[]): Filter[] {\n let res: Filter[] = [];\n for (let f of filter) {\n if (f.type === \"TelephoneFilter\") {\n res.push(new filters.TelephoneFilter());\n } else if (f.type === \"StreamFilter\") {\n res.push(new filters.StreamFilter());\n } else if (f.type === \"StereoFilter\") {\n res.push(new filters.StereoFilter(f.pan));\n } else if (f.type === \"ReverbFilter\") {\n res.push(new filters.ReverbFilter(f.seconds, f.decay, f.reverse));\n } else if (f.type === \"MonoFilter\") {\n res.push(new filters.MonoFilter());\n } else if (f.type === \"EqualizerFilter\") {\n res.push(\n new filters.EqualizerFilter(f.f32, f.f64, f.f125, f.f250, f.f500, f.f1k, f.f2k, f.f4k, f.f8k, f.f16k)\n );\n } else if (f.type === \"DistortionFilter\") {\n res.push(new filters.DistortionFilter(f.amount));\n } else {\n logger.error(\"Unknown sound filter type\");\n }\n }\n return res;\n}\n\nexport function FilterToFilterMemory(filter?: Filter[]): SoundFilterMemory[] | undefined {\n if (!filter) return undefined;\n let res: SoundFilterMemory[] = [];\n for (let f of filter) {\n if (f instanceof filters.TelephoneFilter) {\n res.push({\n type: \"TelephoneFilter\",\n });\n } else if (f instanceof filters.StreamFilter) {\n res.push({\n type: \"StreamFilter\",\n });\n } else if (f instanceof filters.StereoFilter) {\n res.push({\n type: \"StereoFilter\",\n pan: f.pan,\n });\n } else if (f instanceof filters.ReverbFilter) {\n res.push({\n type: \"ReverbFilter\",\n seconds: f.seconds,\n decay: f.decay,\n reverse: f.reverse,\n });\n } else if (f instanceof filters.MonoFilter) {\n res.push({\n type: \"MonoFilter\",\n });\n } else if (f instanceof filters.EqualizerFilter) {\n res.push({\n type: \"EqualizerFilter\",\n f32: f.f32,\n f64: f.f64,\n f125: f.f125,\n f250: f.f250,\n f500: f.f500,\n f1k: f.f1k,\n f2k: f.f2k,\n f4k: f.f4k,\n f8k: f.f8k,\n f16k: f.f16k,\n });\n } else if (f instanceof filters.DistortionFilter) {\n res.push({\n type: \"DistortionFilter\",\n amount: f.amount,\n });\n } else {\n logger.error(\"Unknown sound filter type\");\n }\n }\n return res;\n}\n","import { GameUnifier } from \"@drincs/pixi-vn/core\";\nimport { default as PIXI } from \"@drincs/pixi-vn/pixi.js\";\nimport { Filter, filters, IMediaContext, Sound, sound } from \"@pixi/sound\";\nimport { GENERAL_CHANNEL } from \"../constants\";\nimport { createExportableElement } from \"../utils\";\nimport { logger } from \"../utils/log-utility\";\nimport AudioChannel from \"./classes/AudioChannel\";\nimport { FilterMemoryToFilter, FilterToFilterMemory } from \"./functions/sound-utility\";\nimport AudioChannelInterface from \"./interfaces/AudioChannelInterface\";\nimport IMediaInstance from \"./interfaces/IMediaInstance\";\nimport SoundGameState from \"./interfaces/SoundGameState\";\nimport SoundManagerInterface from \"./interfaces/SoundManagerInterface\";\nimport SoundOptions, { ChannelOptions, SoundPlayOptions, SoundPlayOptionsWithChannel } from \"./interfaces/SoundOptions\";\nimport SoundManagerStatic from \"./SoundManagerStatic\";\nimport SoundFilterMemory from \"./types/SoundFilterMemory\";\n\nexport default class SoundManager implements SoundManagerInterface {\n get context(): IMediaContext {\n return sound.context;\n }\n get filtersAll(): Filter[] {\n return sound.filtersAll;\n }\n set filtersAll(filtersAll: Filter[]) {\n sound.filtersAll = filtersAll.filter((f) => {\n return !(f instanceof filters.Filter);\n });\n }\n get supported(): boolean {\n return sound.supported;\n }\n\n _defaultChannelAlias = GENERAL_CHANNEL;\n get defaultChannelAlias(): string {\n return this._defaultChannelAlias;\n }\n set defaultChannelAlias(alias: string) {\n this._defaultChannelAlias = alias;\n }\n\n add(alias: string, sourceOptions: string) {\n return sound.add(alias, sourceOptions);\n }\n async edit(alias: string, options: SoundOptions): Promise<void> {\n let s = sound.find(alias);\n if (!s) {\n await this.load(alias);\n s = sound.find(alias);\n if (!s) {\n logger.error(`Sound with alias ${alias} not found after loading.`);\n return;\n }\n }\n s.options = options;\n }\n get useLegacy(): boolean {\n return sound.useLegacy;\n }\n set useLegacy(legacy: boolean) {\n sound.useLegacy = legacy;\n }\n get disableAutoPause(): boolean {\n return sound.disableAutoPause;\n }\n set disableAutoPause(autoPause: boolean) {\n sound.disableAutoPause = autoPause;\n }\n get volumeAll(): number {\n return sound.volumeAll;\n }\n set volumeAll(volume: number) {\n sound.volumeAll = volume;\n }\n get speedAll(): number {\n return sound.speedAll;\n }\n set speedAll(speed: number) {\n sound.speedAll = speed;\n }\n pauseAll(): this {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (!mediaInstance.instance.paused) {\n mediaInstance.instance.paused = true;\n }\n }\n return this;\n }\n resumeAll(): this {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.instance.paused) {\n mediaInstance.instance.paused = false;\n }\n }\n return this;\n }\n toggleMuteAll(): boolean {\n return sound.toggleMuteAll();\n }\n muteAll(): this {\n sound.muteAll();\n return this;\n }\n unmuteAll(): this {\n sound.unmuteAll();\n return this;\n }\n stopAll(): this {\n SoundManagerStatic.mediaInstances = {};\n sound.stopAll();\n return this;\n }\n isPlaying(): boolean {\n return sound.isPlaying();\n }\n async play(alias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;\n async play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;\n async play(\n aliasOrMediaAlias: string,\n soundAliasOrOptions?: string | SoundPlayOptionsWithChannel,\n paramOptions?: SoundPlayOptionsWithChannel,\n ): Promise<IMediaInstance> {\n let mediaAlias: string;\n let soundAlias: string;\n if (typeof soundAliasOrOptions === \"string\") {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = soundAliasOrOptions;\n } else {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = aliasOrMediaAlias;\n paramOptions = soundAliasOrOptions;\n }\n const { channel = this.defaultChannelAlias, ...options } = paramOptions ?? {};\n return await this.findChannel(channel).play(mediaAlias, soundAlias, options);\n }\n find(alias: string): IMediaInstance | undefined {\n return SoundManagerStatic.mediaInstances[alias]?.instance;\n }\n stop(alias: string): void {\n const mediaInstance = this.find(alias);\n if (mediaInstance) {\n mediaInstance.stop();\n delete SoundManagerStatic.mediaInstances[alias];\n } else {\n logger.warn(`No media instance found with alias ${alias} to stop.`);\n }\n }\n pause(alias: string): IMediaInstance | undefined {\n const mediaInstance = this.find(alias);\n if (!mediaInstance) {\n logger.warn(`No media instance found with alias ${alias} to pause.`);\n return;\n }\n mediaInstance.paused = true;\n return mediaInstance;\n }\n resume(alias: string): IMediaInstance | undefined {\n const mediaInstance = this.find(alias);\n if (!mediaInstance) {\n logger.warn(`No media instance found with alias ${alias} to resume.`);\n return;\n }\n mediaInstance.paused = false;\n return mediaInstance;\n }\n duration(alias: string): number {\n return sound.duration(alias);\n }\n async load(alias: string | string[]): Promise<void> {\n await PIXI.Assets.load(alias);\n if (typeof alias === \"string\") {\n alias = [alias];\n }\n alias.forEach((alias) => {\n const item = PIXI.Assets.get<Sound>(alias);\n if (!sound.exists(alias)) sound.add(alias, item);\n });\n }\n backgroundLoad(alias: string | string[]): Promise<void> {\n const promise = PIXI.Assets.backgroundLoad(alias);\n\n promise.then(() => {\n if (typeof alias === \"string\") {\n alias = [alias];\n }\n alias.forEach((alias) => {\n const item = PIXI.Assets.get<Sound>(alias);\n if (!sound.exists(alias)) sound.add(alias, item);\n });\n });\n return promise;\n }\n backgroundLoadBundle(alias: string): Promise<void> {\n const promise = PIXI.Assets.backgroundLoadBundle(alias);\n promise.then(async () => {\n try {\n const assets = await PIXI.Assets.loadBundle(alias);\n for (let key in assets) {\n const item = assets[key];\n if (item instanceof Sound) {\n if (!sound.exists(key)) sound.add(key, item);\n }\n }\n } catch (e) {\n logger.error(\"Error loading sound bundle\", e);\n }\n });\n return promise;\n }\n\n clear() {\n this.stopAll();\n }\n\n /* Channel Methods */\n\n addChannel(alias: string | string[], options: ChannelOptions = {}): AudioChannelInterface | undefined {\n if (typeof alias !== \"string\") {\n alias.forEach((a) => {\n const perChannelOptions: ChannelOptions = {\n ...options,\n filters: options.filters ? [...options.filters] : options.filters,\n };\n this.addChannel(a, perChannelOptions);\n });\n return;\n }\n if (SoundManagerStatic.channels[alias]) {\n logger.warn(`Channel with alias ${alias} already exists.`);\n return;\n }\n const channel = new AudioChannel(alias, options);\n SoundManagerStatic.channels[alias] = channel;\n return channel;\n }\n\n findChannel(alias: string): AudioChannelInterface {\n const channel = SoundManagerStatic.channels[alias];\n if (!channel) {\n return this.addChannel(alias) as AudioChannelInterface;\n }\n return channel;\n }\n\n get channels(): AudioChannelInterface[] {\n return Object.values(SoundManagerStatic.channels);\n }\n\n /* Export and Import Methods */\n\n public export(): SoundGameState {\n let mediaInstances: {\n [key: string]: {\n channelAlias: string;\n soundAlias: string;\n stepCounter: number;\n options: Omit<SoundPlayOptions, \"filters\"> & { filters?: SoundFilterMemory[] };\n paused: boolean;\n };\n } = Object.entries(SoundManagerStatic.mediaInstances).reduce(\n (result, [mediaAlias, mediaInstance]) => {\n result[mediaAlias] = {\n channelAlias: mediaInstance.channelAlias,\n soundAlias: mediaInstance.soundAlias,\n stepCounter: mediaInstance.stepCounter,\n options: { ...mediaInstance.options, filters: FilterToFilterMemory(mediaInstance.options.filters) },\n paused: mediaInstance.instance.paused,\n };\n return result;\n },\n {} as {\n [key: string]: {\n channelAlias: string;\n soundAlias: string;\n stepCounter: number;\n options: Omit<SoundPlayOptions, \"filters\"> & { filters?: SoundFilterMemory[] };\n paused: boolean;\n };\n },\n );\n return {\n mediaInstances: createExportableElement(mediaInstances),\n filters: createExportableElement(FilterToFilterMemory(this.filtersAll)),\n };\n }\n async restore(data: object) {\n try {\n if (data.hasOwnProperty(\"soundsPlaying\")) {\n let soundsPlaying = (data as SoundGameState)[\"soundsPlaying\"];\n if (soundsPlaying) {\n const promises = Object.keys(soundsPlaying).map(async (alias) => {\n await this.load(alias);\n\n await this.play(alias);\n });\n await Promise.all(promises);\n }\n }\n\n if (data.hasOwnProperty(\"mediaInstances\")) {\n let mediaInstances = (data as SoundGameState)[\"mediaInstances\"];\n if (mediaInstances) {\n // load all media first\n const usedChannels = new Set<string>();\n const promises = Object.values(mediaInstances).map(async ({ soundAlias, channelAlias }) => {\n usedChannels.add(channelAlias);\n return await this.load(soundAlias);\n });\n await Promise.all(promises);\n this.channels.forEach((channel) => {\n if (!channel.background || !usedChannels.has(channel.alias)) {\n channel.stopAll();\n }\n });\n const promises2 = Object.keys(mediaInstances).map(async (mediaAlias) => {\n const mediaInstanceData = mediaInstances[mediaAlias];\n const channel = this.findChannel(mediaInstanceData.channelAlias);\n if (!channel.background) {\n const instance = await channel.play(mediaAlias, mediaInstanceData.soundAlias, {\n ...mediaInstanceData.options,\n filters: FilterMemoryToFilter(mediaInstanceData.options.filters || []),\n });\n if (mediaInstanceData.paused) {\n instance.paused = mediaInstanceData.paused;\n }\n } else if (\n mediaInstanceData.stepCounter === GameUnifier.stepCounter ||\n !this.find(mediaAlias)\n ) {\n // if the channel is background, we only restore it if it was played in the current step, to avoid restoring background music that was playing in a previous step\n const instance = await channel.play(mediaAlias, mediaInstanceData.soundAlias, {\n ...mediaInstanceData.options,\n filters: FilterMemoryToFilter(mediaInstanceData.options.filters || []),\n });\n if (mediaInstanceData.paused) {\n instance.paused = mediaInstanceData.paused;\n }\n } else {\n const instance = this.find(mediaAlias);\n if (instance) {\n SoundManagerStatic.mediaInstances[mediaAlias].options = {\n ...mediaInstanceData.options,\n filters: FilterMemoryToFilter(mediaInstanceData.options.filters || []),\n };\n if (instance.paused !== mediaInstanceData.paused) {\n instance.paused = mediaInstanceData.paused;\n }\n if (instance.loop !== (mediaInstanceData.options.loop || false)) {\n instance.loop = mediaInstanceData.options.loop || false;\n }\n if (instance.volume !== (mediaInstanceData.options.volume ?? 1)) {\n instance.volume = mediaInstanceData.options.volume ?? 1;\n }\n if (instance.muted !== (mediaInstanceData.options.muted || false)) {\n instance.muted = mediaInstanceData.options.muted || false;\n }\n if (instance.speed !== (mediaInstanceData.options.speed ?? 1)) {\n instance.speed = mediaInstanceData.options.speed ?? 1;\n }\n }\n }\n });\n await Promise.all(promises2);\n }\n }\n\n if (data.hasOwnProperty(\"filters\")) {\n let f = (data as SoundGameState)[\"filters\"];\n if (f) {\n this.filtersAll = FilterMemoryToFilter(f);\n }\n }\n } catch (e) {\n logger.error(\"Error importing data\", e);\n }\n }\n}\n","import { filters as f } from \"@pixi/sound\";\n\nexport const filters = {\n DistortionFilter: f.DistortionFilter,\n EqualizerFilter: f.EqualizerFilter,\n MonoFilter: f.MonoFilter,\n ReverbFilter: f.ReverbFilter,\n StereoFilter: f.StereoFilter,\n StreamFilter: f.StreamFilter,\n TelephoneFilter: f.TelephoneFilter,\n};\n"]}
|
package/dist/sound.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/sound/functions/channel-utility.ts","../src/sound/SoundManagerStatic.ts","../src/sound/functions/proxy-utility.ts","../src/sound/classes/AudioChannel.ts","../src/sound/functions/sound-utility.ts","../src/sound/SoundManager.ts","../src/sound/constants.ts","../src/sound/index.ts"],"names":["calculateVolume","mediaVolume","channelVolume","SoundManagerStatic","__publicField","proxyMedia","mediaAlias","media","channel","target","prop","receiver","entry","value","AudioChannel","alias","channelOptions","aliasOrMediaAlias","soundAliasOrOptions","options","soundAlias","oldMedia","sound","timeoutId","item","GameUnifier","mediaId","mediaInstance","mediaMuted","instances","FilterMemoryToFilter","filter","res","f","filters","logger","FilterToFilterMemory","SoundManager","GENERAL_CHANNEL","filtersAll","sourceOptions","s","legacy","autoPause","volume","speed","paramOptions","PIXI","promise","assets","key","Sound","e","a","perChannelOptions","mediaInstances","result","createExportableElement","data","soundsPlaying","promises","usedChannels","channelAlias","promises2","mediaInstanceData","instance","id"],"mappings":"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","file":"sound.mjs","sourcesContent":["/**\n * This function calculates the final volume of a sound by multiplying the media volume and the channel volume.\n * If one of the volumes is undefined, it returns the other volume. If both are undefined, it returns 1.\n * @param mediaVolume The volume of the media instance, which can be undefined.\n * @param channelVolume The volume of the audio channel, which can be undefined.\n * @returns The final volume of the sound, or 1 if both mediaVolume and channelVolume are undefined.\n */\nexport function calculateVolume(mediaVolume: number | undefined, channelVolume: number | undefined): number {\n if (mediaVolume === undefined && channelVolume === undefined) {\n return 1;\n } else if (channelVolume === undefined) {\n return mediaVolume!;\n } else if (mediaVolume === undefined) {\n return channelVolume;\n }\n // if mediaVolume is 0.5 and channelVolume is 0.5, the result should be 0.25\n // if mediaVolume is 0.7 and channelVolume is 0.5, the result should be 0.35\n // if mediaVolume is 0.5 and channelVolume is 0.7, the result should be 0.35\n return mediaVolume * channelVolume;\n}\n","import AudioChannelInterface from \"./interfaces/AudioChannelInterface\";\nimport IMediaInstance from \"./interfaces/IMediaInstance\";\nimport { SoundPlayOptions } from \"./interfaces/SoundOptions\";\n\nexport default class SoundManagerStatic {\n private constructor() {}\n static mediaInstances: {\n [alias: string]: {\n channelAlias: string;\n soundAlias: string;\n instance: IMediaInstance;\n stepCounter: number;\n options: SoundPlayOptions;\n };\n } = {};\n static channels: { [alias: string]: AudioChannelInterface } = {};\n static delayTimeoutInstances: [number | NodeJS.Timeout, string][] = [];\n}\n","import { IMediaInstance } from \"@pixi/sound\";\nimport SoundManagerStatic from \"../SoundManagerStatic\";\nimport type AudioChannel from \"../classes/AudioChannel\";\nimport { calculateVolume } from \"./channel-utility\";\n\nexport function proxyMedia(mediaAlias: string, media: IMediaInstance, channel: AudioChannel): IMediaInstance {\n return new Proxy(media, {\n get(target, prop, receiver) {\n switch (prop) {\n case \"volume\":\n case \"muted\": {\n const entry = SoundManagerStatic.mediaInstances[mediaAlias];\n if (entry) {\n return entry.options[prop as keyof typeof entry.options];\n }\n return Reflect.get(target, prop, receiver);\n }\n case \"paused\":\n default:\n return Reflect.get(target, prop, receiver);\n }\n },\n set(target, prop, value, receiver) {\n if (mediaAlias in SoundManagerStatic.mediaInstances) {\n switch (prop) {\n case \"volume\":\n SoundManagerStatic.mediaInstances[mediaAlias].options[prop] = value;\n value = calculateVolume(value, channel.channelOptions.volume);\n return Reflect.set(target, prop, value, receiver);\n case \"muted\":\n SoundManagerStatic.mediaInstances[mediaAlias].options[prop] = value;\n if (channel.channelOptions.muted) {\n return Reflect.set(target, prop, true, receiver);\n } else {\n return Reflect.set(target, prop, value, receiver);\n }\n case \"loop\":\n case \"delay\":\n case \"end\":\n case \"filters\":\n case \"singleInstance\":\n case \"speed\":\n case \"sprite\":\n case \"start\":\n SoundManagerStatic.mediaInstances[mediaAlias].options[prop] = value;\n default:\n return Reflect.set(target, prop, value, receiver);\n }\n }\n return Reflect.set(target, prop, value, receiver);\n },\n });\n}\n","import { GameUnifier } from \"@drincs/pixi-vn/core\";\nimport { sound } from \"@pixi/sound\";\nimport { calculateVolume } from \"../functions/channel-utility\";\nimport { proxyMedia } from \"../functions/proxy-utility\";\nimport AudioChannelInterface from \"../interfaces/AudioChannelInterface\";\nimport IMediaInstance from \"../interfaces/IMediaInstance\";\nimport { ChannelOptions, SoundPlayOptions } from \"../interfaces/SoundOptions\";\nimport SoundManagerStatic from \"../SoundManagerStatic\";\n\nexport default class AudioChannel implements AudioChannelInterface {\n constructor(\n readonly alias: string,\n readonly channelOptions: ChannelOptions = {},\n ) {}\n async play(alias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;\n async play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptions): Promise<IMediaInstance>;\n async play(\n aliasOrMediaAlias: string,\n soundAliasOrOptions?: string | SoundPlayOptions,\n options?: SoundPlayOptions,\n ): Promise<IMediaInstance> {\n let mediaAlias: string;\n let soundAlias: string;\n if (typeof soundAliasOrOptions === \"string\") {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = soundAliasOrOptions;\n } else {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = aliasOrMediaAlias;\n options = soundAliasOrOptions;\n }\n if (mediaAlias in SoundManagerStatic.mediaInstances) {\n const oldMedia = SoundManagerStatic.mediaInstances[mediaAlias];\n oldMedia.instance.stop();\n options = {\n ...oldMedia.options,\n ...options,\n };\n }\n const media = proxyMedia(\n mediaAlias,\n await sound.play(soundAlias, {\n ...(options ?? {}),\n filters: [...(this.channelOptions.filters || []), ...(options?.filters || [])],\n muted: Boolean(this.channelOptions.muted) || Boolean(options?.muted),\n volume: calculateVolume(options?.volume, this.channelOptions.volume),\n }),\n this,\n );\n if (options?.delay) {\n media.paused = true;\n const timeoutId = setTimeout(() => {\n media.paused = false;\n SoundManagerStatic.delayTimeoutInstances = SoundManagerStatic.delayTimeoutInstances.filter(\n (item) => item[0] !== timeoutId,\n );\n }, options.delay * 1000);\n SoundManagerStatic.delayTimeoutInstances.push([timeoutId, mediaAlias]);\n }\n SoundManagerStatic.mediaInstances[mediaAlias] = {\n channelAlias: this.alias,\n soundAlias: soundAlias,\n instance: media,\n stepCounter: GameUnifier.stepCounter,\n options: {\n volume: options?.volume ?? 1,\n muted: options?.muted ?? false,\n loop: options?.loop ?? false,\n ...(options ?? {}),\n },\n };\n media.on(\"end\", () => {\n delete SoundManagerStatic.mediaInstances[mediaAlias];\n });\n return media;\n }\n private updateMediaVolume() {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias) {\n const mediaVolume = mediaInstance.options.volume ?? 1;\n mediaInstance.instance.volume = mediaVolume;\n }\n }\n }\n get volume(): number {\n return this.channelOptions.volume ?? 1;\n }\n set volume(value: number) {\n this.channelOptions.volume = value;\n this.updateMediaVolume();\n }\n private updateMediaMuted() {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias) {\n const mediaMuted = mediaInstance.options.muted ?? false;\n // Apply only the per-media muted state; the proxy is responsible for\n // enforcing channel-level muting without overwriting per-media options.\n mediaInstance.instance.muted = mediaMuted;\n }\n }\n }\n get muted(): boolean {\n return this.channelOptions.muted ?? false;\n }\n set muted(value: boolean) {\n this.channelOptions.muted = value;\n this.updateMediaMuted();\n }\n toggleMuteAll(): boolean {\n this.muted = !this.muted;\n return this.muted;\n }\n get mediaInstances(): IMediaInstance[] {\n return Object.values(SoundManagerStatic.mediaInstances).reduce((instances: IMediaInstance[], mediaInstance) => {\n if (mediaInstance.channelAlias === this.alias) {\n instances.push(mediaInstance.instance);\n }\n return instances;\n }, []);\n }\n get background(): boolean {\n return this.channelOptions.background || false;\n }\n stopAll() {\n for (const mediaAlias in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaAlias];\n if (mediaInstance.channelAlias === this.alias) {\n mediaInstance.instance.stop();\n delete SoundManagerStatic.mediaInstances[mediaAlias];\n }\n }\n return this;\n }\n pauseAll() {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias && !mediaInstance.instance.paused) {\n mediaInstance.instance.paused = true;\n }\n }\n return this;\n }\n resumeAll(): this {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.channelAlias === this.alias && mediaInstance.instance.paused) {\n mediaInstance.instance.paused = false;\n }\n }\n return this;\n }\n}\n","import { Filter, filters } from \"@pixi/sound\";\nimport { logger } from \"../../utils/log-utility\";\nimport SoundFilterMemory from \"../types/SoundFilterMemory\";\n\nexport function FilterMemoryToFilter(filter: SoundFilterMemory[]): Filter[] {\n let res: Filter[] = [];\n for (let f of filter) {\n if (f.type === \"TelephoneFilter\") {\n res.push(new filters.TelephoneFilter());\n } else if (f.type === \"StreamFilter\") {\n res.push(new filters.StreamFilter());\n } else if (f.type === \"StereoFilter\") {\n res.push(new filters.StereoFilter(f.pan));\n } else if (f.type === \"ReverbFilter\") {\n res.push(new filters.ReverbFilter(f.seconds, f.decay, f.reverse));\n } else if (f.type === \"MonoFilter\") {\n res.push(new filters.MonoFilter());\n } else if (f.type === \"EqualizerFilter\") {\n res.push(\n new filters.EqualizerFilter(f.f32, f.f64, f.f125, f.f250, f.f500, f.f1k, f.f2k, f.f4k, f.f8k, f.f16k)\n );\n } else if (f.type === \"DistortionFilter\") {\n res.push(new filters.DistortionFilter(f.amount));\n } else {\n logger.error(\"Unknown sound filter type\");\n }\n }\n return res;\n}\n\nexport function FilterToFilterMemory(filter?: Filter[]): SoundFilterMemory[] | undefined {\n if (!filter) return undefined;\n let res: SoundFilterMemory[] = [];\n for (let f of filter) {\n if (f instanceof filters.TelephoneFilter) {\n res.push({\n type: \"TelephoneFilter\",\n });\n } else if (f instanceof filters.StreamFilter) {\n res.push({\n type: \"StreamFilter\",\n });\n } else if (f instanceof filters.StereoFilter) {\n res.push({\n type: \"StereoFilter\",\n pan: f.pan,\n });\n } else if (f instanceof filters.ReverbFilter) {\n res.push({\n type: \"ReverbFilter\",\n seconds: f.seconds,\n decay: f.decay,\n reverse: f.reverse,\n });\n } else if (f instanceof filters.MonoFilter) {\n res.push({\n type: \"MonoFilter\",\n });\n } else if (f instanceof filters.EqualizerFilter) {\n res.push({\n type: \"EqualizerFilter\",\n f32: f.f32,\n f64: f.f64,\n f125: f.f125,\n f250: f.f250,\n f500: f.f500,\n f1k: f.f1k,\n f2k: f.f2k,\n f4k: f.f4k,\n f8k: f.f8k,\n f16k: f.f16k,\n });\n } else if (f instanceof filters.DistortionFilter) {\n res.push({\n type: \"DistortionFilter\",\n amount: f.amount,\n });\n } else {\n logger.error(\"Unknown sound filter type\");\n }\n }\n return res;\n}\n","import { GameUnifier } from \"@drincs/pixi-vn/core\";\nimport { default as PIXI } from \"@drincs/pixi-vn/pixi.js\";\nimport { Filter, filters, IMediaContext, Sound, sound } from \"@pixi/sound\";\nimport { GENERAL_CHANNEL } from \"../constants\";\nimport { createExportableElement } from \"../utils\";\nimport { logger } from \"../utils/log-utility\";\nimport AudioChannel from \"./classes/AudioChannel\";\nimport { FilterMemoryToFilter, FilterToFilterMemory } from \"./functions/sound-utility\";\nimport AudioChannelInterface from \"./interfaces/AudioChannelInterface\";\nimport IMediaInstance from \"./interfaces/IMediaInstance\";\nimport SoundGameState from \"./interfaces/SoundGameState\";\nimport SoundManagerInterface from \"./interfaces/SoundManagerInterface\";\nimport SoundOptions, { ChannelOptions, SoundPlayOptions, SoundPlayOptionsWithChannel } from \"./interfaces/SoundOptions\";\nimport SoundManagerStatic from \"./SoundManagerStatic\";\nimport SoundFilterMemory from \"./types/SoundFilterMemory\";\n\nexport default class SoundManager implements SoundManagerInterface {\n get context(): IMediaContext {\n return sound.context;\n }\n get filtersAll(): Filter[] {\n return sound.filtersAll;\n }\n set filtersAll(filtersAll: Filter[]) {\n sound.filtersAll = filtersAll.filter((f) => {\n return !(f instanceof filters.Filter);\n });\n }\n get supported(): boolean {\n return sound.supported;\n }\n\n _defaultChannelAlias = GENERAL_CHANNEL;\n get defaultChannelAlias(): string {\n return this._defaultChannelAlias;\n }\n set defaultChannelAlias(alias: string) {\n this._defaultChannelAlias = alias;\n }\n\n add(alias: string, sourceOptions: string) {\n return sound.add(alias, sourceOptions);\n }\n async edit(alias: string, options: SoundOptions): Promise<void> {\n let s = sound.find(alias);\n if (!s) {\n await this.load(alias);\n s = sound.find(alias);\n if (!s) {\n logger.error(`Sound with alias ${alias} not found after loading.`);\n return;\n }\n }\n s.options = options;\n }\n get useLegacy(): boolean {\n return sound.useLegacy;\n }\n set useLegacy(legacy: boolean) {\n sound.useLegacy = legacy;\n }\n get disableAutoPause(): boolean {\n return sound.disableAutoPause;\n }\n set disableAutoPause(autoPause: boolean) {\n sound.disableAutoPause = autoPause;\n }\n get volumeAll(): number {\n return sound.volumeAll;\n }\n set volumeAll(volume: number) {\n sound.volumeAll = volume;\n }\n get speedAll(): number {\n return sound.speedAll;\n }\n set speedAll(speed: number) {\n sound.speedAll = speed;\n }\n pauseAll(): this {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (!mediaInstance.instance.paused) {\n mediaInstance.instance.paused = true;\n }\n }\n return this;\n }\n resumeAll(): this {\n for (const mediaId in SoundManagerStatic.mediaInstances) {\n const mediaInstance = SoundManagerStatic.mediaInstances[mediaId];\n if (mediaInstance.instance.paused) {\n mediaInstance.instance.paused = false;\n }\n }\n return this;\n }\n toggleMuteAll(): boolean {\n return sound.toggleMuteAll();\n }\n muteAll(): this {\n sound.muteAll();\n return this;\n }\n unmuteAll(): this {\n sound.unmuteAll();\n return this;\n }\n stopAll(): this {\n SoundManagerStatic.mediaInstances = {};\n sound.stopAll();\n return this;\n }\n isPlaying(): boolean {\n return sound.isPlaying();\n }\n async play(alias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;\n async play(mediaAlias: string, soundAlias: string, options?: SoundPlayOptionsWithChannel): Promise<IMediaInstance>;\n async play(\n aliasOrMediaAlias: string,\n soundAliasOrOptions?: string | SoundPlayOptionsWithChannel,\n paramOptions?: SoundPlayOptionsWithChannel,\n ): Promise<IMediaInstance> {\n let mediaAlias: string;\n let soundAlias: string;\n if (typeof soundAliasOrOptions === \"string\") {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = soundAliasOrOptions;\n } else {\n mediaAlias = aliasOrMediaAlias;\n soundAlias = aliasOrMediaAlias;\n paramOptions = soundAliasOrOptions;\n }\n const { channel = this.defaultChannelAlias, ...options } = paramOptions ?? {};\n return await this.findChannel(channel).play(mediaAlias, soundAlias, options);\n }\n find(alias: string): IMediaInstance | undefined {\n return SoundManagerStatic.mediaInstances[alias]?.instance;\n }\n stop(alias: string): void {\n const mediaInstance = this.find(alias);\n if (mediaInstance) {\n mediaInstance.stop();\n delete SoundManagerStatic.mediaInstances[alias];\n } else {\n logger.warn(`No media instance found with alias ${alias} to stop.`);\n }\n }\n pause(alias: string): IMediaInstance | undefined {\n const mediaInstance = this.find(alias);\n if (!mediaInstance) {\n logger.warn(`No media instance found with alias ${alias} to pause.`);\n return;\n }\n mediaInstance.paused = true;\n return mediaInstance;\n }\n resume(alias: string): IMediaInstance | undefined {\n const mediaInstance = this.find(alias);\n if (!mediaInstance) {\n logger.warn(`No media instance found with alias ${alias} to resume.`);\n return;\n }\n mediaInstance.paused = false;\n return mediaInstance;\n }\n duration(alias: string): number {\n return sound.duration(alias);\n }\n async load(alias: string | string[]): Promise<void> {\n await PIXI.Assets.load(alias);\n if (typeof alias === \"string\") {\n alias = [alias];\n }\n alias.forEach((alias) => {\n const item = PIXI.Assets.get<Sound>(alias);\n if (!sound.exists(alias)) sound.add(alias, item);\n });\n }\n backgroundLoad(alias: string | string[]): Promise<void> {\n const promise = PIXI.Assets.backgroundLoad(alias);\n\n promise.then(() => {\n if (typeof alias === \"string\") {\n alias = [alias];\n }\n alias.forEach((alias) => {\n const item = PIXI.Assets.get<Sound>(alias);\n if (!sound.exists(alias)) sound.add(alias, item);\n });\n });\n return promise;\n }\n backgroundLoadBundle(alias: string): Promise<void> {\n const promise = PIXI.Assets.backgroundLoadBundle(alias);\n promise.then(async () => {\n try {\n const assets = await PIXI.Assets.loadBundle(alias);\n for (let key in assets) {\n const item = assets[key];\n if (item instanceof Sound) {\n if (!sound.exists(key)) sound.add(key, item);\n }\n }\n } catch (e) {\n logger.error(\"Error loading sound bundle\", e);\n }\n });\n return promise;\n }\n\n clear() {\n this.stopAll();\n }\n\n /* Channel Methods */\n\n addChannel(alias: string | string[], options: ChannelOptions = {}): AudioChannelInterface | undefined {\n if (typeof alias !== \"string\") {\n alias.forEach((a) => {\n const perChannelOptions: ChannelOptions = {\n ...options,\n filters: options.filters ? [...options.filters] : options.filters,\n };\n this.addChannel(a, perChannelOptions);\n });\n return;\n }\n if (SoundManagerStatic.channels[alias]) {\n logger.warn(`Channel with alias ${alias} already exists.`);\n return;\n }\n const channel = new AudioChannel(alias, options);\n SoundManagerStatic.channels[alias] = channel;\n return channel;\n }\n\n findChannel(alias: string): AudioChannelInterface {\n const channel = SoundManagerStatic.channels[alias];\n if (!channel) {\n return this.addChannel(alias) as AudioChannelInterface;\n }\n return channel;\n }\n\n get channels(): AudioChannelInterface[] {\n return Object.values(SoundManagerStatic.channels);\n }\n\n /* Export and Import Methods */\n\n public export(): SoundGameState {\n let mediaInstances: {\n [key: string]: {\n channelAlias: string;\n soundAlias: string;\n stepCounter: number;\n options: Omit<SoundPlayOptions, \"filters\"> & { filters?: SoundFilterMemory[] };\n paused: boolean;\n };\n } = Object.entries(SoundManagerStatic.mediaInstances).reduce(\n (result, [mediaAlias, mediaInstance]) => {\n result[mediaAlias] = {\n channelAlias: mediaInstance.channelAlias,\n soundAlias: mediaInstance.soundAlias,\n stepCounter: mediaInstance.stepCounter,\n options: { ...mediaInstance.options, filters: FilterToFilterMemory(mediaInstance.options.filters) },\n paused: mediaInstance.instance.paused,\n };\n return result;\n },\n {} as {\n [key: string]: {\n channelAlias: string;\n soundAlias: string;\n stepCounter: number;\n options: Omit<SoundPlayOptions, \"filters\"> & { filters?: SoundFilterMemory[] };\n paused: boolean;\n };\n },\n );\n return {\n mediaInstances: createExportableElement(mediaInstances),\n filters: createExportableElement(FilterToFilterMemory(this.filtersAll)),\n };\n }\n async restore(data: object) {\n try {\n if (data.hasOwnProperty(\"soundsPlaying\")) {\n let soundsPlaying = (data as SoundGameState)[\"soundsPlaying\"];\n if (soundsPlaying) {\n const promises = Object.keys(soundsPlaying).map(async (alias) => {\n await this.load(alias);\n\n await this.play(alias);\n });\n await Promise.all(promises);\n }\n }\n\n if (data.hasOwnProperty(\"mediaInstances\")) {\n let mediaInstances = (data as SoundGameState)[\"mediaInstances\"];\n if (mediaInstances) {\n // load all media first\n const usedChannels = new Set<string>();\n const promises = Object.values(mediaInstances).map(async ({ soundAlias, channelAlias }) => {\n usedChannels.add(channelAlias);\n return await this.load(soundAlias);\n });\n await Promise.all(promises);\n this.channels.forEach((channel) => {\n if (!channel.background || !usedChannels.has(channel.alias)) {\n channel.stopAll();\n }\n });\n const promises2 = Object.keys(mediaInstances).map(async (mediaAlias) => {\n const mediaInstanceData = mediaInstances[mediaAlias];\n const channel = this.findChannel(mediaInstanceData.channelAlias);\n if (!channel.background) {\n const instance = await channel.play(mediaAlias, mediaInstanceData.soundAlias, {\n ...mediaInstanceData.options,\n filters: FilterMemoryToFilter(mediaInstanceData.options.filters || []),\n });\n if (mediaInstanceData.paused) {\n instance.paused = mediaInstanceData.paused;\n }\n } else if (\n mediaInstanceData.stepCounter === GameUnifier.stepCounter ||\n !this.find(mediaAlias)\n ) {\n // if the channel is background, we only restore it if it was played in the current step, to avoid restoring background music that was playing in a previous step\n const instance = await channel.play(mediaAlias, mediaInstanceData.soundAlias, {\n ...mediaInstanceData.options,\n filters: FilterMemoryToFilter(mediaInstanceData.options.filters || []),\n });\n if (mediaInstanceData.paused) {\n instance.paused = mediaInstanceData.paused;\n }\n } else {\n const instance = this.find(mediaAlias);\n if (instance) {\n SoundManagerStatic.mediaInstances[mediaAlias].options = {\n ...mediaInstanceData.options,\n filters: FilterMemoryToFilter(mediaInstanceData.options.filters || []),\n };\n if (instance.paused !== mediaInstanceData.paused) {\n instance.paused = mediaInstanceData.paused;\n }\n if (instance.loop !== (mediaInstanceData.options.loop || false)) {\n instance.loop = mediaInstanceData.options.loop || false;\n }\n if (instance.volume !== (mediaInstanceData.options.volume ?? 1)) {\n instance.volume = mediaInstanceData.options.volume ?? 1;\n }\n if (instance.muted !== (mediaInstanceData.options.muted || false)) {\n instance.muted = mediaInstanceData.options.muted || false;\n }\n if (instance.speed !== (mediaInstanceData.options.speed ?? 1)) {\n instance.speed = mediaInstanceData.options.speed ?? 1;\n }\n }\n }\n });\n await Promise.all(promises2);\n }\n }\n\n if (data.hasOwnProperty(\"filters\")) {\n let f = (data as SoundGameState)[\"filters\"];\n if (f) {\n this.filtersAll = FilterMemoryToFilter(f);\n }\n }\n } catch (e) {\n logger.error(\"Error importing data\", e);\n }\n }\n}\n","import { filters as f } from \"@pixi/sound\";\n\nexport const filters = {\n DistortionFilter: f.DistortionFilter,\n EqualizerFilter: f.EqualizerFilter,\n MonoFilter: f.MonoFilter,\n ReverbFilter: f.ReverbFilter,\n StereoFilter: f.StereoFilter,\n StreamFilter: f.StreamFilter,\n TelephoneFilter: f.TelephoneFilter,\n};\n","import { GameUnifier } from \"@drincs/pixi-vn/core\";\nimport SoundManagerInterface from \"./interfaces/SoundManagerInterface\";\nimport SoundManager from \"./SoundManager\";\nimport SoundManagerStatic from \"./SoundManagerStatic\";\n\nexport { filters } from \"./constants\";\nexport type { default as AudioChannelInterface } from \"./interfaces/AudioChannelInterface\";\nexport type { default as IMediaInstance } from \"./interfaces/IMediaInstance\";\nexport type {\n ExportedSound,\n ExportedSoundPlay,\n default as SoundGameState,\n SoundPlay,\n} from \"./interfaces/SoundGameState\";\nexport type {\n ChannelOptions,\n default as SoundOptions,\n SoundPlayOptions,\n SoundPlayOptionsWithChannel,\n} from \"./interfaces/SoundOptions\";\nexport { default as SoundManagerStatic } from \"./SoundManagerStatic\";\nexport type { default as SoundFilterMemory } from \"./types/SoundFilterMemory\";\n\nconst sound: SoundManagerInterface = new SoundManager();\n\nGameUnifier.addOnPreContinue(async () => {\n try {\n SoundManagerStatic.delayTimeoutInstances.forEach((id) => {\n clearTimeout(id[0]);\n const instance = SoundManagerStatic.mediaInstances[id[1]];\n if (instance) {\n instance.instance.paused = false;\n }\n });\n SoundManagerStatic.delayTimeoutInstances = [];\n Object.values(SoundManagerStatic.channels).forEach((channel) => {\n if (!channel.background) {\n channel.stopAll();\n }\n });\n } catch (e) {}\n});\n\nexport { sound };\n"]}
|