@caperjs/core 0.7.1 → 0.7.2
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/build/assetpack.mjs +35 -3
- package/build/defaults.mjs +39 -1
- package/build/index.mjs +13 -2
- package/build/internal/outputMarker.mjs +52 -0
- package/cli/doctor.mjs +205 -2
- package/cli/doctor.test.mjs +522 -1
- package/cli/native.mjs +808 -0
- package/cli/native.test.mjs +1039 -0
- package/cli.mjs +4 -0
- package/extras/css/fullscreen.css +8 -0
- package/extras/llms.txt +18 -0
- package/extras/skills/caper/SKILL.md +1 -0
- package/lib/{CaptionsPlugin-BoMkCsJO.js → CaptionsPlugin-COrofpHN.js} +2 -2
- package/lib/{CaptionsPlugin-BoMkCsJO.js.map → CaptionsPlugin-COrofpHN.js.map} +1 -1
- package/lib/{DataAdapter-DHWHuN-y.js → DataAdapter-T-22-_D1.js} +2 -2
- package/lib/{DataAdapter-DHWHuN-y.js.map → DataAdapter-T-22-_D1.js.map} +1 -1
- package/lib/{DebugRenderer-9a3mO9kX.js → DebugRenderer-ZN692Pbg.js} +4 -4
- package/lib/{DebugRenderer-9a3mO9kX.js.map → DebugRenderer-ZN692Pbg.js.map} +1 -1
- package/lib/{DevToolsPlugin-TkcBq1js.js → DevToolsPlugin-CQXFoj1T.js} +3 -3
- package/lib/{DevToolsPlugin-TkcBq1js.js.map → DevToolsPlugin-CQXFoj1T.js.map} +1 -1
- package/lib/{GSAPPlugin-DLOiVK_m.js → GSAPPlugin-CNkncyXS.js} +2 -2
- package/lib/{GSAPPlugin-DLOiVK_m.js.map → GSAPPlugin-CNkncyXS.js.map} +1 -1
- package/lib/{LayoutPlugin-CEPcr4GU.js → LayoutPlugin-BuJgr9bd.js} +26 -26
- package/lib/{LayoutPlugin-CEPcr4GU.js.map → LayoutPlugin-BuJgr9bd.js.map} +1 -1
- package/lib/{ScreenDebugPlugin-CiT0viiF.js → ScreenDebugPlugin-kz9Mr6j1.js} +2 -2
- package/lib/{ScreenDebugPlugin-CiT0viiF.js.map → ScreenDebugPlugin-kz9Mr6j1.js.map} +1 -1
- package/lib/{SpinePlugin-kyeWILtF.js → SpinePlugin-DDzD-Qxd.js} +1099 -877
- package/lib/SpinePlugin-DDzD-Qxd.js.map +1 -0
- package/lib/{StatsPlugin-5So44eOq.js → StatsPlugin-tyFGzVjy.js} +2 -2
- package/lib/{StatsPlugin-5So44eOq.js.map → StatsPlugin-tyFGzVjy.js.map} +1 -1
- package/lib/{VoiceOverPlugin--QoLj6pc.js → VoiceOverPlugin-rTNz_9eb.js} +2 -2
- package/lib/{VoiceOverPlugin--QoLj6pc.js.map → VoiceOverPlugin-rTNz_9eb.js.map} +1 -1
- package/lib/caper.mjs +51 -51
- package/lib/caper.mjs.map +1 -1
- package/lib/{const-GLIgV4ZV.js → const-Cj14a5U2.js} +5 -3
- package/lib/const-Cj14a5U2.js.map +1 -0
- package/lib/plugins/FullScreenPlugin.d.ts +65 -0
- package/lib/plugins/FullScreenPlugin.d.ts.map +1 -1
- package/lib/plugins/spine/SpinePlugin.d.ts.map +1 -1
- package/lib/plugins/spine/SpinePlugin.test.d.ts +2 -0
- package/lib/plugins/spine/SpinePlugin.test.d.ts.map +1 -0
- package/lib/{registries-C5yiKJ6v.js → registries-DmNGVLAi.js} +489 -446
- package/lib/registries-DmNGVLAi.js.map +1 -0
- package/lib/ui/Button.d.ts.map +1 -1
- package/lib/utils/platform.d.ts +5 -0
- package/lib/utils/platform.d.ts.map +1 -1
- package/lib/utils/platform.test.d.ts +2 -0
- package/lib/utils/platform.test.d.ts.map +1 -0
- package/lib/utils/types.d.ts +1 -1
- package/lib/utils/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/plugins/FullScreenPlugin.test.ts +138 -0
- package/src/plugins/FullScreenPlugin.ts +132 -0
- package/src/plugins/spine/SpinePlugin.test.ts +31 -0
- package/src/plugins/spine/SpinePlugin.ts +9 -2
- package/src/ui/Button.test.ts +22 -0
- package/src/ui/Button.ts +7 -0
- package/src/utils/platform.test.ts +20 -0
- package/src/utils/platform.ts +6 -0
- package/src/utils/types.ts +5 -1
- package/src/version.ts +2 -2
- package/lib/SpinePlugin-kyeWILtF.js.map +0 -1
- package/lib/const-GLIgV4ZV.js.map +0 -1
- package/lib/registries-C5yiKJ6v.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Kt as e, W as t, Wt as n, r } from "./registries-
|
|
1
|
+
import { Kt as e, W as t, Wt as n, r } from "./registries-DmNGVLAi.js";
|
|
2
2
|
import { UPDATE_PRIORITY as i } from "pixi.js";
|
|
3
3
|
//#endregion
|
|
4
4
|
//#region src/plugins/StatsPlugin.ts
|
|
@@ -67,4 +67,4 @@ var a = /* @__PURE__ */ e((/* @__PURE__ */ n(((e, t) => {
|
|
|
67
67
|
//#endregion
|
|
68
68
|
export { o as StatsPlugin };
|
|
69
69
|
|
|
70
|
-
//# sourceMappingURL=StatsPlugin-
|
|
70
|
+
//# sourceMappingURL=StatsPlugin-tyFGzVjy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StatsPlugin-
|
|
1
|
+
{"version":3,"file":"StatsPlugin-tyFGzVjy.js","names":[],"sources":["../../../node_modules/.pnpm/stats.js@0.17.0/node_modules/stats.js/build/stats.min.js","../src/plugins/StatsPlugin.ts"],"sourcesContent":["// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","import { UPDATE_PRIORITY } from 'pixi.js';\nimport Stats from 'stats.js';\nimport { Application } from '../core/Application';\nimport { Plugin } from './Plugin';\n\nexport class StatsPlugin extends Plugin {\n public readonly id = 'StatsPlugin';\n public stats: Stats;\n\n public async initialize() {\n this.stats = new Stats();\n this.stats.dom.id = 'stats';\n\n Application.containerElement?.appendChild(this.stats.dom);\n this.addDisposer(() => this.stats.dom.remove());\n\n this.stats.dom.style.position = 'absolute';\n this.stats.dom.style.top = 'auto';\n this.stats.dom.style.bottom = '0';\n this.stats.dom.style.right = '0';\n this.stats.dom.style.left = 'auto';\n\n this.addTickerCallback(this.stats.update, this.stats, UPDATE_PRIORITY.UTILITY);\n }\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { W as e, kt as t, q as n } from "./registries-
|
|
1
|
+
import { W as e, kt as t, q as n } from "./registries-DmNGVLAi.js";
|
|
2
2
|
import { gsap as r } from "gsap";
|
|
3
3
|
//#region src/plugins/audio/VoiceOverPlugin.ts
|
|
4
4
|
var i = class extends e {
|
|
@@ -112,4 +112,4 @@ var i = class extends e {
|
|
|
112
112
|
//#endregion
|
|
113
113
|
export { i as VoiceOverPlugin };
|
|
114
114
|
|
|
115
|
-
//# sourceMappingURL=VoiceOverPlugin
|
|
115
|
+
//# sourceMappingURL=VoiceOverPlugin-rTNz_9eb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoiceOverPlugin--QoLj6pc.js","names":[],"sources":["../src/plugins/audio/VoiceOverPlugin.ts"],"sourcesContent":["import { gsap } from 'gsap';\nimport { Signal } from '../../signals';\nimport { Logger } from '../../utils';\nimport type { IPlugin } from '../Plugin';\nimport { Plugin } from '../Plugin';\nimport { IAudioInstance } from './AudioInstance';\n\nexport type PlayMode = 'append' | 'override' | 'new';\nexport type VoCallback = (didPlay: boolean) => void;\nexport type VoKey = string | number;\n\nexport type Caption = {\n id: string;\n args?: { [key: string]: string };\n};\n\nexport interface IPlayVoiceOverOptions {\n mode?: PlayMode;\n priority?: number;\n callback?: VoCallback;\n localized?: boolean;\n}\n\ninterface IQueueItem extends IPlayVoiceOverOptions {\n key: string;\n delay?: number;\n timeout?: gsap.core.Tween;\n}\n\nexport interface IVoiceOverPlugin extends IPlugin {\n fadeOutDuration: number;\n debug: boolean;\n onVoiceOverStart: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverPaused: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverResumed: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverComplete: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverStopped: Signal<(instance?: IAudioInstance) => void>;\n paused: boolean;\n\n playVO(key: VoKey | VoKey[], mode?: PlayMode, callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], options?: IPlayVoiceOverOptions): Promise<IAudioInstance>;\n\n stopVO(): Promise<void>;\n\n pauseVO(): void;\n\n resumeVO(): void;\n}\n\nexport class VoiceOverPlugin extends Plugin implements IVoiceOverPlugin {\n public readonly id = 'voiceover';\n public fadeOutDuration = 0.15;\n public debug = false;\n public onVoiceOverStart: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverPaused: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverComplete: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverResumed: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverStopped: Signal<(instance?: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n private readonly _queue: IQueueItem[] = [];\n private readonly _pausedQueue: IQueueItem[] = [];\n private _paused: boolean = false;\n\n get paused() {\n return this._paused;\n }\n\n get activeTimeout(): gsap.core.Tween | undefined {\n return this._queue[0]?.timeout;\n }\n\n get activeVO(): IAudioInstance | undefined {\n if (this._queue.length > 0 && this._queue[0].key) {\n return this.app.audio.getAudioInstance(this._queue[0].key, 'voiceover') as IAudioInstance | undefined;\n }\n return undefined;\n }\n\n async initialize() {\n this.app.actions('pause').connect(this.onPause);\n this.app.actions('unpause').connect(this.onResume);\n this.app.scenes.onSceneChangeStart.connect(this.stopVO);\n }\n\n playVO(key: VoKey | VoKey[], mode?: PlayMode, callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], options?: IPlayVoiceOverOptions): Promise<IAudioInstance>;\n\n async playVO(\n key: VoKey | VoKey[],\n modeOrCallbackOrOptions?: PlayMode | VoCallback | IPlayVoiceOverOptions,\n callback?: VoCallback,\n ): Promise<IAudioInstance | void> {\n if (!Array.isArray(key)) {\n key = [key];\n }\n\n let priority = 0;\n let mode: string | undefined = 'override';\n let locale: string = '';\n\n if (typeof modeOrCallbackOrOptions === 'function') {\n callback = modeOrCallbackOrOptions;\n } else if (typeof modeOrCallbackOrOptions === 'object') {\n const modeAsOptions = modeOrCallbackOrOptions as IPlayVoiceOverOptions;\n priority = modeAsOptions.priority ?? 0;\n callback = modeAsOptions.callback;\n mode = modeAsOptions.mode ?? 'override';\n if (modeAsOptions.localized) {\n locale = this.app.i18n.locale;\n key = key.map((k) => `${k}_${locale}`);\n }\n }\n\n if (typeof modeOrCallbackOrOptions === 'string') {\n mode = modeOrCallbackOrOptions;\n }\n this._paused = false;\n if (key.length === 1 && this._queue.length === 1 && this._queue[0].key === key[0]) {\n Logger.warn(`🔇 Skipped VO ${key[0]} because it is already playing`);\n if (callback) {\n callback(false);\n }\n } else if (\n this._queue.length === 0 ||\n (mode === 'override' && priority >= this._queue[0].priority!) ||\n (mode === 'new' && priority > this._queue[0].priority!)\n ) {\n await this.stopVO();\n this.addToQueue(key, callback, priority);\n return this.playNext();\n } else if (mode === 'append') {\n this.addToQueue(key, callback, priority);\n } else if (callback) {\n Logger.warn(`🎟🔇 Firing callback without playing VO(s) ${key.join(', ')}`);\n callback(false);\n } else {\n Logger.warn(`🔇 Skipped VO(s) ${key.join(', ')} because it is lower priority than what was already playing`);\n }\n }\n\n public async stopVO(): Promise<void> {\n const activeVO: IAudioInstance | undefined = this.activeVO;\n const activeItem: IQueueItem | undefined = this._queue[0];\n this._queue.splice(0, this._queue.length);\n this._pausedQueue.splice(0, this._pausedQueue.length);\n activeItem?.timeout?.kill();\n if (activeVO) {\n if (!activeVO.media) {\n Logger.warn(`🛑 Stopping VO %c%s%c while it is still loading ${activeVO.id}`);\n activeVO.remove();\n } else if (activeVO.isPlaying) {\n Logger.log(`🤫 Fading out VO ${activeVO.id} (duration:${this.fadeOutDuration})`);\n await activeVO.fadeTo(0, this.fadeOutDuration);\n activeVO.stop();\n } else {\n activeVO.stop();\n }\n } else {\n Logger.warn('🛑 No active VO to stop');\n this.activeTimeout?.kill();\n }\n this.clearSignalConnections();\n this._paused = false;\n this.onVoiceOverStopped.emit(activeVO);\n }\n\n pauseVO() {\n if (this._paused) return;\n if (this._queue.length > 0) {\n this._paused = true;\n this._pausedQueue.push(...this._queue);\n const activeVO = this.activeVO;\n const activeTimeout = this.activeTimeout;\n activeVO?.pause();\n activeTimeout?.pause();\n this._queue.splice(0, this._queue.length);\n }\n }\n\n resumeVO() {\n if (!this._paused) return;\n this._paused = false;\n if (this._pausedQueue.length > 0) {\n this._queue.push(...this._pausedQueue);\n this._pausedQueue.splice(0, this._pausedQueue.length);\n const activeVO = this.activeVO;\n const activeTimeout = this.activeTimeout;\n activeVO?.resume();\n activeTimeout?.resume();\n if (activeVO) {\n this.onVoiceOverStart.emit(activeVO);\n }\n }\n }\n\n protected getCoreSignals(): string[] {\n return ['onVoiceOverStart', 'onVoiceOverPaused', 'onVoiceOverComplete', 'onVoiceOverResumed', 'onVoiceOverStopped'];\n }\n\n private addToQueue(keys: VoKey[], cb?: VoCallback, priority?: number) {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (typeof key === 'number') {\n Logger.log(`➕ Queueing delay ${key}`);\n } else {\n Logger.log(`➕ Queueing VO ${key}`);\n }\n\n this._queue.push({\n key: typeof key === 'string' ? key : '',\n delay: typeof key === 'number' ? key : undefined,\n callback: i === keys.length - 1 ? cb : undefined,\n priority,\n });\n }\n const toLoad = keys.filter((it) => typeof it === 'string') as string[];\n Logger.log(`📂 Loading VO(s) ${toLoad.join(', ')}`);\n this.app.audio.load(toLoad, 'voiceover');\n }\n\n private async playNext(): Promise<IAudioInstance | void> {\n if (this._queue.length > 0) {\n const item = this._queue[0];\n if (item.delay !== undefined) {\n this.activeTimeout?.kill();\n if (this._queue.length === 1) {\n // skip delay if last item in queue\n Logger.log('⌛ Skipping delay because there are no more items in queue');\n this._queue.shift();\n if (item.callback) {\n item.callback(true);\n }\n return this.playNext();\n } else {\n Logger.log('⏳ Waiting %s seconds before next VO', item.delay);\n item.timeout = gsap.delayedCall(item.delay, () => {\n this._queue.shift();\n if (item.callback) {\n item.callback(true);\n }\n return this.playNext();\n });\n }\n } else {\n const existing = this.app.audio.getAudioInstance(item.key, 'voiceover');\n if (existing) {\n if (existing.isPlaying) {\n Logger.warn('🛑 Stopping VO %c%s%c (no fade out)', existing.id);\n existing.stop();\n this.onVoiceOverComplete.emit(existing);\n }\n } else {\n Logger.log('📂 Loading VO %c%s%c', item.key);\n }\n const instance = await this.app.audio.play(item.key, 'voiceover', { singleInstance: true });\n if (this.activeVO) {\n this.onVoiceOverStart.emit(this.activeVO);\n }\n if (this._queue[0] !== item) {\n return;\n }\n Logger.log(`▶️▶️ Playing VO ${item.key}`);\n Logger.log('ℹ️ Queue length:', this._queue.length);\n\n if (this.activeVO) {\n this.addSignalConnection(\n this.activeVO.onEnd.connectOnce(this._handleActiveVOEnded),\n this.activeVO.onPaused.connectOnce(this._handleActiveVOPaused),\n this.activeVO.onResumed.connectOnce(this._handleActiveVOResumed),\n this.activeVO.onStart.connectOnce(this._handleActiveVOStarted),\n );\n } else {\n Logger.error('⚠️ Vo %c%s%c completed early (did not play?)', item.key);\n this._handleActiveVOEndedWithoutPlaying(instance);\n }\n return instance;\n }\n } else {\n Logger.log('✅ Nothing left in queue');\n }\n }\n\n private _handleActiveVOStarted(instance: IAudioInstance) {\n this.onVoiceOverStart.emit(this.activeVO || instance);\n }\n\n private _handleActiveVOPaused(instance: IAudioInstance) {\n this.onVoiceOverPaused.emit(this.activeVO || instance);\n }\n\n private _handleActiveVOResumed(instance: IAudioInstance) {\n this.onVoiceOverResumed.emit(this.activeVO || instance);\n }\n\n private _handleActiveVOEndedWithoutPlaying(instance: IAudioInstance) {\n this.onVoiceOverComplete.emit(this.activeVO || instance);\n this.activeTimeout?.kill();\n this._currentItemCallback(false);\n this._queue.shift();\n this.playNext();\n }\n\n private _handleActiveVOEnded(instance: IAudioInstance) {\n this.onVoiceOverComplete.emit(this.activeVO || instance);\n this.activeTimeout?.kill();\n this._currentItemCallback();\n this._queue.shift();\n this.playNext();\n }\n\n private _currentItemCallback(didPlay: boolean = true) {\n const item = this._queue[0];\n if (!item) {\n return;\n }\n Logger.log(`🏁 Completed VO ${item.key}`);\n if (item.callback) {\n Logger.log(`'🎟 Firing callback for`, item.key);\n item.callback(didPlay);\n }\n }\n\n private onPause() {\n if (this.activeVO !== undefined && this.activeVO.isPlaying) {\n Logger.log('⏸ Pausing VO', this.activeVO.id);\n this.activeVO.pause();\n this.onVoiceOverComplete.emit(this.activeVO);\n }\n this.activeTimeout?.pause();\n }\n\n private onResume() {\n if (this.activeVO !== undefined && !this.activeVO.isPlaying) {\n Logger.log('⏯ Resuming VO', this.activeVO.id);\n this.activeVO.resume();\n this.onVoiceOverStart.emit(this.activeVO);\n }\n this.activeTimeout?.resume();\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VoiceOverPlugin-rTNz_9eb.js","names":[],"sources":["../src/plugins/audio/VoiceOverPlugin.ts"],"sourcesContent":["import { gsap } from 'gsap';\nimport { Signal } from '../../signals';\nimport { Logger } from '../../utils';\nimport type { IPlugin } from '../Plugin';\nimport { Plugin } from '../Plugin';\nimport { IAudioInstance } from './AudioInstance';\n\nexport type PlayMode = 'append' | 'override' | 'new';\nexport type VoCallback = (didPlay: boolean) => void;\nexport type VoKey = string | number;\n\nexport type Caption = {\n id: string;\n args?: { [key: string]: string };\n};\n\nexport interface IPlayVoiceOverOptions {\n mode?: PlayMode;\n priority?: number;\n callback?: VoCallback;\n localized?: boolean;\n}\n\ninterface IQueueItem extends IPlayVoiceOverOptions {\n key: string;\n delay?: number;\n timeout?: gsap.core.Tween;\n}\n\nexport interface IVoiceOverPlugin extends IPlugin {\n fadeOutDuration: number;\n debug: boolean;\n onVoiceOverStart: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverPaused: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverResumed: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverComplete: Signal<(instance: IAudioInstance) => void>;\n onVoiceOverStopped: Signal<(instance?: IAudioInstance) => void>;\n paused: boolean;\n\n playVO(key: VoKey | VoKey[], mode?: PlayMode, callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], options?: IPlayVoiceOverOptions): Promise<IAudioInstance>;\n\n stopVO(): Promise<void>;\n\n pauseVO(): void;\n\n resumeVO(): void;\n}\n\nexport class VoiceOverPlugin extends Plugin implements IVoiceOverPlugin {\n public readonly id = 'voiceover';\n public fadeOutDuration = 0.15;\n public debug = false;\n public onVoiceOverStart: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverPaused: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverComplete: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverResumed: Signal<(instance: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n public onVoiceOverStopped: Signal<(instance?: IAudioInstance) => void> = new Signal<\n (instance: IAudioInstance) => void\n >();\n private readonly _queue: IQueueItem[] = [];\n private readonly _pausedQueue: IQueueItem[] = [];\n private _paused: boolean = false;\n\n get paused() {\n return this._paused;\n }\n\n get activeTimeout(): gsap.core.Tween | undefined {\n return this._queue[0]?.timeout;\n }\n\n get activeVO(): IAudioInstance | undefined {\n if (this._queue.length > 0 && this._queue[0].key) {\n return this.app.audio.getAudioInstance(this._queue[0].key, 'voiceover') as IAudioInstance | undefined;\n }\n return undefined;\n }\n\n async initialize() {\n this.app.actions('pause').connect(this.onPause);\n this.app.actions('unpause').connect(this.onResume);\n this.app.scenes.onSceneChangeStart.connect(this.stopVO);\n }\n\n playVO(key: VoKey | VoKey[], mode?: PlayMode, callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], callback?: VoCallback): Promise<IAudioInstance>;\n\n playVO(key: VoKey | VoKey[], options?: IPlayVoiceOverOptions): Promise<IAudioInstance>;\n\n async playVO(\n key: VoKey | VoKey[],\n modeOrCallbackOrOptions?: PlayMode | VoCallback | IPlayVoiceOverOptions,\n callback?: VoCallback,\n ): Promise<IAudioInstance | void> {\n if (!Array.isArray(key)) {\n key = [key];\n }\n\n let priority = 0;\n let mode: string | undefined = 'override';\n let locale: string = '';\n\n if (typeof modeOrCallbackOrOptions === 'function') {\n callback = modeOrCallbackOrOptions;\n } else if (typeof modeOrCallbackOrOptions === 'object') {\n const modeAsOptions = modeOrCallbackOrOptions as IPlayVoiceOverOptions;\n priority = modeAsOptions.priority ?? 0;\n callback = modeAsOptions.callback;\n mode = modeAsOptions.mode ?? 'override';\n if (modeAsOptions.localized) {\n locale = this.app.i18n.locale;\n key = key.map((k) => `${k}_${locale}`);\n }\n }\n\n if (typeof modeOrCallbackOrOptions === 'string') {\n mode = modeOrCallbackOrOptions;\n }\n this._paused = false;\n if (key.length === 1 && this._queue.length === 1 && this._queue[0].key === key[0]) {\n Logger.warn(`🔇 Skipped VO ${key[0]} because it is already playing`);\n if (callback) {\n callback(false);\n }\n } else if (\n this._queue.length === 0 ||\n (mode === 'override' && priority >= this._queue[0].priority!) ||\n (mode === 'new' && priority > this._queue[0].priority!)\n ) {\n await this.stopVO();\n this.addToQueue(key, callback, priority);\n return this.playNext();\n } else if (mode === 'append') {\n this.addToQueue(key, callback, priority);\n } else if (callback) {\n Logger.warn(`🎟🔇 Firing callback without playing VO(s) ${key.join(', ')}`);\n callback(false);\n } else {\n Logger.warn(`🔇 Skipped VO(s) ${key.join(', ')} because it is lower priority than what was already playing`);\n }\n }\n\n public async stopVO(): Promise<void> {\n const activeVO: IAudioInstance | undefined = this.activeVO;\n const activeItem: IQueueItem | undefined = this._queue[0];\n this._queue.splice(0, this._queue.length);\n this._pausedQueue.splice(0, this._pausedQueue.length);\n activeItem?.timeout?.kill();\n if (activeVO) {\n if (!activeVO.media) {\n Logger.warn(`🛑 Stopping VO %c%s%c while it is still loading ${activeVO.id}`);\n activeVO.remove();\n } else if (activeVO.isPlaying) {\n Logger.log(`🤫 Fading out VO ${activeVO.id} (duration:${this.fadeOutDuration})`);\n await activeVO.fadeTo(0, this.fadeOutDuration);\n activeVO.stop();\n } else {\n activeVO.stop();\n }\n } else {\n Logger.warn('🛑 No active VO to stop');\n this.activeTimeout?.kill();\n }\n this.clearSignalConnections();\n this._paused = false;\n this.onVoiceOverStopped.emit(activeVO);\n }\n\n pauseVO() {\n if (this._paused) return;\n if (this._queue.length > 0) {\n this._paused = true;\n this._pausedQueue.push(...this._queue);\n const activeVO = this.activeVO;\n const activeTimeout = this.activeTimeout;\n activeVO?.pause();\n activeTimeout?.pause();\n this._queue.splice(0, this._queue.length);\n }\n }\n\n resumeVO() {\n if (!this._paused) return;\n this._paused = false;\n if (this._pausedQueue.length > 0) {\n this._queue.push(...this._pausedQueue);\n this._pausedQueue.splice(0, this._pausedQueue.length);\n const activeVO = this.activeVO;\n const activeTimeout = this.activeTimeout;\n activeVO?.resume();\n activeTimeout?.resume();\n if (activeVO) {\n this.onVoiceOverStart.emit(activeVO);\n }\n }\n }\n\n protected getCoreSignals(): string[] {\n return ['onVoiceOverStart', 'onVoiceOverPaused', 'onVoiceOverComplete', 'onVoiceOverResumed', 'onVoiceOverStopped'];\n }\n\n private addToQueue(keys: VoKey[], cb?: VoCallback, priority?: number) {\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n if (typeof key === 'number') {\n Logger.log(`➕ Queueing delay ${key}`);\n } else {\n Logger.log(`➕ Queueing VO ${key}`);\n }\n\n this._queue.push({\n key: typeof key === 'string' ? key : '',\n delay: typeof key === 'number' ? key : undefined,\n callback: i === keys.length - 1 ? cb : undefined,\n priority,\n });\n }\n const toLoad = keys.filter((it) => typeof it === 'string') as string[];\n Logger.log(`📂 Loading VO(s) ${toLoad.join(', ')}`);\n this.app.audio.load(toLoad, 'voiceover');\n }\n\n private async playNext(): Promise<IAudioInstance | void> {\n if (this._queue.length > 0) {\n const item = this._queue[0];\n if (item.delay !== undefined) {\n this.activeTimeout?.kill();\n if (this._queue.length === 1) {\n // skip delay if last item in queue\n Logger.log('⌛ Skipping delay because there are no more items in queue');\n this._queue.shift();\n if (item.callback) {\n item.callback(true);\n }\n return this.playNext();\n } else {\n Logger.log('⏳ Waiting %s seconds before next VO', item.delay);\n item.timeout = gsap.delayedCall(item.delay, () => {\n this._queue.shift();\n if (item.callback) {\n item.callback(true);\n }\n return this.playNext();\n });\n }\n } else {\n const existing = this.app.audio.getAudioInstance(item.key, 'voiceover');\n if (existing) {\n if (existing.isPlaying) {\n Logger.warn('🛑 Stopping VO %c%s%c (no fade out)', existing.id);\n existing.stop();\n this.onVoiceOverComplete.emit(existing);\n }\n } else {\n Logger.log('📂 Loading VO %c%s%c', item.key);\n }\n const instance = await this.app.audio.play(item.key, 'voiceover', { singleInstance: true });\n if (this.activeVO) {\n this.onVoiceOverStart.emit(this.activeVO);\n }\n if (this._queue[0] !== item) {\n return;\n }\n Logger.log(`▶️▶️ Playing VO ${item.key}`);\n Logger.log('ℹ️ Queue length:', this._queue.length);\n\n if (this.activeVO) {\n this.addSignalConnection(\n this.activeVO.onEnd.connectOnce(this._handleActiveVOEnded),\n this.activeVO.onPaused.connectOnce(this._handleActiveVOPaused),\n this.activeVO.onResumed.connectOnce(this._handleActiveVOResumed),\n this.activeVO.onStart.connectOnce(this._handleActiveVOStarted),\n );\n } else {\n Logger.error('⚠️ Vo %c%s%c completed early (did not play?)', item.key);\n this._handleActiveVOEndedWithoutPlaying(instance);\n }\n return instance;\n }\n } else {\n Logger.log('✅ Nothing left in queue');\n }\n }\n\n private _handleActiveVOStarted(instance: IAudioInstance) {\n this.onVoiceOverStart.emit(this.activeVO || instance);\n }\n\n private _handleActiveVOPaused(instance: IAudioInstance) {\n this.onVoiceOverPaused.emit(this.activeVO || instance);\n }\n\n private _handleActiveVOResumed(instance: IAudioInstance) {\n this.onVoiceOverResumed.emit(this.activeVO || instance);\n }\n\n private _handleActiveVOEndedWithoutPlaying(instance: IAudioInstance) {\n this.onVoiceOverComplete.emit(this.activeVO || instance);\n this.activeTimeout?.kill();\n this._currentItemCallback(false);\n this._queue.shift();\n this.playNext();\n }\n\n private _handleActiveVOEnded(instance: IAudioInstance) {\n this.onVoiceOverComplete.emit(this.activeVO || instance);\n this.activeTimeout?.kill();\n this._currentItemCallback();\n this._queue.shift();\n this.playNext();\n }\n\n private _currentItemCallback(didPlay: boolean = true) {\n const item = this._queue[0];\n if (!item) {\n return;\n }\n Logger.log(`🏁 Completed VO ${item.key}`);\n if (item.callback) {\n Logger.log(`'🎟 Firing callback for`, item.key);\n item.callback(didPlay);\n }\n }\n\n private onPause() {\n if (this.activeVO !== undefined && this.activeVO.isPlaying) {\n Logger.log('⏸ Pausing VO', this.activeVO.id);\n this.activeVO.pause();\n this.onVoiceOverComplete.emit(this.activeVO);\n }\n this.activeTimeout?.pause();\n }\n\n private onResume() {\n if (this.activeVO !== undefined && !this.activeVO.isPlaying) {\n Logger.log('⏯ Resuming VO', this.activeVO.id);\n this.activeVO.resume();\n this.onVoiceOverStart.emit(this.activeVO);\n }\n this.activeTimeout?.resume();\n }\n}\n"],"mappings":"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"}
|
package/lib/caper.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as ee, H as te, Ht as ne, I as re, It as ie, J as p, K as ae, L as oe, Lt as se, M as ce, Mt as le, N as ue, Nt as de, O as fe, Ot as pe, P as me, Pt as he, Q as ge, R as m, Rt as _e, S as h, St as ve, T as ye, Tt as be, U as xe, Ut as Se, V as Ce, Vt as g, W as we, X as Te, Y as Ee, Z as De, _ as Oe, _t as ke, a as Ae, at as je, b as _, bt as Me, c as Ne, ct as v, d as y, dt as b, et as Pe, f as Fe, ft as Ie, g as Le, gt as Re, h as ze, ht as Be, i as Ve, it as He, j as Ue, jt as We, k as Ge, kt as x, l as Ke, lt as qe, m as Je, mt as Ye, n as Xe, nt as Ze, o as Qe, ot as $e, p as S, pt as et, q as C, r as w, rt as tt, s as nt, st as rt, t as it, tt as at, u as ot, ut as st, v as ct, vt as lt, w as ut, wt as dt, x as ft, xt as pt, y as mt, yt as ht, z as gt, zt as _t } from "./registries-
|
|
2
|
-
import { A as vt, C as yt, D as bt, E as xt, F as St, I as Ct, L as wt, M as Tt, N as Et, O as Dt, P as Ot, S as kt, T as At, _ as T, a as jt, b as Mt, c as Nt, d as Pt, f as Ft, g as E, h as It, i as Lt, j as Rt, k as zt, l as Bt, m as Vt, n as Ht, o as Ut, p as Wt, r as Gt, s as Kt, u as qt, v as Jt, w as Yt, x as Xt, y as Zt } from "./const-
|
|
1
|
+
import { $ as e, A as t, At as n, B as r, Bt as i, C as a, Ct as o, D as s, Dt as c, E as l, Et as u, F as d, Ft as f, G as ee, H as te, Ht as ne, I as re, It as ie, J as p, K as ae, L as oe, Lt as se, M as ce, Mt as le, N as ue, Nt as de, O as fe, Ot as pe, P as me, Pt as he, Q as ge, R as m, Rt as _e, S as h, St as ve, T as ye, Tt as be, U as xe, Ut as Se, V as Ce, Vt as g, W as we, X as Te, Y as Ee, Z as De, _ as Oe, _t as ke, a as Ae, at as je, b as _, bt as Me, c as Ne, ct as v, d as y, dt as b, et as Pe, f as Fe, ft as Ie, g as Le, gt as Re, h as ze, ht as Be, i as Ve, it as He, j as Ue, jt as We, k as Ge, kt as x, l as Ke, lt as qe, m as Je, mt as Ye, n as Xe, nt as Ze, o as Qe, ot as $e, p as S, pt as et, q as C, r as w, rt as tt, s as nt, st as rt, t as it, tt as at, u as ot, ut as st, v as ct, vt as lt, w as ut, wt as dt, x as ft, xt as pt, y as mt, yt as ht, z as gt, zt as _t } from "./registries-DmNGVLAi.js";
|
|
2
|
+
import { A as vt, C as yt, D as bt, E as xt, F as St, I as Ct, L as wt, M as Tt, N as Et, O as Dt, P as Ot, S as kt, T as At, _ as T, a as jt, b as Mt, c as Nt, d as Pt, f as Ft, g as E, h as It, i as Lt, j as Rt, k as zt, l as Bt, m as Vt, n as Ht, o as Ut, p as Wt, r as Gt, s as Kt, u as qt, v as Jt, w as Yt, x as Xt, y as Zt } from "./const-Cj14a5U2.js";
|
|
3
3
|
import { n as Qt, t as D } from "./padding-1kHDpGlQ.js";
|
|
4
|
-
import { r as $t, t as en } from "./DataAdapter-
|
|
5
|
-
import { t as tn } from "./ScreenDebugPlugin-
|
|
4
|
+
import { r as $t, t as en } from "./DataAdapter-T-22-_D1.js";
|
|
5
|
+
import { t as tn } from "./ScreenDebugPlugin-kz9Mr6j1.js";
|
|
6
6
|
import { CanvasTextMetrics as O, Container as nn, Graphics as k, Point as A, Polygon as rn, Rectangle as an, Sprite as on, Texture as j, isMobile as M } from "pixi.js";
|
|
7
7
|
import { gsap as N } from "gsap";
|
|
8
8
|
//#region src/utils/array.ts
|
|
@@ -159,32 +159,32 @@ function wn(e, t, n = "width") {
|
|
|
159
159
|
}
|
|
160
160
|
//#endregion
|
|
161
161
|
//#region src/utils/platform.ts
|
|
162
|
-
var Tn = typeof window < "u" ? window.devicePixelRatio > 1 || window.matchMedia && window.matchMedia("(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)").matches : !1, L = typeof window < "u" ? "ontouchstart" in window || navigator.maxTouchPoints > 0 : !1, R = M.any, z = M.android.device,
|
|
162
|
+
var Tn = typeof window < "u" ? window.devicePixelRatio > 1 || window.matchMedia && window.matchMedia("(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-resolution: 1.5dppx)").matches : !1, L = typeof window < "u" ? "ontouchstart" in window || navigator.maxTouchPoints > 0 : !1, En = typeof window < "u" ? "__TAURI_INTERNALS__" in window : !1, R = M.any, z = M.android.device, Dn = M.apple.device;
|
|
163
163
|
//#endregion
|
|
164
164
|
//#region src/utils/rect.ts
|
|
165
|
-
function
|
|
165
|
+
function On(e, t) {
|
|
166
166
|
return e.x += t.x, e.y += t.y, e;
|
|
167
167
|
}
|
|
168
|
-
function
|
|
168
|
+
function kn(e, t) {
|
|
169
169
|
return t === void 0 && (t = new A()), t.set(e.x + e.width * .5, e.y + e.height * .5), t;
|
|
170
170
|
}
|
|
171
|
-
function
|
|
171
|
+
function An(e, t) {
|
|
172
172
|
return e.x *= t, e.y *= t, e.width *= t, e.height *= t, e;
|
|
173
173
|
}
|
|
174
|
-
function
|
|
174
|
+
function jn(e, t) {
|
|
175
175
|
return t === void 0 && (t = new A()), t.set(e.width, e.height), t;
|
|
176
176
|
}
|
|
177
177
|
//#endregion
|
|
178
178
|
//#region src/utils/set.ts
|
|
179
|
-
function
|
|
179
|
+
function Mn(e, t) {
|
|
180
180
|
let n = /* @__PURE__ */ new Set();
|
|
181
181
|
for (let r of e) t(r) && n.add(r);
|
|
182
182
|
return n;
|
|
183
183
|
}
|
|
184
|
-
function
|
|
184
|
+
function Nn(e) {
|
|
185
185
|
return e?.values().next().value;
|
|
186
186
|
}
|
|
187
|
-
function
|
|
187
|
+
function Pn(e) {
|
|
188
188
|
let t;
|
|
189
189
|
for (let n of e) t = n;
|
|
190
190
|
return t;
|
|
@@ -205,35 +205,35 @@ function B(e, t) {
|
|
|
205
205
|
}
|
|
206
206
|
//#endregion
|
|
207
207
|
//#region src/version.ts
|
|
208
|
-
var V = "0.7.
|
|
208
|
+
var V = "0.7.2", H = "8.22.0", Fn = " ........ ..... ............ ............. ........... \n ............. ....... ................ ............. .............. \n .............. ......... ............... ............. .............. \n ..... ........... .............. ............ .............. \n ..... ...... ...... .............. ............. ............. \n .............. ...... ..... ............ ............. ..... ...... \n ................... ..... ..... ............. ..... ....... \n ................ .......... ............. ..... ..... ";
|
|
209
209
|
function U() {
|
|
210
|
-
let e = `\n${
|
|
210
|
+
let e = `\n${Fn}\n\n v${V} | %cPixi.js v${H} %c| %chttps://github.com/anthonysapp/caper\n\n`;
|
|
211
211
|
console.log(e, "color: #E91E63; font-weight: 600;", "color: inherit;", "color: #00BCD4; text-decoration: underline;");
|
|
212
212
|
}
|
|
213
213
|
//#endregion
|
|
214
214
|
//#region src/webgl-check.ts
|
|
215
|
-
function
|
|
215
|
+
function In() {
|
|
216
216
|
if (typeof document > "u") return;
|
|
217
217
|
let e = document.createElement("canvas");
|
|
218
218
|
e.getContext("webgl") || e.getContext("experimental-webgl") || console.error("Your browser does not support WebGL.");
|
|
219
219
|
}
|
|
220
220
|
//#endregion
|
|
221
221
|
//#region src/plugins/actions/methods.ts
|
|
222
|
-
function
|
|
222
|
+
function Ln(e) {
|
|
223
223
|
return e ?? d;
|
|
224
224
|
}
|
|
225
|
-
function
|
|
225
|
+
function Rn(e, t, n = !0) {
|
|
226
226
|
return n && (t = {
|
|
227
227
|
...m,
|
|
228
228
|
...t
|
|
229
229
|
}), t;
|
|
230
230
|
}
|
|
231
|
-
function
|
|
231
|
+
function zn(e) {
|
|
232
232
|
return e || [];
|
|
233
233
|
}
|
|
234
234
|
//#endregion
|
|
235
235
|
//#region src/plugins/breakpoints/methods.ts
|
|
236
|
-
function
|
|
236
|
+
function Bn(e) {
|
|
237
237
|
return {
|
|
238
238
|
tiers: e.tiers,
|
|
239
239
|
modes: e.modes ?? {}
|
|
@@ -243,7 +243,7 @@ function zn(e) {
|
|
|
243
243
|
//#region src/plugins/input/touch/constants.ts
|
|
244
244
|
var W = /* @__PURE__ */ function(e) {
|
|
245
245
|
return e.None = "none", e.Left = "left", e.Top = "top", e.Bottom = "bottom", e.Right = "right", e.TopLeft = "top_left", e.TopRight = "top_right", e.BottomLeft = "bottom_left", e.BottomRight = "bottom_right", e;
|
|
246
|
-
}({}),
|
|
246
|
+
}({}), Vn = [
|
|
247
247
|
W.None,
|
|
248
248
|
W.Left,
|
|
249
249
|
W.Top,
|
|
@@ -256,20 +256,20 @@ var W = /* @__PURE__ */ function(e) {
|
|
|
256
256
|
];
|
|
257
257
|
//#endregion
|
|
258
258
|
//#region src/plugins/input/methods.ts
|
|
259
|
-
function
|
|
259
|
+
function Hn(e, t, n) {
|
|
260
260
|
return n || [];
|
|
261
261
|
}
|
|
262
262
|
//#endregion
|
|
263
263
|
//#region src/core/globals.ts
|
|
264
|
-
var G = 200,
|
|
265
|
-
function
|
|
264
|
+
var G = 200, Un = "CaperApplication";
|
|
265
|
+
function Wn() {
|
|
266
266
|
try {
|
|
267
267
|
return globalThis.Caper?.__dev === !0;
|
|
268
268
|
} catch {
|
|
269
269
|
return !1;
|
|
270
270
|
}
|
|
271
271
|
}
|
|
272
|
-
function
|
|
272
|
+
function Gn() {
|
|
273
273
|
try {
|
|
274
274
|
return !1;
|
|
275
275
|
} catch {
|
|
@@ -299,13 +299,13 @@ function q() {
|
|
|
299
299
|
return a.promise;
|
|
300
300
|
}), t;
|
|
301
301
|
}
|
|
302
|
-
function
|
|
302
|
+
function Kn() {
|
|
303
303
|
q();
|
|
304
304
|
}
|
|
305
305
|
function J(e) {
|
|
306
|
-
return e.config?.id ||
|
|
306
|
+
return e.config?.id || Un;
|
|
307
307
|
}
|
|
308
|
-
function
|
|
308
|
+
function qn(e) {
|
|
309
309
|
let t = J(e), n = [], r, i = [], a = (e) => {
|
|
310
310
|
n.push(e), n.length > G && n.splice(0, n.length - G);
|
|
311
311
|
}, o = () => r ? r() : void 0, s = (e) => {
|
|
@@ -379,8 +379,8 @@ function Kn(e) {
|
|
|
379
379
|
}
|
|
380
380
|
function Y(e) {
|
|
381
381
|
let t = q(), n = J(e);
|
|
382
|
-
if (t.apps.set(n, e), t.app = e,
|
|
383
|
-
let r =
|
|
382
|
+
if (t.apps.set(n, e), t.app = e, Wn() || e.config?.automation === !0 || Gn()) {
|
|
383
|
+
let r = qn(e);
|
|
384
384
|
t.automation[n] = r, e.automation = r;
|
|
385
385
|
}
|
|
386
386
|
}
|
|
@@ -394,21 +394,21 @@ function X(e) {
|
|
|
394
394
|
}
|
|
395
395
|
//#endregion
|
|
396
396
|
//#region src/core/create.ts
|
|
397
|
-
var
|
|
397
|
+
var Jn = "caper-game-container";
|
|
398
398
|
function Z(e) {
|
|
399
399
|
let t = document.createElement("div");
|
|
400
400
|
return t.setAttribute("id", e), document.body.appendChild(t), t;
|
|
401
401
|
}
|
|
402
|
-
async function
|
|
402
|
+
async function Q() {
|
|
403
403
|
return new Promise((e) => {
|
|
404
404
|
document.readyState === "complete" || document.readyState === "interactive" ? e(!0) : document.addEventListener("DOMContentLoaded", () => {
|
|
405
405
|
e(!0);
|
|
406
406
|
});
|
|
407
407
|
});
|
|
408
408
|
}
|
|
409
|
-
async function
|
|
410
|
-
let { defaultFactoryMethods: r } = await import("./const-
|
|
411
|
-
Te(r), await
|
|
409
|
+
async function Yn(e = { id: "CaperApplication" }, t = Jn, n = !0) {
|
|
410
|
+
let { defaultFactoryMethods: r } = await import("./const-Cj14a5U2.js").then((e) => e.t);
|
|
411
|
+
Te(r), await Q(), In(), n && U();
|
|
412
412
|
let i = null;
|
|
413
413
|
if (typeof t == "string" ? (i = document.getElementById(t), i ||= Z(t)) : t instanceof HTMLElement ? i = t : t === window && (i = document.body), !i) throw Error("You passed in a DOM Element, but none was found. If you instead pass in a string, a container will be created for you, using the string for its id.");
|
|
414
414
|
e.resizeToContainer && (e.resizeTo = i), e.useLayout && (e.layout = {
|
|
@@ -426,11 +426,11 @@ async function Q(e = { id: "CaperApplication" }, t = qn, n = !0) {
|
|
|
426
426
|
}
|
|
427
427
|
//#endregion
|
|
428
428
|
//#region src/display/Entity.ts
|
|
429
|
-
var
|
|
429
|
+
var Xn = class extends S {
|
|
430
430
|
constructor(e) {
|
|
431
431
|
super(), this.props = e ?? {};
|
|
432
432
|
}
|
|
433
|
-
},
|
|
433
|
+
}, Zn = class extends S {
|
|
434
434
|
get animationContext() {
|
|
435
435
|
return this._animationContext ?? `__scene_${this.id}`;
|
|
436
436
|
}
|
|
@@ -465,7 +465,7 @@ var Yn = class extends S {
|
|
|
465
465
|
}
|
|
466
466
|
onPause(e) {}
|
|
467
467
|
onResume(e) {}
|
|
468
|
-
},
|
|
468
|
+
}, Qn = class extends S {
|
|
469
469
|
get active() {
|
|
470
470
|
return this._active;
|
|
471
471
|
}
|
|
@@ -506,7 +506,7 @@ var Yn = class extends S {
|
|
|
506
506
|
_update(e) {
|
|
507
507
|
this.active && this.initialized && this.update(e);
|
|
508
508
|
}
|
|
509
|
-
},
|
|
509
|
+
}, $n = class extends nn {
|
|
510
510
|
constructor(e) {
|
|
511
511
|
return super({ isRenderGroup: !0 }), this.config = e, this.onZoom = new C(), this.onZoomComplete = new C(), this.minX = 0, this.minY = 0, this._zooming = !1, this._zoomLerp = .1, this._targetPivot = new A(0, 0), this._targetScale = new A(1, 1), this._lerp = 0, this._target = null, this._followOffset = new A(0, 0), f(this), e && (this.container = e.container, this.addChild(this.container), e.minX && (this.minX = e.minX), e.maxX && (this.maxX = e.maxX), e.minY && (this.minY = e.minY), this.viewportWidth = e.viewportWidth ?? this.app.size.width, this.viewportHeight = e.viewportHeight ?? this.app.size.height, this.worldWidth = e.worldWidth ?? this.viewportWidth, this.worldHeight = e.worldHeight ?? this.viewportHeight, this.maxX = e.maxX ?? this.worldWidth - this.viewportWidth, this.maxY = e.maxY ?? this.worldHeight - this.viewportHeight), this._targetPivot.set(this.viewportWidth * .5, this.viewportHeight * .5), e.target && (this.target = e.target), this._lerp = 1, this.update(), e.lerp && (this.lerp = e.lerp), this;
|
|
512
512
|
}
|
|
@@ -579,7 +579,7 @@ var Yn = class extends S {
|
|
|
579
579
|
} else this.pivot.set(this._targetPivot.x, this._targetPivot.y);
|
|
580
580
|
this.position.set(this.viewportWidth / 2, this.viewportHeight / 2);
|
|
581
581
|
}
|
|
582
|
-
},
|
|
582
|
+
}, er = class {
|
|
583
583
|
constructor(e, t) {
|
|
584
584
|
this.camera = e, this.interactiveArea = t, this.dragging = !1, this.previousPointerPosition = null, f(this), this.camera = e, this.interactiveArea = t, this.app.keyboard.onKeyDown().connect(this.handleKeyDown), this.interactiveArea.on("pointerdown", this.onPointerDown.bind(this)), this.interactiveArea.on("pointermove", this.onPointerMove.bind(this)), this.app.stage.on("pointerup", this.onPointerUp.bind(this)), this.app.stage.on("pointerupoutside", this.onPointerUp.bind(this)), this.interactiveArea.on("touchstart", this.onPointerDown.bind(this)), this.interactiveArea.on("touchmove", this.onPointerMove.bind(this)), this.interactiveArea.on("touchend", this.onPointerUp.bind(this));
|
|
585
585
|
}
|
|
@@ -626,7 +626,7 @@ var Yn = class extends S {
|
|
|
626
626
|
getEventPosition(e) {
|
|
627
627
|
return e instanceof TouchEvent ? new A(e.touches[0].clientX, e.touches[0].clientY) : new A(e.clientX, e.clientY);
|
|
628
628
|
}
|
|
629
|
-
},
|
|
629
|
+
}, tr = [
|
|
630
630
|
"text",
|
|
631
631
|
"anchor",
|
|
632
632
|
"roundPixels",
|
|
@@ -671,14 +671,14 @@ var Yn = class extends S {
|
|
|
671
671
|
scale: 1,
|
|
672
672
|
marginTop: 60
|
|
673
673
|
}
|
|
674
|
-
},
|
|
674
|
+
}, nr = [
|
|
675
675
|
"text",
|
|
676
676
|
"password",
|
|
677
677
|
"number",
|
|
678
678
|
"email",
|
|
679
679
|
"tel",
|
|
680
680
|
"url"
|
|
681
|
-
],
|
|
681
|
+
], rr = class e extends T(E(h(S))) {
|
|
682
682
|
constructor(e, t = !1, n = null) {
|
|
683
683
|
if (super({
|
|
684
684
|
autoUpdate: !0,
|
|
@@ -958,7 +958,7 @@ var Yn = class extends S {
|
|
|
958
958
|
this.domElement = this.clone.domElement, this._addDomElementListeners();
|
|
959
959
|
return;
|
|
960
960
|
}
|
|
961
|
-
clearTimeout(this._focusTimer), clearTimeout(this._pointerDownTimer), this.domElement = document.createElement("input"), this.domElement.type = "text", this.options.type &&
|
|
961
|
+
clearTimeout(this._focusTimer), clearTimeout(this._pointerDownTimer), this.domElement = document.createElement("input"), this.domElement.type = "text", this.options.type && nr.includes(this.options.type) && (this.domElement.type = this.options.type), this.options.pattern && (this.domElement.pattern = this.options.pattern), this.options.regex && (this._regex = this.options.regex);
|
|
962
962
|
let t = this.getGlobalPosition(), n = this.getBounds();
|
|
963
963
|
n.x = t.x, n.y = t.y, n.width = this.width - this.options.padding.left, this.domElement.style.position = "fixed", this.domElement.style.border = "none", this.domElement.style.outline = "none", this.domElement.style.left = z ? "0" : `${n.left}px`, this.domElement.style.top = z ? "0" : `${n.top}px`, this.domElement.style.width = `${n.width}px`, this.domElement.style.height = `${n.height}px`, this.domElement.style.padding = "0", this.options.debug ? this.domElement.style.opacity = "0.8" : this.domElement.style.opacity = "0.0000001", this.app.canvas.parentElement?.appendChild(this.domElement), this.domElement.value = this.value, this.domElement.setAttribute("placeholder", this.options?.placeholder?.text ?? ""), this.options?.maxLength && this.domElement.setAttribute("maxLength", this.options.maxLength.toString()), this._addDomElementListeners(), this._focusDomElement(e);
|
|
964
964
|
}
|
|
@@ -1093,7 +1093,7 @@ var Yn = class extends S {
|
|
|
1093
1093
|
let e = this._inputContainer.getBounds();
|
|
1094
1094
|
return e.width = this._lastWidth, e.height = this._lastHeight, e;
|
|
1095
1095
|
}
|
|
1096
|
-
},
|
|
1096
|
+
}, ir = class extends S {
|
|
1097
1097
|
constructor(e) {
|
|
1098
1098
|
if (super(), this.onChange = new C(), this.onStart = new C(), this.onEnd = new C(), this.onDestroy = new C(), this.outerRadius = 0, this.innerRadius = 0, this.innerAlphaStandby = .5, this.dragging = !1, this.pointData = new A(), this.direction = W.None, this.settings = Object.assign({
|
|
1099
1099
|
outerScale: 1,
|
|
@@ -1163,22 +1163,22 @@ var Yn = class extends S {
|
|
|
1163
1163
|
let t = Math.atan2(e.y, e.x);
|
|
1164
1164
|
return t >= -Math.PI / 8 && t < 0 || t >= 0 && t < Math.PI / 8 ? W.Right : t >= Math.PI / 8 && t < 3 * Math.PI / 8 ? W.BottomRight : t >= 3 * Math.PI / 8 && t < 5 * Math.PI / 8 ? W.Bottom : t >= 5 * Math.PI / 8 && t < 7 * Math.PI / 8 ? W.BottomLeft : t >= 7 * Math.PI / 8 && t < Math.PI || t >= -Math.PI && t < -7 * Math.PI / 8 ? W.Left : t >= -7 * Math.PI / 8 && t < -5 * Math.PI / 8 ? W.TopLeft : t >= -5 * Math.PI / 8 && t < -3 * Math.PI / 8 ? W.Top : W.TopRight;
|
|
1165
1165
|
}
|
|
1166
|
-
},
|
|
1166
|
+
}, ar = {
|
|
1167
1167
|
color: 0,
|
|
1168
1168
|
alpha: .75
|
|
1169
|
-
},
|
|
1169
|
+
}, or = {
|
|
1170
1170
|
backing: !0,
|
|
1171
1171
|
closeOnEscape: !0,
|
|
1172
1172
|
closeOnPointerDownOutside: !0,
|
|
1173
1173
|
actionContext: "popup"
|
|
1174
|
-
},
|
|
1174
|
+
}, sr = class e extends S {
|
|
1175
1175
|
get actionContext() {
|
|
1176
1176
|
return this.config.actionContext;
|
|
1177
1177
|
}
|
|
1178
1178
|
constructor(e, t = {}) {
|
|
1179
1179
|
super(), this.id = e, this.isShowing = !1, this._storedActionContext = void 0, this.config = Object.assign({
|
|
1180
1180
|
id: e,
|
|
1181
|
-
...
|
|
1181
|
+
...or
|
|
1182
1182
|
}, t), this._initialize();
|
|
1183
1183
|
}
|
|
1184
1184
|
get data() {
|
|
@@ -1187,7 +1187,7 @@ var Yn = class extends S {
|
|
|
1187
1187
|
static makeBacking(e, t) {
|
|
1188
1188
|
let n = {};
|
|
1189
1189
|
typeof e == "object" && (n = e);
|
|
1190
|
-
let r = Object.assign({ ...
|
|
1190
|
+
let r = Object.assign({ ...ar }, n), i = new on(j.WHITE);
|
|
1191
1191
|
return i.anchor.set(.5), i.alpha = r.alpha, i.tint = r.color, i.width = t.width, i.height = t.height, i;
|
|
1192
1192
|
}
|
|
1193
1193
|
initialize() {}
|
|
@@ -1229,7 +1229,7 @@ var Yn = class extends S {
|
|
|
1229
1229
|
restoreActionContext() {
|
|
1230
1230
|
this._storedActionContext && (x.log("Popup", "Restoring action context", this._storedActionContext), this.app.actionContext = this._storedActionContext), this._storedActionContext = void 0;
|
|
1231
1231
|
}
|
|
1232
|
-
},
|
|
1233
|
-
export { gt as ActionsPlugin, Oe as Animated, Zt as AnimatedSprite, w as Application, xe as AssetsPlugin, Ue as AudioChannel, t as AudioInstance, Ge as AudioManagerPlugin, ce as BreakpointPlugin, Vt as Button, It as ButtonConfigKeys,
|
|
1232
|
+
}, cr = p.Collector, lr = p.CollectorArray, ur = p.CollectorLast, dr = p.CollectorUntil0, fr = p.CollectorWhile0, pr = p.SignalConnections;
|
|
1233
|
+
export { gt as ActionsPlugin, Oe as Animated, Zt as AnimatedSprite, w as Application, xe as AssetsPlugin, Ue as AudioChannel, t as AudioInstance, Ge as AudioManagerPlugin, ce as BreakpointPlugin, Vt as Button, It as ButtonConfigKeys, $n as Camera, er as CameraController, pe as CaperEvent, cr as Collector, lr as CollectorArray, ur as CollectorLast, dr as CollectorUntil0, fr as CollectorWhile0, fn as Color, S as Container, Je as ContainerConfigKeys, mt as Controls, en as DataAdapter, Rt as DebugAlpha, Tt as DebugColors, me as DefaultActionContexts, d as DefaultActionContextsArray, re as DefaultActions, oe as DefaultButtonIds, Xn as Entity, Le as Factory, Pt as FlexContainer, Ft as FlexContainerConfigKeys, s as FocusManagerPlugin, fe as FocusOutliner, T as Focusable, te as FullScreenPlugin, ye as GesturePlugin, rr as Input, a as InputControllerTypes, ct as InputPlugin, E as Interactive, Vn as JOYSTICK_DIRECTIONS, ir as Joystick, W as JoystickDirection, ft as KeyboardControls, r as KeyboardPlugin, x as Logger, Ve as LookupPlugin, Dt as ParticleContainer, zt as ParticleContainerConfigKeys, we as Plugin, sr as Popup, Fe as PopupManagerPlugin, o as Queue, y as ResizerPlugin, Zn as Scene, Ke as SceneManagerPlugin, Qn as SceneTransition, tn as ScreenDebugPlugin, C as Signal, pr as SignalConnections, Jt as SpineAnimation, ae as Store, bt as Svg, tr as TextPropsKeys, Qe as Timer, nt as TimerPlugin, Bt as Toast, Nt as Toaster, _ as TouchControls, _ as VirtualControls, jt as UICanvas, Ut as UICanvasConfigKeys, Ae as WebEventsPlugin, ze as WithLifecycle, h as WithSignals, at as add, Ze as addToPoint, f as bindAllMethods, ie as bindMethods, _e as bool, n as capitalize, We as capitalizeWords, kn as center, se as checkAndInvokeMethod, Re as clamp, Kt as computeEffectivePadding, it as coreFunctionRegistry, Xe as coreSignalRegistry, Yn as create, Z as createContainer, Et as createDebugGraphics, Ot as createDebugLabel, ee as createFactoryMethods, dt as createQueue, Ye as debounce, b as deepMerge, m as defaultActionsList, ue as defaultBreakpoints, Ht as defaultFactoryMethods, l as defaultGestureOptions, qt as defaultToastConfig, Rn as defineActions, Bn as defineBreakpoints, zn as defineButtons, De as defineConfig, Ln as defineContexts, Hn as defineControls, $t as defineData, gn as defineEntity, mn as definePlugin, hn as definePopup, pn as defineScene, _n as defineUI, be as delay, ln as destroyCanvas, tt as distance, He as distanceSq, D as ensurePadding, le as env, Mn as filterSet, Nn as firstFromSet, _t as floatBetween, i as floatBetweenPoint, Ne as formatTime, ge as generatePluginList, St as getDebugRegistry, ve as getDynamicModuleFromImportListItem, Mt as getErrorTexture, lt as getFirstMapEntry, ht as getLastMapEntry, B as getNearestCharacterIndex, Me as getNextMapEntry, Pe as getOrientation, pt as getPreviousMapEntry, cn as getRandomElement, Lt as getRegisteredEntityIds, Gt as getRegisteredUIIds, vt as getZeroPaddedNumber, ut as i18nPlugin, Kn as installCaperGlobal, g as intBetween, ne as intBetweenPoint, z as isAndroid, de as isDev, Dn as isIos, R as isMobile, he as isProduction, u as isPromise, Tn as isRetina, Ee as isStorageCapable, En as isTauri, Wt as isText, L as isTouch, Pn as lastFromSet, ke as lerp, je as lerpPoint, $e as magnitude, rt as multiply, Ce as normalizeKey, yn as objectDiagonal, On as offset, Sn as offsetShape, Cn as offsetSimpleShape, Ie as omitKeys, H as pixiVersion, et as pluck, Se as randomUUID, vn as reParent, Y as registerCaperApp, Ct as registerDebug, Xt as resolveAnchor, Qt as resolvePadding, kt as resolvePivot, v as resolvePointLike, yt as resolvePosition, Yt as resolveScale, Be as resolveSizeLike, At as resolveTexture, xt as resolveUnknownKeys, U as sayHello, An as scale, I as scaleToHeight, wn as scaleToSize, F as scaleToWidth, P as scaleUniform, xn as sendToBack, bn as sendToFront, ot as shouldEnableScreenDebug, sn as shuffle, X as signalCaperReady, jn as size, e as sortPluginsByRequires, qe as subtract, st as subtractFromPoint, un as toHex, dn as toRgb, wt as unregisterDebug, V as version, c as wait };
|
|
1234
1234
|
|
|
1235
1235
|
//# sourceMappingURL=caper.mjs.map
|