@famibee/skynovel 2.0.2 → 2.0.3

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.
Files changed (121) hide show
  1. package/dist/Button.js +36 -34
  2. package/dist/Button.js.map +1 -1
  3. package/dist/CallStack.js +11 -6
  4. package/dist/CallStack.js.map +1 -1
  5. package/dist/CmnInterface.js +13 -11
  6. package/dist/CmnInterface.js.map +1 -1
  7. package/dist/CmnLib.js +58 -56
  8. package/dist/CmnLib.js.map +1 -1
  9. package/dist/Config.js +9 -7
  10. package/dist/Config.js.map +1 -1
  11. package/dist/ConfigBase.js +52 -49
  12. package/dist/ConfigBase.js.map +1 -1
  13. package/dist/DebugMng.js +9 -6
  14. package/dist/DebugMng.js.map +1 -1
  15. package/dist/EventListenerCtn.js +6 -4
  16. package/dist/EventListenerCtn.js.map +1 -1
  17. package/dist/EventMng.js +522 -417
  18. package/dist/EventMng.js.map +1 -1
  19. package/dist/Grammar.js +22 -20
  20. package/dist/Grammar.js.map +1 -1
  21. package/dist/GrpLayer.js +58 -57
  22. package/dist/GrpLayer.js.map +1 -1
  23. package/dist/Layer.js +66 -64
  24. package/dist/Layer.js.map +1 -1
  25. package/dist/LayerMng.js +461 -441
  26. package/dist/LayerMng.js.map +1 -1
  27. package/dist/Main.js +69 -67
  28. package/dist/Main.js.map +1 -1
  29. package/dist/PropParser.js +23 -19
  30. package/dist/PropParser.js.map +1 -1
  31. package/dist/Reading.js +422 -418
  32. package/dist/Reading.js.map +1 -1
  33. package/dist/RubySpliter.js +4 -2
  34. package/dist/RubySpliter.js.map +1 -1
  35. package/dist/ScriptIterator.js +374 -370
  36. package/dist/ScriptIterator.js.map +1 -1
  37. package/dist/SndBuf.js +643 -622
  38. package/dist/SndBuf.js.map +1 -1
  39. package/dist/SoundMng.js +59 -60
  40. package/dist/SoundMng.js.map +1 -1
  41. package/dist/SpritesMng.js +135 -129
  42. package/dist/SpritesMng.js.map +1 -1
  43. package/dist/SysBase.js +985 -950
  44. package/dist/SysBase.js.map +1 -1
  45. package/dist/TxtLayer.js +558 -551
  46. package/dist/TxtLayer.js.map +1 -1
  47. package/dist/Variable.js +47 -45
  48. package/dist/Variable.js.map +1 -1
  49. package/dist/chunk.js +11 -9
  50. package/dist/gamepad.js +396 -660
  51. package/dist/gamepad.js.map +1 -1
  52. package/dist/pixi.js +2631 -2593
  53. package/dist/pixi.js.map +1 -1
  54. package/dist/platform.js +6 -4
  55. package/dist/platform.js.map +1 -1
  56. package/dist/rolldown-runtime.js +20 -0
  57. package/dist/web.js +418 -418
  58. package/dist/web.js.map +1 -1
  59. package/dist_app/Button.js +36 -34
  60. package/dist_app/Button.js.map +1 -1
  61. package/dist_app/CallStack.js +11 -6
  62. package/dist_app/CallStack.js.map +1 -1
  63. package/dist_app/CmnInterface.js +13 -11
  64. package/dist_app/CmnInterface.js.map +1 -1
  65. package/dist_app/CmnLib.js +58 -56
  66. package/dist_app/CmnLib.js.map +1 -1
  67. package/dist_app/Config.js +9 -7
  68. package/dist_app/Config.js.map +1 -1
  69. package/dist_app/ConfigBase.js +52 -49
  70. package/dist_app/ConfigBase.js.map +1 -1
  71. package/dist_app/DebugMng.js +9 -6
  72. package/dist_app/DebugMng.js.map +1 -1
  73. package/dist_app/EventListenerCtn.js +6 -4
  74. package/dist_app/EventListenerCtn.js.map +1 -1
  75. package/dist_app/EventMng.js +522 -417
  76. package/dist_app/EventMng.js.map +1 -1
  77. package/dist_app/Grammar.js +22 -20
  78. package/dist_app/Grammar.js.map +1 -1
  79. package/dist_app/GrpLayer.js +58 -57
  80. package/dist_app/GrpLayer.js.map +1 -1
  81. package/dist_app/Layer.js +66 -64
  82. package/dist_app/Layer.js.map +1 -1
  83. package/dist_app/LayerMng.js +461 -441
  84. package/dist_app/LayerMng.js.map +1 -1
  85. package/dist_app/Main.js +69 -67
  86. package/dist_app/Main.js.map +1 -1
  87. package/dist_app/PropParser.js +23 -19
  88. package/dist_app/PropParser.js.map +1 -1
  89. package/dist_app/Reading.js +422 -418
  90. package/dist_app/Reading.js.map +1 -1
  91. package/dist_app/RubySpliter.js +4 -2
  92. package/dist_app/RubySpliter.js.map +1 -1
  93. package/dist_app/ScriptIterator.js +374 -370
  94. package/dist_app/ScriptIterator.js.map +1 -1
  95. package/dist_app/SndBuf.js +643 -622
  96. package/dist_app/SndBuf.js.map +1 -1
  97. package/dist_app/SoundMng.js +59 -60
  98. package/dist_app/SoundMng.js.map +1 -1
  99. package/dist_app/SpritesMng.js +135 -129
  100. package/dist_app/SpritesMng.js.map +1 -1
  101. package/dist_app/SysBase.js +985 -950
  102. package/dist_app/SysBase.js.map +1 -1
  103. package/dist_app/TxtLayer.js +558 -551
  104. package/dist_app/TxtLayer.js.map +1 -1
  105. package/dist_app/Variable.js +47 -45
  106. package/dist_app/Variable.js.map +1 -1
  107. package/dist_app/app.js +62 -63
  108. package/dist_app/app.js.map +1 -1
  109. package/dist_app/appMain.js +11 -11
  110. package/dist_app/appMain.js.map +1 -1
  111. package/dist_app/chunk.js +11 -9
  112. package/dist_app/gamepad.js +396 -660
  113. package/dist_app/gamepad.js.map +1 -1
  114. package/dist_app/pixi.js +2028 -1990
  115. package/dist_app/pixi.js.map +1 -1
  116. package/dist_app/platform.js +6 -4
  117. package/dist_app/platform.js.map +1 -1
  118. package/dist_app/preload.js +1 -1
  119. package/dist_app/preload.js.map +1 -1
  120. package/dist_app/rolldown-runtime.js +20 -0
  121. package/package.json +20 -21
@@ -1 +1 @@
1
- {"version":3,"file":"SpritesMng.js","names":["#cfg","#val","#sys","#main","#cachePicMov","#dec2cachePicMov","#cacheAniSpr","#dec2cacheAniSpr","#glbVol","#movVol","#hFn2hve","#evtMng","ctn?: Container","fncFirstComp: IFncCompSpr","fncAllComp: (isStop: boolean)=> void","#addChild","#aSp","#csv2Sprites","#hFace","#hFn2ResAniSpr","aComp: {fn: string, fnc: IFncCompSpr}[]","#mkSprite","#charmVideoElm","#sortAFrameName"],"sources":["../src/sn/SpritesMng.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2023-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {Config} from './Config';\nimport {type IEvtMng, argChk_Boolean, argChk_Num, getFn, int} from './CmnLib';\nimport type {T_Main, T_Variable, SYS_DEC_RET} from './CmnInterface';\nimport {DebugMng} from './DebugMng';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport type {SysBase} from './SysBase';\nimport type {SoundMng} from './SoundMng';\nimport type {TArg} from './Grammar';\nimport {Layer} from './Layer';\nimport {Reading} from './Reading';\n\nimport {Sprite, type Container, Texture, AnimatedSprite, LoaderResource, utils, Loader, Rectangle, BLEND_MODES} from 'pixi.js';\n\ntype IFncCompSpr = (sp: Sprite)=> void;\n\ntype Iface = {\n\tfn\t\t\t: string;\n\tdx\t\t\t: number;\n\tdy\t\t\t: number;\n\tblendmode\t: number;\n}\ntype Ihface = { [name: string]: Iface; }\n\ntype IResAniSpr = {\n\taTex\t: Texture[];\n\tmeta\t: {\n\t\tanimationSpeed? :number;\n\t};\n}\n\n\nexport class SpritesMng {\n\tstatic\t#cfg\t: Config;\n\tstatic\t#val\t: T_Variable;\n\tstatic\t#sys\t: SysBase;\n\tstatic\t#main\t: T_Main;\n\tstatic\tinit(cfg: Config, val: T_Variable, sys: SysBase, main: T_Main, sndMng: SoundMng) {\n\t\tSpritesMng.#cfg = cfg;\n\t\tSpritesMng.#val = val;\n\t\tSpritesMng.#sys = sys;\n\t\tSpritesMng.#main = main;\n\t\tif (sys.arg.crypto) {\n\t\t\tSpritesMng.#cachePicMov = (r, res, next)=> SpritesMng.#dec2cachePicMov(r, res, next);\n\t\t\tSpritesMng.#cacheAniSpr = (r, res, next)=> SpritesMng.#dec2cacheAniSpr(r, res, next);\n\t\t}\n\n\t\tconst fnc = ()=> {\n\t\t\tconst vol = SpritesMng.#glbVol * SpritesMng.#movVol;\n\t\t\tfor (const v of Object.values(SpritesMng.#hFn2hve)) v.volume = vol;\n\t\t};\n\t\tsndMng.setNoticeChgVolume(\n\t\t\tvol=> {SpritesMng.#glbVol = vol; fnc()},\n\t\t\tvol=> {SpritesMng.#movVol = vol; fnc()}\n\t\t);\n\t}\n\tstatic\t#movVol\t= 1;\n\tstatic\t#glbVol\t= 1;\n\n\tstatic\t#evtMng\t: IEvtMng;\n\tstatic\tsetEvtMng(evtMng: IEvtMng) {SpritesMng.#evtMng = evtMng}\n\n\n\tconstructor(readonly csvFn = '', readonly ctn?: Container, private fncFirstComp: IFncCompSpr = ()=> { /* empty */ }, private fncAllComp: (isStop: boolean)=> void = ()=> { /* empty */ }) {\n\t\tif (! csvFn) return;\n\n\t\tthis.#addChild = ctn ? sp=> {ctn.addChild(sp); this.#aSp.push(sp)} : ()=> { /* empty */ };\n\t\tthis.ret = SpritesMng.#csv2Sprites(\n\t\t\tcsvFn,\n\t\t\tsp=> this.fncFirstComp(sp),\t\t\t// 差し替え考慮\n\t\t\tisStop=> this.fncAllComp(isStop),\t// 差し替え考慮\n\t\t\tsp=> this.#addChild(sp)\t\t\t\t// 差し替え考慮\n\t\t);\n\t}\n\treadonly ret: boolean\t\t= false;\n\t#addChild\t: (sp: Sprite)=> void;\n\t#aSp\t\t: Container[]\t= [];\n\n\tdestroy() {\t\t// これをやるためのクラス、とすら云える\n\t\tthis.fncFirstComp\t= ()=> { /* empty */ };\n\t\tthis.fncAllComp\t\t= ()=> { /* empty */ };\n\t\tthis.#addChild\t\t= sp=> sp.destroy();\n\n\t\tfor (const sp of this.#aSp) {\n\t\t\tSpritesMng.stopVideo(sp.name);\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tsp.parent?.removeChild(sp);\n\t\t\tsp.destroy();\n\t\t}\n\t\tthis.#aSp = [];\n\t}\n\n\tstatic\tdestroy() {\n\t\tSpritesMng.#hFace\t= {};\n\t\tSpritesMng.#hFn2ResAniSpr\t= {};\n\t\t//SpritesMng.#ldrHFn\t= {};\n\t\tSpritesMng.#hFn2hve\t= {};\n\t}\n\n\n\t//static #ldrHFn: {[fn: string]: 1} = {};\n\tstatic\t#csv2Sprites(csv: string, fncFirstComp: IFncCompSpr, fncAllComp: (isStop: boolean)=> void, addChild: (sp: Sprite)=> void): boolean {\n\t\tif (! csv) return false;\n\n\t\tlet needLoad = false;\n\t\tif (csv.startsWith('data:')) {\t// Data URI\n\t\t\tconst fnc = ()=> {\n\t\t\t\tconst sp = Sprite.from(csv);\n\t\t\t\taddChild(sp);\n\t\t\t\tfncFirstComp(sp);\n\t\t\t\tfncAllComp(needLoad);\n\t\t\t};\n\t\t\tif (csv in utils.TextureCache) fnc();\n\t\t\telse {needLoad = true; (new Loader).add(csv, csv).load(fnc)}\n\n\t\t\treturn needLoad;\n\t\t}\n\n\t\tconst aComp: {fn: string, fnc: IFncCompSpr}[] = [];\n\t\tconst ldr = new Loader;\n\t\tfor (const fn0 of csv.split(',')) {\n\t\t\tif (! fn0) throw 'face属性に空要素が含まれます';\n\n\t\t\t// 差分絵を重ねる\n\t\t\tconst {dx, dy, blendmode, fn} = SpritesMng.#hFace[fn0] ?? {\n\t\t\t\tfn\t: fn0,\n\t\t\t\tdx\t: 0,\n\t\t\t\tdy\t: 0,\n\t\t\t\tblendmode\t: BLEND_MODES.NORMAL\n\t\t\t};\n\t\t\taComp.push({fn, fnc: sp=> {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tif (! sp.transform) return;\t// エラー予防\n\t\t\t\tsp.x = dx;\n\t\t\t\tsp.y = dy;\n\t\t\t\tsp.blendMode = blendmode;\n\t\t\t}});\n\n\t\t\tif (fn in SpritesMng.#hFn2ResAniSpr) continue;\n\t\t\tif (fn in utils.TextureCache) continue;\n\t\t\t//if (fn in utils.BaseTextureCache) continue;\t\t// 警告に変化なし\n\t\t\tif (fn in Loader.shared.resources) continue;\n\t\t\t//if (fn in SpritesMng.#ldrHFn) {\n\t\t\t\t// ここに来るという中途半端な状態がある。お陰で警告が出てしまう\n\t\t\t\t// (警告を消そうとする)以下の試みは効かない。直前の if でそもそもここに来ない\n\t\t\t\t//\tTexture.removeFromCache(fn);\n\t\t\t\t//\tdelete utils.TextureCache[fn];\n\t\t\t\t//\tdelete Loader.shared.resources[fn];\n\t\t\t\t// continue;\t// これは厳禁、御法度。\n\t\t\t\t\t// 画像ボタンや文字ボタン背景で同じ画像を、間を置かずロードした場合に最初一つしか表示されなくなる。以下は確認用ギャラリー\n\t\t\t\t\t// http://localhost:8082/index.html?cur=ch_button\n\t\t\t//}\n\t\t\t//SpritesMng.#ldrHFn[fn] = 1;\n\n\t\t\tneedLoad = true;\n\t\t\tconst url = SpritesMng.#cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SP_GSM);\n\t\t\tconst xt = this.#sys.arg.crypto\n\t\t\t? {xhrType: url.endsWith('.json')\n\t\t\t\t? LoaderResource.XHR_RESPONSE_TYPE.TEXT\n\t\t\t\t: LoaderResource.XHR_RESPONSE_TYPE.BUFFER}\n\t\t\t: {};\n\t\t\tldr.add({...xt, name: fn, url});\n\t\t}\n\t\tconst comp1 = aComp.at(0);\n\t\tif (comp1) comp1.fnc = fncFirstComp;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst fncLoaded = (_: any, hRes: {[fn: string]: LoaderResource})=> {\n\t\t\tfor (const {fn, fnc} of aComp) {\n\t\t\t\tconst sp = SpritesMng.#mkSprite(fn, hRes);\n\t\t\t\tsp.name = fn;\t// 4 Debug?\n\t\t\t\taddChild(sp);\n\t\t\t\tfnc(sp);\n\t\t\t}\n\t\t\tfncAllComp(needLoad);\n\t\t}\n\t\tif (needLoad) {\n\t\t\tldr.use((res, next)=> {\n\t\t\t\ttry {\n\t\t\t\t\tif (res.extension === 'json') {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\t\tvoid this.#sys.dec('json', res.data)\n\t\t\t\t\t\t.then(str=> SpritesMng.#cacheAniSpr(str, res, next));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\tvoid this.#sys.decAB(res.data).then(aiv=> SpritesMng.#cachePicMov(aiv, res, next));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst mes = `画像/動画ロード失敗です fn:${res.name} ${String(e)}`;\n\t\t\t\t\tif (SpritesMng.#evtMng.isSkipping) console.warn(mes); else console.error('%c'+ mes, 'color:#FF3300;');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.load(fncLoaded);\n\t\t}\n\t\telse queueMicrotask(()=> fncLoaded(0, {}));\n\n\t\treturn needLoad;\n\t}\n\tstatic\t#hFace\t\t\t: Ihface\t= {};\n\tstatic\t#hFn2ResAniSpr\t: {[fn: string]: IResAniSpr} = {};\n\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #cachePicMov = (_r: SYS_DEC_RET, {type, name, data}: any, next: ()=> void)=> {\n\t\tswitch (type) {\n\t\t\tcase LoaderResource.TYPE.VIDEO:{\n\t\t\t\tconst hve = <HTMLVideoElement>data;\n\t\t\t\thve.volume = SpritesMng.#glbVol;\n\t\t\t\tSpritesMng.#hFn2hve[name] = SpritesMng.#charmVideoElm(hve);\n\t\t\t}\n\t\t}\n\t\tnext();\n\t}\n\tstatic #sortAFrameName(aFn: string[]): string[] {\n\t\tconst a_base_name = /([^\\d]+)\\d+\\.(\\w+)/.exec(aFn[0] ?? '');\n\t\tif (! a_base_name) return [];\n\n\t\tconst [, d1='', d2=''] = a_base_name;\n\t\tconst is = d1.length;\n\t\tconst ie = -d2.length -1;\n\t\treturn aFn.sort((a, b)=> int(a.slice(is, ie)) > int(b.slice(is, ie)) ?1 :-1);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #dec2cachePicMov(r: SYS_DEC_RET, res: any, next: ()=> void) {\n\t\tres.data = r;\n\t\tif (res.extension !== 'bin') next();\n\n\t\tif (r instanceof HTMLImageElement) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tvoid Texture.fromLoader(r, res.url, res.name).then(r2=> {\n\t\t\t\tres.texture = r2;\n\t\t\t\t//Texture.addToCache(Texture.from(r), res.name);\n\t\t\t\t// res.texture = Texture.from(r);\n\t\t\t\t\t// でも良いが、キャッシュ追加と、それでcsv2Sprites()内で使用するので\n\t\t\t\tres.type = LoaderResource.TYPE.IMAGE;\n\t\t\t\tnext();\n// console.log(`fn:SpritesMng.ts line:253 res.url:${String(res.url)} res.name:${String(res.name)} src2:${r.src}`);\n\t\t\t\t// res.url:prj/bg/153385d5-24e0-5483-b779-b04f3ea4c901.bin res.name:市場_品物置き場2\n\t\t\t\tURL.revokeObjectURL(r.src);\n\n\t\t\t\t// これをするとタイトル画面から画面遷移でチラチラする\n\t\t\t\t// const fn = String(res.name);\n\t\t\t\t// Texture.removeFromCache(fn);\n\t\t\t\t// // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\t// delete utils.TextureCache[fn];\n\t\t\t\t// // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\t// delete Loader.shared.resources[fn];\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (r instanceof HTMLVideoElement) {\n\t\t\tr.volume = SpritesMng.#glbVol;\n\t\t\tSpritesMng.#hFn2hve[res.name] = SpritesMng.#charmVideoElm(r);\n\n\t\t\tres.type = LoaderResource.TYPE.VIDEO;\n\t\t\t// URL.revokeObjectURL(r.src);\t// 動作確認したい\n\t\t}\n\t\tnext();\n\t}\n\tstatic #charmVideoElm(hve: HTMLVideoElement): HTMLVideoElement {\n\t\t// 【PixiJS】iOSとChromeでAutoPlay可能なビデオSpriteの設定 - Qiita https://qiita.com/masato_makino/items/8316e7743acac514e361\n\t\tif (SpritesMng.#val.getVal('const.sn.needClick2Play')) {\n\t\t\t// ブラウザ実行で、クリックされるまで音声再生が差し止められている状態か。なにかクリックされれば falseになる\n\t\t\tDebugMng.trace_beforeNew(`[lay系] ${DebugMng.strPos()}未クリック状態で動画を自動再生します。音声はミュートされます`, 'W');\n\t\t\thve.muted = true;\t// Chrome対応:自動再生を許可させるため。ないと再開時に DOMException\n\t\t}\n\t\thve.setAttribute('playsinline', '');\t// iOS対応\n\t\treturn hve;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #cacheAniSpr = (_r: string, {type, spritesheet, name, data}: any, next: ()=> void)=> {\n\t\tswitch (type) {\n\t\t\tcase LoaderResource.TYPE.JSON:{\t// switchは必須\n\t\t\t\tconst aFn = <string[]>spritesheet._frameKeys;\n\t\t\t\tSpritesMng.#sortAFrameName(aFn);\n\t\t\t\tSpritesMng.#hFn2ResAniSpr[name] = {\n\t\t\t\t\taTex: aFn.map(fn=> Texture.from(fn)),\n\t\t\t\t\tmeta: <IResAniSpr['meta']>data.meta,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tnext();\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #dec2cacheAniSpr(r: string, res: any, next: ()=> void) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tconst {meta, frames} = res.data = JSON.parse(r);\n\t\tres.type = LoaderResource.TYPE.JSON;\n\t\tif (! meta?.image) {next(); return}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\tconst fn = getFn(meta.image);\n\t\tconst url = SpritesMng.#cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SP_GSM);\n\t\t(new Loader)\n\t\t.use((res2, next2)=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tvoid this.#sys.decAB(res2.data)\n\t\t\t.then(r2=> {\n\t\t\t\tres2.data = r2;\n\t\t\t\tif (r2 instanceof HTMLImageElement) {\n\t\t\t\t\tres2.type = LoaderResource.TYPE.IMAGE;\n\t\t\t\t\tnext2();\n\t\t\t\t\tURL.revokeObjectURL(r2.src);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tnext2();\n\t\t\t})\n\t\t\t.catch((e: unknown)=> this.#main.errScript(`画像/動画ロード失敗です dec2res4Cripto fn:${res2.name} ${String(e)}`, false));\n\t\t})\n\t\t.add({name: fn, url, xhrType: LoaderResource.XHR_RESPONSE_TYPE.BUFFER})\n\t\t.load((ldr, _hRes)=> {\n\t\t\tfor (const {data} of Object.values(ldr.resources)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tconst {baseTexture} = Texture.from(data);\n\t\t\t\tconst aFr = Object.values(<{[nm: string]: {\n\t\t\t\t\tframe: {x: number; y: number; w: number; h: number;}\n\t\t\t\t}}>frames);\n\t\t\t\tSpritesMng.#hFn2ResAniSpr[res.name] = {\n\t\t\t\t\taTex: aFr.map(({frame: {x, y, w, h}})=> new Texture(\n\t\t\t\t\t\tbaseTexture,\n\t\t\t\t\t\tnew Rectangle(x, y, w, h),\n\t\t\t\t\t)),\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\tmeta,\n\t\t\t\t};\n\t\t\t}\n\t\t\tnext();\n\t\t});\n\t}\n\n\t\tstatic\t#mkSprite(fn: string, hRes: {[fn: string]: LoaderResource}): Sprite {\n\t\t\tconst ras = SpritesMng.#hFn2ResAniSpr[fn];\n\t\t\tif (ras) {\n\t\t\t\tconst asp = new AnimatedSprite(ras.aTex);\n\t\t\t\tasp.animationSpeed = ras.meta.animationSpeed ?? 1.0;\n\t\t\t\tasp.play();\n\t\t\t\treturn asp;\n\t\t\t}\n\t\t\tif (fn in utils.TextureCache) return Sprite.from(fn);\n\t\t\tconst hve = SpritesMng.#hFn2hve[fn];\n\t\t\tif (hve) return Sprite.from(hve);\n\n\t\t\tconst r = hRes[fn];\n\t\t\treturn r ?new Sprite(r.texture) :new Sprite;\n\t\t}\n\tstatic\t#hFn2hve\t: {[fn: string]: HTMLVideoElement} = {};\n\tstatic\tgetHFn2VElm(fn: string) {return SpritesMng.#hFn2hve[fn]}\n\n\tstatic\twv(hArg: TArg): boolean {\n\t\t// 動画ファイル名指定でいいかなと。なぜなら「ループで再生しつつ」\n\t\t// 同ファイル名の別の動画の再生は待ちたい、なんて状況は普通は無いだろうと\n\t\tconst {fn} = hArg;\n\t\tif (! fn) throw 'fnは必須です';\n\t\tconst hve = SpritesMng.#hFn2hve[fn];\n\t\tif (! hve || hve.loop) return false;\n\n\t\tif (SpritesMng.#evtMng.isSkipping || hve.ended) {SpritesMng.stopVideo(fn); return false}\n\n\t\tconst RPN_WV = 'wv fn:'+ fn;\n\t\tconst stop = argChk_Boolean(hArg, 'stop', true);\n\t\tconst fnc = ()=> {if (stop) SpritesMng.stopVideo(fn)};\n\t\tReading.beginProc(RPN_WV, fnc, true, argChk_Boolean(hArg, 'canskip', true) ?fnc: undefined);\n\t\thve.addEventListener('ended', ()=> Reading.notifyEndProc(RPN_WV), {once: true, passive: true});\n\n\t\treturn true;\n\t}\n\n\tstatic\tstopVideo(fn: string) {\n\t\tconst hve = SpritesMng.#hFn2hve[fn];\n\t\tif (! hve) return;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete SpritesMng.#hFn2hve[fn];\n\t\thve.pause();\n\t\thve.currentTime = hve.duration;\n\t}\n\n\n\tstatic\tadd_face(hArg: TArg): boolean {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (name in SpritesMng.#hFace) throw '一つのname('+ name +')に対して同じ画像を複数割り当てられません';\n\n\t\tconst {fn = name} = hArg;\n\t\tSpritesMng.#hFace[name] = {\n\t\t\tfn,\n\t\t\tdx: argChk_Num(hArg, 'dx', 0),\n\t\t\tdy: argChk_Num(hArg, 'dy', 0),\n\t\t\tblendmode: Layer.getBlendmodeNum(hArg.blendmode ?? '')\n\t\t};\n\n\t\treturn false;\n\t}\n//\tstatic\tclearFace2Name(): void {SpritesMng.hFace = {}}\n\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"SpritesMng.js","names":["#cfg","#val","#sys","#main","#cachePicMov","#dec2cachePicMov","#cacheAniSpr","#dec2cacheAniSpr","#glbVol","#movVol","#hFn2hve","#evtMng","#addChild","#aSp","#csv2Sprites","#hFace","#hFn2ResAniSpr","#mkSprite","#charmVideoElm","#sortAFrameName"],"sources":["../src/sn/SpritesMng.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2023-2025 Famibee (famibee.blog38.fc2.com)\n\n\tThis software is released under the MIT License.\n\thttp://opensource.org/licenses/mit-license.php\n** ***** END LICENSE BLOCK ***** */\n\nimport {Config} from './Config';\nimport {type IEvtMng, argChk_Boolean, argChk_Num, getFn, int} from './CmnLib';\nimport type {T_Main, T_Variable, SYS_DEC_RET} from './CmnInterface';\nimport {DebugMng} from './DebugMng';\nimport {SEARCH_PATH_ARG_EXT} from './ConfigBase';\nimport type {SysBase} from './SysBase';\nimport type {SoundMng} from './SoundMng';\nimport type {TArg} from './Grammar';\nimport {Layer} from './Layer';\nimport {Reading} from './Reading';\n\nimport {Sprite, type Container, Texture, AnimatedSprite, LoaderResource, utils, Loader, Rectangle, BLEND_MODES} from 'pixi.js';\n\ntype IFncCompSpr = (sp: Sprite)=> void;\n\ntype Iface = {\n\tfn\t\t\t: string;\n\tdx\t\t\t: number;\n\tdy\t\t\t: number;\n\tblendmode\t: number;\n}\ntype Ihface = { [name: string]: Iface; }\n\ntype IResAniSpr = {\n\taTex\t: Texture[];\n\tmeta\t: {\n\t\tanimationSpeed? :number;\n\t};\n}\n\n\nexport class SpritesMng {\n\tstatic\t#cfg\t: Config;\n\tstatic\t#val\t: T_Variable;\n\tstatic\t#sys\t: SysBase;\n\tstatic\t#main\t: T_Main;\n\tstatic\tinit(cfg: Config, val: T_Variable, sys: SysBase, main: T_Main, sndMng: SoundMng) {\n\t\tSpritesMng.#cfg = cfg;\n\t\tSpritesMng.#val = val;\n\t\tSpritesMng.#sys = sys;\n\t\tSpritesMng.#main = main;\n\t\tif (sys.arg.crypto) {\n\t\t\tSpritesMng.#cachePicMov = (r, res, next)=> SpritesMng.#dec2cachePicMov(r, res, next);\n\t\t\tSpritesMng.#cacheAniSpr = (r, res, next)=> SpritesMng.#dec2cacheAniSpr(r, res, next);\n\t\t}\n\n\t\tconst fnc = ()=> {\n\t\t\tconst vol = SpritesMng.#glbVol * SpritesMng.#movVol;\n\t\t\tfor (const v of Object.values(SpritesMng.#hFn2hve)) v.volume = vol;\n\t\t};\n\t\tsndMng.setNoticeChgVolume(\n\t\t\tvol=> {SpritesMng.#glbVol = vol; fnc()},\n\t\t\tvol=> {SpritesMng.#movVol = vol; fnc()}\n\t\t);\n\t}\n\tstatic\t#movVol\t= 1;\n\tstatic\t#glbVol\t= 1;\n\n\tstatic\t#evtMng\t: IEvtMng;\n\tstatic\tsetEvtMng(evtMng: IEvtMng) {SpritesMng.#evtMng = evtMng}\n\n\n\tconstructor(readonly csvFn = '', readonly ctn?: Container, private fncFirstComp: IFncCompSpr = ()=> { /* empty */ }, private fncAllComp: (isStop: boolean)=> void = ()=> { /* empty */ }) {\n\t\tif (! csvFn) return;\n\n\t\tthis.#addChild = ctn ? sp=> {ctn.addChild(sp); this.#aSp.push(sp)} : ()=> { /* empty */ };\n\t\tthis.ret = SpritesMng.#csv2Sprites(\n\t\t\tcsvFn,\n\t\t\tsp=> this.fncFirstComp(sp),\t\t\t// 差し替え考慮\n\t\t\tisStop=> this.fncAllComp(isStop),\t// 差し替え考慮\n\t\t\tsp=> this.#addChild(sp)\t\t\t\t// 差し替え考慮\n\t\t);\n\t}\n\treadonly ret: boolean\t\t= false;\n\t#addChild\t: (sp: Sprite)=> void;\n\t#aSp\t\t: Container[]\t= [];\n\n\tdestroy() {\t\t// これをやるためのクラス、とすら云える\n\t\tthis.fncFirstComp\t= ()=> { /* empty */ };\n\t\tthis.fncAllComp\t\t= ()=> { /* empty */ };\n\t\tthis.#addChild\t\t= sp=> sp.destroy();\n\n\t\tfor (const sp of this.#aSp) {\n\t\t\tSpritesMng.stopVideo(sp.name);\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\tsp.parent?.removeChild(sp);\n\t\t\tsp.destroy();\n\t\t}\n\t\tthis.#aSp = [];\n\t}\n\n\tstatic\tdestroy() {\n\t\tSpritesMng.#hFace\t= {};\n\t\tSpritesMng.#hFn2ResAniSpr\t= {};\n\t\t//SpritesMng.#ldrHFn\t= {};\n\t\tSpritesMng.#hFn2hve\t= {};\n\t}\n\n\n\t//static #ldrHFn: {[fn: string]: 1} = {};\n\tstatic\t#csv2Sprites(csv: string, fncFirstComp: IFncCompSpr, fncAllComp: (isStop: boolean)=> void, addChild: (sp: Sprite)=> void): boolean {\n\t\tif (! csv) return false;\n\n\t\tlet needLoad = false;\n\t\tif (csv.startsWith('data:')) {\t// Data URI\n\t\t\tconst fnc = ()=> {\n\t\t\t\tconst sp = Sprite.from(csv);\n\t\t\t\taddChild(sp);\n\t\t\t\tfncFirstComp(sp);\n\t\t\t\tfncAllComp(needLoad);\n\t\t\t};\n\t\t\tif (csv in utils.TextureCache) fnc();\n\t\t\telse {needLoad = true; (new Loader).add(csv, csv).load(fnc)}\n\n\t\t\treturn needLoad;\n\t\t}\n\n\t\tconst aComp: {fn: string, fnc: IFncCompSpr}[] = [];\n\t\tconst ldr = new Loader;\n\t\tfor (const fn0 of csv.split(',')) {\n\t\t\tif (! fn0) throw 'face属性に空要素が含まれます';\n\n\t\t\t// 差分絵を重ねる\n\t\t\tconst {dx, dy, blendmode, fn} = SpritesMng.#hFace[fn0] ?? {\n\t\t\t\tfn\t: fn0,\n\t\t\t\tdx\t: 0,\n\t\t\t\tdy\t: 0,\n\t\t\t\tblendmode\t: BLEND_MODES.NORMAL\n\t\t\t};\n\t\t\taComp.push({fn, fnc: sp=> {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n\t\t\t\tif (! sp.transform) return;\t// エラー予防\n\t\t\t\tsp.x = dx;\n\t\t\t\tsp.y = dy;\n\t\t\t\tsp.blendMode = blendmode;\n\t\t\t}});\n\n\t\t\tif (fn in SpritesMng.#hFn2ResAniSpr) continue;\n\t\t\tif (fn in utils.TextureCache) continue;\n\t\t\t//if (fn in utils.BaseTextureCache) continue;\t\t// 警告に変化なし\n\t\t\tif (fn in Loader.shared.resources) continue;\n\t\t\t//if (fn in SpritesMng.#ldrHFn) {\n\t\t\t\t// ここに来るという中途半端な状態がある。お陰で警告が出てしまう\n\t\t\t\t// (警告を消そうとする)以下の試みは効かない。直前の if でそもそもここに来ない\n\t\t\t\t//\tTexture.removeFromCache(fn);\n\t\t\t\t//\tdelete utils.TextureCache[fn];\n\t\t\t\t//\tdelete Loader.shared.resources[fn];\n\t\t\t\t// continue;\t// これは厳禁、御法度。\n\t\t\t\t\t// 画像ボタンや文字ボタン背景で同じ画像を、間を置かずロードした場合に最初一つしか表示されなくなる。以下は確認用ギャラリー\n\t\t\t\t\t// http://localhost:8082/index.html?cur=ch_button\n\t\t\t//}\n\t\t\t//SpritesMng.#ldrHFn[fn] = 1;\n\n\t\t\tneedLoad = true;\n\t\t\tconst url = SpritesMng.#cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SP_GSM);\n\t\t\tconst xt = this.#sys.arg.crypto\n\t\t\t? {xhrType: url.endsWith('.json')\n\t\t\t\t? LoaderResource.XHR_RESPONSE_TYPE.TEXT\n\t\t\t\t: LoaderResource.XHR_RESPONSE_TYPE.BUFFER}\n\t\t\t: {};\n\t\t\tldr.add({...xt, name: fn, url});\n\t\t}\n\t\tconst comp1 = aComp.at(0);\n\t\tif (comp1) comp1.fnc = fncFirstComp;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\tconst fncLoaded = (_: any, hRes: {[fn: string]: LoaderResource})=> {\n\t\t\tfor (const {fn, fnc} of aComp) {\n\t\t\t\tconst sp = SpritesMng.#mkSprite(fn, hRes);\n\t\t\t\tsp.name = fn;\t// 4 Debug?\n\t\t\t\taddChild(sp);\n\t\t\t\tfnc(sp);\n\t\t\t}\n\t\t\tfncAllComp(needLoad);\n\t\t}\n\t\tif (needLoad) {\n\t\t\tldr.use((res, next)=> {\n\t\t\t\ttry {\n\t\t\t\t\tif (res.extension === 'json') {\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\t\tvoid this.#sys.dec('json', res.data)\n\t\t\t\t\t\t.then(str=> SpritesMng.#cacheAniSpr(str, res, next));\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\t\tvoid this.#sys.decAB(res.data).then(aiv=> SpritesMng.#cachePicMov(aiv, res, next));\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconst mes = `画像/動画ロード失敗です fn:${res.name} ${String(e)}`;\n\t\t\t\t\tif (SpritesMng.#evtMng.isSkipping) console.warn(mes); else console.error('%c'+ mes, 'color:#FF3300;');\n\t\t\t\t}\n\t\t\t})\n\t\t\t.load(fncLoaded);\n\t\t}\n\t\telse queueMicrotask(()=> fncLoaded(0, {}));\n\n\t\treturn needLoad;\n\t}\n\tstatic\t#hFace\t\t\t: Ihface\t= {};\n\tstatic\t#hFn2ResAniSpr\t: {[fn: string]: IResAniSpr} = {};\n\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #cachePicMov = (_r: SYS_DEC_RET, {type, name, data}: any, next: ()=> void)=> {\n\t\tswitch (type) {\n\t\t\tcase LoaderResource.TYPE.VIDEO:{\n\t\t\t\tconst hve = <HTMLVideoElement>data;\n\t\t\t\thve.volume = SpritesMng.#glbVol;\n\t\t\t\tSpritesMng.#hFn2hve[name] = SpritesMng.#charmVideoElm(hve);\n\t\t\t}\n\t\t}\n\t\tnext();\n\t}\n\tstatic #sortAFrameName(aFn: string[]): string[] {\n\t\tconst a_base_name = /([^\\d]+)\\d+\\.(\\w+)/.exec(aFn[0] ?? '');\n\t\tif (! a_base_name) return [];\n\n\t\tconst [, d1='', d2=''] = a_base_name;\n\t\tconst is = d1.length;\n\t\tconst ie = -d2.length -1;\n\t\treturn aFn.sort((a, b)=> int(a.slice(is, ie)) > int(b.slice(is, ie)) ?1 :-1);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #dec2cachePicMov(r: SYS_DEC_RET, res: any, next: ()=> void) {\n\t\tres.data = r;\n\t\tif (res.extension !== 'bin') next();\n\n\t\tif (r instanceof HTMLImageElement) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tvoid Texture.fromLoader(r, res.url, res.name).then(r2=> {\n\t\t\t\tres.texture = r2;\n\t\t\t\t//Texture.addToCache(Texture.from(r), res.name);\n\t\t\t\t// res.texture = Texture.from(r);\n\t\t\t\t\t// でも良いが、キャッシュ追加と、それでcsv2Sprites()内で使用するので\n\t\t\t\tres.type = LoaderResource.TYPE.IMAGE;\n\t\t\t\tnext();\n// console.log(`fn:SpritesMng.ts line:253 res.url:${String(res.url)} res.name:${String(res.name)} src2:${r.src}`);\n\t\t\t\t// res.url:prj/bg/153385d5-24e0-5483-b779-b04f3ea4c901.bin res.name:市場_品物置き場2\n\t\t\t\tURL.revokeObjectURL(r.src);\n\n\t\t\t\t// これをするとタイトル画面から画面遷移でチラチラする\n\t\t\t\t// const fn = String(res.name);\n\t\t\t\t// Texture.removeFromCache(fn);\n\t\t\t\t// // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\t// delete utils.TextureCache[fn];\n\t\t\t\t// // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\t\t\t// delete Loader.shared.resources[fn];\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tif (r instanceof HTMLVideoElement) {\n\t\t\tr.volume = SpritesMng.#glbVol;\n\t\t\tSpritesMng.#hFn2hve[res.name] = SpritesMng.#charmVideoElm(r);\n\n\t\t\tres.type = LoaderResource.TYPE.VIDEO;\n\t\t\t// URL.revokeObjectURL(r.src);\t// 動作確認したい\n\t\t}\n\t\tnext();\n\t}\n\tstatic #charmVideoElm(hve: HTMLVideoElement): HTMLVideoElement {\n\t\t// 【PixiJS】iOSとChromeでAutoPlay可能なビデオSpriteの設定 - Qiita https://qiita.com/masato_makino/items/8316e7743acac514e361\n\t\tif (SpritesMng.#val.getVal('const.sn.needClick2Play')) {\n\t\t\t// ブラウザ実行で、クリックされるまで音声再生が差し止められている状態か。なにかクリックされれば falseになる\n\t\t\tDebugMng.trace_beforeNew(`[lay系] ${DebugMng.strPos()}未クリック状態で動画を自動再生します。音声はミュートされます`, 'W');\n\t\t\thve.muted = true;\t// Chrome対応:自動再生を許可させるため。ないと再開時に DOMException\n\t\t}\n\t\thve.setAttribute('playsinline', '');\t// iOS対応\n\t\treturn hve;\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #cacheAniSpr = (_r: string, {type, spritesheet, name, data}: any, next: ()=> void)=> {\n\t\tswitch (type) {\n\t\t\tcase LoaderResource.TYPE.JSON:{\t// switchは必須\n\t\t\t\tconst aFn = <string[]>spritesheet._frameKeys;\n\t\t\t\tSpritesMng.#sortAFrameName(aFn);\n\t\t\t\tSpritesMng.#hFn2ResAniSpr[name] = {\n\t\t\t\t\taTex: aFn.map(fn=> Texture.from(fn)),\n\t\t\t\t\tmeta: <IResAniSpr['meta']>data.meta,\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\tnext();\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tstatic #dec2cacheAniSpr(r: string, res: any, next: ()=> void) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\tconst {meta, frames} = res.data = JSON.parse(r);\n\t\tres.type = LoaderResource.TYPE.JSON;\n\t\tif (! meta?.image) {next(); return}\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\tconst fn = getFn(meta.image);\n\t\tconst url = SpritesMng.#cfg.searchPath(fn, SEARCH_PATH_ARG_EXT.SP_GSM);\n\t\t(new Loader)\n\t\t.use((res2, next2)=> {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\tvoid this.#sys.decAB(res2.data)\n\t\t\t.then(r2=> {\n\t\t\t\tres2.data = r2;\n\t\t\t\tif (r2 instanceof HTMLImageElement) {\n\t\t\t\t\tres2.type = LoaderResource.TYPE.IMAGE;\n\t\t\t\t\tnext2();\n\t\t\t\t\tURL.revokeObjectURL(r2.src);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tnext2();\n\t\t\t})\n\t\t\t.catch((e: unknown)=> this.#main.errScript(`画像/動画ロード失敗です dec2res4Cripto fn:${res2.name} ${String(e)}`, false));\n\t\t})\n\t\t.add({name: fn, url, xhrType: LoaderResource.XHR_RESPONSE_TYPE.BUFFER})\n\t\t.load((ldr, _hRes)=> {\n\t\t\tfor (const {data} of Object.values(ldr.resources)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n\t\t\t\tconst {baseTexture} = Texture.from(data);\n\t\t\t\tconst aFr = Object.values(<{[nm: string]: {\n\t\t\t\t\tframe: {x: number; y: number; w: number; h: number;}\n\t\t\t\t}}>frames);\n\t\t\t\tSpritesMng.#hFn2ResAniSpr[res.name] = {\n\t\t\t\t\taTex: aFr.map(({frame: {x, y, w, h}})=> new Texture(\n\t\t\t\t\t\tbaseTexture,\n\t\t\t\t\t\tnew Rectangle(x, y, w, h),\n\t\t\t\t\t)),\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n\t\t\t\t\tmeta,\n\t\t\t\t};\n\t\t\t}\n\t\t\tnext();\n\t\t});\n\t}\n\n\t\tstatic\t#mkSprite(fn: string, hRes: {[fn: string]: LoaderResource}): Sprite {\n\t\t\tconst ras = SpritesMng.#hFn2ResAniSpr[fn];\n\t\t\tif (ras) {\n\t\t\t\tconst asp = new AnimatedSprite(ras.aTex);\n\t\t\t\tasp.animationSpeed = ras.meta.animationSpeed ?? 1.0;\n\t\t\t\tasp.play();\n\t\t\t\treturn asp;\n\t\t\t}\n\t\t\tif (fn in utils.TextureCache) return Sprite.from(fn);\n\t\t\tconst hve = SpritesMng.#hFn2hve[fn];\n\t\t\tif (hve) return Sprite.from(hve);\n\n\t\t\tconst r = hRes[fn];\n\t\t\treturn r ?new Sprite(r.texture) :new Sprite;\n\t\t}\n\tstatic\t#hFn2hve\t: {[fn: string]: HTMLVideoElement} = {};\n\tstatic\tgetHFn2VElm(fn: string) {return SpritesMng.#hFn2hve[fn]}\n\n\tstatic\twv(hArg: TArg): boolean {\n\t\t// 動画ファイル名指定でいいかなと。なぜなら「ループで再生しつつ」\n\t\t// 同ファイル名の別の動画の再生は待ちたい、なんて状況は普通は無いだろうと\n\t\tconst {fn} = hArg;\n\t\tif (! fn) throw 'fnは必須です';\n\t\tconst hve = SpritesMng.#hFn2hve[fn];\n\t\tif (! hve || hve.loop) return false;\n\n\t\tif (SpritesMng.#evtMng.isSkipping || hve.ended) {SpritesMng.stopVideo(fn); return false}\n\n\t\tconst RPN_WV = 'wv fn:'+ fn;\n\t\tconst stop = argChk_Boolean(hArg, 'stop', true);\n\t\tconst fnc = ()=> {if (stop) SpritesMng.stopVideo(fn)};\n\t\tReading.beginProc(RPN_WV, fnc, true, argChk_Boolean(hArg, 'canskip', true) ?fnc: undefined);\n\t\thve.addEventListener('ended', ()=> Reading.notifyEndProc(RPN_WV), {once: true, passive: true});\n\n\t\treturn true;\n\t}\n\n\tstatic\tstopVideo(fn: string) {\n\t\tconst hve = SpritesMng.#hFn2hve[fn];\n\t\tif (! hve) return;\n\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tdelete SpritesMng.#hFn2hve[fn];\n\t\thve.pause();\n\t\thve.currentTime = hve.duration;\n\t}\n\n\n\tstatic\tadd_face(hArg: TArg): boolean {\n\t\tconst {name} = hArg;\n\t\tif (! name) throw 'nameは必須です';\n\t\tif (name in SpritesMng.#hFace) throw '一つのname('+ name +')に対して同じ画像を複数割り当てられません';\n\n\t\tconst {fn = name} = hArg;\n\t\tSpritesMng.#hFace[name] = {\n\t\t\tfn,\n\t\t\tdx: argChk_Num(hArg, 'dx', 0),\n\t\t\tdy: argChk_Num(hArg, 'dy', 0),\n\t\t\tblendmode: Layer.getBlendmodeNum(hArg.blendmode ?? '')\n\t\t};\n\n\t\treturn false;\n\t}\n//\tstatic\tclearFace2Name(): void {SpritesMng.hFace = {}}\n\n}\n"],"mappings":"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"}