@famibee/skynovel 1.64.8 → 1.64.10

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 (219) hide show
  1. package/README.md +1 -1
  2. package/dist/Button.js +162 -0
  3. package/dist/Button.js.map +1 -0
  4. package/dist/CallStack.js.map +1 -1
  5. package/dist/CmnTween.js +201 -0
  6. package/dist/CmnTween.js.map +1 -0
  7. package/dist/DebugMng.js +105 -0
  8. package/dist/DebugMng.js.map +1 -0
  9. package/dist/EventMng.js +40 -39
  10. package/dist/EventMng.js.map +1 -1
  11. package/dist/GrpLayer.js +192 -0
  12. package/dist/GrpLayer.js.map +1 -0
  13. package/dist/LayerMng.js +483 -2422
  14. package/dist/LayerMng.js.map +1 -1
  15. package/dist/Main.js +394 -0
  16. package/dist/Main.js.map +1 -0
  17. package/dist/PropParser.js +1 -1
  18. package/dist/PropParser.js.map +1 -1
  19. package/dist/Reading.js +11 -11
  20. package/dist/Reading.js.map +1 -1
  21. package/dist/RubySpliter.js +90 -0
  22. package/dist/RubySpliter.js.map +1 -0
  23. package/dist/ScriptIterator.js +263 -353
  24. package/dist/ScriptIterator.js.map +1 -1
  25. package/dist/SndBuf.js +746 -949
  26. package/dist/SndBuf.js.map +1 -1
  27. package/dist/SoundMng.js +1 -1
  28. package/dist/SoundMng.js.map +1 -1
  29. package/dist/SpritesMng.js +229 -0
  30. package/dist/SpritesMng.js.map +1 -0
  31. package/dist/TxtLayer.js +1402 -0
  32. package/dist/TxtLayer.js.map +1 -0
  33. package/dist/Variable.js +157 -164
  34. package/dist/Variable.js.map +1 -1
  35. package/dist/app.d.ts +4 -4
  36. package/dist/app.d.ts.map +1 -1
  37. package/dist/appMain.d.ts.map +1 -1
  38. package/dist/appMain_cmn.d.ts.map +1 -1
  39. package/dist/index.d.ts +0 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/platform.js +369 -0
  42. package/dist/platform.js.map +1 -0
  43. package/dist/sn/Button.d.ts +2 -2
  44. package/dist/sn/CallStack.d.ts +2 -2
  45. package/dist/sn/CmnInterface.d.ts +39 -41
  46. package/dist/sn/CmnInterface.d.ts.map +1 -1
  47. package/dist/sn/CmnLib.d.ts +11 -7
  48. package/dist/sn/CmnLib.d.ts.map +1 -1
  49. package/dist/sn/CmnTween.d.ts +9 -9
  50. package/dist/sn/Config.d.ts.map +1 -1
  51. package/dist/sn/ConfigBase.d.ts +16 -17
  52. package/dist/sn/ConfigBase.d.ts.map +1 -1
  53. package/dist/sn/DebugMng.d.ts +2 -2
  54. package/dist/sn/DebugMng.d.ts.map +1 -1
  55. package/dist/sn/DesignCast.d.ts +9 -9
  56. package/dist/sn/DesignCast.d.ts.map +1 -1
  57. package/dist/sn/EventMng.d.ts +4 -4
  58. package/dist/sn/EventMng.d.ts.map +1 -1
  59. package/dist/sn/FrameMng.d.ts +5 -5
  60. package/dist/sn/FrameMng.d.ts.map +1 -1
  61. package/dist/sn/Grammar.d.ts +124 -124
  62. package/dist/sn/Grammar.d.ts.map +1 -1
  63. package/dist/sn/GrpLayer.d.ts +7 -7
  64. package/dist/sn/GrpLayer.d.ts.map +1 -1
  65. package/dist/sn/Hyphenation.d.ts +2 -2
  66. package/dist/sn/Layer.d.ts +10 -10
  67. package/dist/sn/LayerMng.d.ts +7 -8
  68. package/dist/sn/LayerMng.d.ts.map +1 -1
  69. package/dist/sn/Log.d.ts +3 -3
  70. package/dist/sn/Log.d.ts.map +1 -1
  71. package/dist/sn/Main.d.ts +6 -5
  72. package/dist/sn/Main.d.ts.map +1 -1
  73. package/dist/sn/Pages.d.ts +8 -8
  74. package/dist/sn/Pages.d.ts.map +1 -1
  75. package/dist/sn/PropParser.d.ts +3 -3
  76. package/dist/sn/PropParser.d.ts.map +1 -1
  77. package/dist/sn/Reading.d.ts +12 -12
  78. package/dist/sn/Reading.d.ts.map +1 -1
  79. package/dist/sn/RubySpliter.d.ts +4 -4
  80. package/dist/sn/RubySpliter.d.ts.map +1 -1
  81. package/dist/sn/ScriptIterator.d.ts +5 -6
  82. package/dist/sn/ScriptIterator.d.ts.map +1 -1
  83. package/dist/sn/SndBuf.d.ts +12 -12
  84. package/dist/sn/SndBuf.d.ts.map +1 -1
  85. package/dist/sn/SoundMng.d.ts +4 -4
  86. package/dist/sn/SoundMng.d.ts.map +1 -1
  87. package/dist/sn/SpritesMng.d.ts +5 -5
  88. package/dist/sn/SpritesMng.d.ts.map +1 -1
  89. package/dist/sn/SysApp.d.ts +13 -10
  90. package/dist/sn/SysApp.d.ts.map +1 -1
  91. package/dist/sn/SysBase.d.ts +33 -32
  92. package/dist/sn/SysBase.d.ts.map +1 -1
  93. package/dist/sn/SysWeb.d.ts +7 -11
  94. package/dist/sn/SysWeb.d.ts.map +1 -1
  95. package/dist/sn/TxtLayer.d.ts +10 -8
  96. package/dist/sn/TxtLayer.d.ts.map +1 -1
  97. package/dist/sn/TxtStage.d.ts +5 -5
  98. package/dist/sn/TxtStage.d.ts.map +1 -1
  99. package/dist/sn/Variable.d.ts +9 -8
  100. package/dist/sn/Variable.d.ts.map +1 -1
  101. package/dist/test/SysTest.d.ts +2 -2
  102. package/dist/test/ValTest.d.ts +4 -4
  103. package/dist/test/ValTest.d.ts.map +1 -1
  104. package/dist/web.d.ts +4 -4
  105. package/dist/web.d.ts.map +1 -1
  106. package/dist/web.js +3 -3
  107. package/dist/web2.js +6959 -8339
  108. package/dist/web2.js.map +1 -1
  109. package/dist_app/Button.js +162 -0
  110. package/dist_app/Button.js.map +1 -0
  111. package/dist_app/CallStack.js.map +1 -1
  112. package/dist_app/CmnTween.js +201 -0
  113. package/dist_app/CmnTween.js.map +1 -0
  114. package/dist_app/EventMng.js +40 -39
  115. package/dist_app/EventMng.js.map +1 -1
  116. package/dist_app/GrpLayer.js +192 -0
  117. package/dist_app/GrpLayer.js.map +1 -0
  118. package/dist_app/LayerMng.js +483 -2422
  119. package/dist_app/LayerMng.js.map +1 -1
  120. package/dist_app/Main.js +393 -0
  121. package/dist_app/Main.js.map +1 -0
  122. package/dist_app/PropParser.js.map +1 -1
  123. package/dist_app/Reading.js +19 -19
  124. package/dist_app/Reading.js.map +1 -1
  125. package/dist_app/RubySpliter.js +90 -0
  126. package/dist_app/RubySpliter.js.map +1 -0
  127. package/dist_app/ScriptIterator.js +216 -307
  128. package/dist_app/ScriptIterator.js.map +1 -1
  129. package/dist_app/SndBuf.js +746 -949
  130. package/dist_app/SndBuf.js.map +1 -1
  131. package/dist_app/SoundMng.js +1 -1
  132. package/dist_app/SoundMng.js.map +1 -1
  133. package/dist_app/SpritesMng.js +228 -0
  134. package/dist_app/SpritesMng.js.map +1 -0
  135. package/dist_app/TxtLayer.js +1401 -0
  136. package/dist_app/TxtLayer.js.map +1 -0
  137. package/dist_app/Variable.js +157 -164
  138. package/dist_app/Variable.js.map +1 -1
  139. package/dist_app/app.d.ts +4 -4
  140. package/dist_app/app.d.ts.map +1 -1
  141. package/dist_app/app.js +2 -2
  142. package/dist_app/app2.js +3075 -4351
  143. package/dist_app/app2.js.map +1 -1
  144. package/dist_app/appMain.d.ts.map +1 -1
  145. package/dist_app/appMain.js +18 -18
  146. package/dist_app/appMain.js.map +1 -1
  147. package/dist_app/appMain_cmn.d.ts.map +1 -1
  148. package/dist_app/index.d.ts +0 -1
  149. package/dist_app/index.d.ts.map +1 -1
  150. package/dist_app/platform.js +369 -0
  151. package/dist_app/platform.js.map +1 -0
  152. package/dist_app/sn/Button.d.ts +2 -2
  153. package/dist_app/sn/CallStack.d.ts +2 -2
  154. package/dist_app/sn/CmnInterface.d.ts +39 -41
  155. package/dist_app/sn/CmnInterface.d.ts.map +1 -1
  156. package/dist_app/sn/CmnLib.d.ts +11 -7
  157. package/dist_app/sn/CmnLib.d.ts.map +1 -1
  158. package/dist_app/sn/CmnTween.d.ts +9 -9
  159. package/dist_app/sn/Config.d.ts.map +1 -1
  160. package/dist_app/sn/ConfigBase.d.ts +16 -17
  161. package/dist_app/sn/ConfigBase.d.ts.map +1 -1
  162. package/dist_app/sn/DebugMng.d.ts +2 -2
  163. package/dist_app/sn/DebugMng.d.ts.map +1 -1
  164. package/dist_app/sn/DesignCast.d.ts +9 -9
  165. package/dist_app/sn/DesignCast.d.ts.map +1 -1
  166. package/dist_app/sn/EventMng.d.ts +4 -4
  167. package/dist_app/sn/EventMng.d.ts.map +1 -1
  168. package/dist_app/sn/FrameMng.d.ts +5 -5
  169. package/dist_app/sn/FrameMng.d.ts.map +1 -1
  170. package/dist_app/sn/Grammar.d.ts +124 -124
  171. package/dist_app/sn/Grammar.d.ts.map +1 -1
  172. package/dist_app/sn/GrpLayer.d.ts +7 -7
  173. package/dist_app/sn/GrpLayer.d.ts.map +1 -1
  174. package/dist_app/sn/Hyphenation.d.ts +2 -2
  175. package/dist_app/sn/Layer.d.ts +10 -10
  176. package/dist_app/sn/LayerMng.d.ts +7 -8
  177. package/dist_app/sn/LayerMng.d.ts.map +1 -1
  178. package/dist_app/sn/Log.d.ts +3 -3
  179. package/dist_app/sn/Log.d.ts.map +1 -1
  180. package/dist_app/sn/Main.d.ts +6 -5
  181. package/dist_app/sn/Main.d.ts.map +1 -1
  182. package/dist_app/sn/Pages.d.ts +8 -8
  183. package/dist_app/sn/Pages.d.ts.map +1 -1
  184. package/dist_app/sn/PropParser.d.ts +3 -3
  185. package/dist_app/sn/PropParser.d.ts.map +1 -1
  186. package/dist_app/sn/Reading.d.ts +12 -12
  187. package/dist_app/sn/Reading.d.ts.map +1 -1
  188. package/dist_app/sn/RubySpliter.d.ts +4 -4
  189. package/dist_app/sn/RubySpliter.d.ts.map +1 -1
  190. package/dist_app/sn/ScriptIterator.d.ts +5 -6
  191. package/dist_app/sn/ScriptIterator.d.ts.map +1 -1
  192. package/dist_app/sn/SndBuf.d.ts +12 -12
  193. package/dist_app/sn/SndBuf.d.ts.map +1 -1
  194. package/dist_app/sn/SoundMng.d.ts +4 -4
  195. package/dist_app/sn/SoundMng.d.ts.map +1 -1
  196. package/dist_app/sn/SpritesMng.d.ts +5 -5
  197. package/dist_app/sn/SpritesMng.d.ts.map +1 -1
  198. package/dist_app/sn/SysApp.d.ts +13 -10
  199. package/dist_app/sn/SysApp.d.ts.map +1 -1
  200. package/dist_app/sn/SysBase.d.ts +33 -32
  201. package/dist_app/sn/SysBase.d.ts.map +1 -1
  202. package/dist_app/sn/SysWeb.d.ts +7 -11
  203. package/dist_app/sn/SysWeb.d.ts.map +1 -1
  204. package/dist_app/sn/TxtLayer.d.ts +10 -8
  205. package/dist_app/sn/TxtLayer.d.ts.map +1 -1
  206. package/dist_app/sn/TxtStage.d.ts +5 -5
  207. package/dist_app/sn/TxtStage.d.ts.map +1 -1
  208. package/dist_app/sn/Variable.d.ts +9 -8
  209. package/dist_app/sn/Variable.d.ts.map +1 -1
  210. package/dist_app/test/SysTest.d.ts +2 -2
  211. package/dist_app/test/ValTest.d.ts +4 -4
  212. package/dist_app/test/ValTest.d.ts.map +1 -1
  213. package/dist_app/web.d.ts +4 -4
  214. package/dist_app/web.d.ts.map +1 -1
  215. package/package.json +7 -7
  216. package/dist/sn/SysNode.d.ts +0 -15
  217. package/dist/sn/SysNode.d.ts.map +0 -1
  218. package/dist_app/sn/SysNode.d.ts +0 -15
  219. package/dist_app/sn/SysNode.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { d as b, e as m } from "./app2.js";
1
+ import { k as b, e as m } from "./app2.js";
2
2
  import { I as v, S as f, R as r, B as n, a as u } from "./SndBuf.js";
3
3
  class V {
4
4
  constructor(s, t, o, i, l) {
@@ -1 +1 @@
1
- {"version":3,"file":"SoundMng.js","sources":["../src/sn/SoundMng.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-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 {type IEvtMng, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {IHTag, HArg} from './Grammar';\nimport type {IVariable, IMain, INoticeChgVolume} from './CmnInterface';\nimport type {Config} from './Config';\nimport type {SysBase} from './SysBase';\nimport {BUF_BGM, BUF_SE, type HSndBuf, SndBuf} from './SndBuf';\n\nimport {sound, utils} from '@pixi/sound';\n\n\nexport class SoundMng {\n\t#hSndBuf\t: HSndBuf\t= {};\n\n\tconstructor(cfg: Config, hTag: IHTag, private readonly val: IVariable, main: IMain, sys: SysBase) {\n\t\thTag.volume\t\t= o=> this.#volume(o);\t\t// 音量設定(独自拡張)\n\t\thTag.fadebgm\t= o=> this.#fadebgm(o);\t\t// BGMのフェード\n\t\thTag.fadeoutbgm\t= o=> this.#fadeoutbgm(o);\t// BGMのフェードアウト\n\t\thTag.fadeoutse\t= o=> this.#fadeoutse(o);\t// 効果音のフェードアウト\n\t\thTag.fadese\t\t= o=> this.#fadese(o);\t\t// 効果音のフェード\n\t\thTag.playbgm\t= o=> this.#playbgm(o);\t\t// BGM の演奏\n\t\thTag.playse\t\t= o=> this.#playse(o);\t\t// 効果音の再生\n\t\thTag.stop_allse\t= ()=> this.#stop_allse();\t// 全効果音再生の停止\n\t\thTag.stopbgm\t= o=> this.#stopbgm(o);\t\t// BGM 演奏の停止\n\t\thTag.stopse\t\t= o=> this.#stopse(o);\t\t// 効果音再生の停止\n\t\thTag.wb\t\t\t= o=> this.#wb(o);\t\t\t// BGM フェードの終了待ち\n\t\thTag.wf\t\t\t= o=> this.#wf(o);\t\t\t// 効果音フェードの終了待ち\n\t\thTag.stopfadese\t= o=> this.#stopfadese(o);\t// 音声フェードの停止\n\t\thTag.wl\t\t\t= o=> this.#wl(o);\t\t\t// BGM 再生の終了待ち\n\t\thTag.ws\t\t\t= o=> this.#ws(o);\t\t\t// 効果音再生の終了待ち\n\t\thTag.xchgbuf\t= o=> this.#xchgbuf(o);\t\t// 再生トラックの交換\n\n\t\tval.setVal_Nochk('save', 'const.sn.loopPlaying', '{}');\n\n\t\tval.setVal_Nochk('tmp', 'const.sn.sound.codecs', JSON.stringify(utils.supported));\n\n\t\tSndBuf.init(cfg, val, main, sys, this.#hSndBuf);\n\t\tsound.disableAutoPause = true;\n\t}\n\n\t#evtMng\t: IEvtMng;\n\tsetEvtMng(evtMng: IEvtMng) {this.#evtMng = evtMng; SndBuf.setEvtMng(evtMng)}\n\tsetNoticeChgVolume(setGlbVol: INoticeChgVolume, setMovVol: INoticeChgVolume) {\n\t\tthis.val.defValTrg('sys:sn.sound.global_volume', (_, val)=> setGlbVol(sound.volumeAll = Number(val)));\n\t\tthis.val.defValTrg('sys:sn.sound.movie_volume', (_, val)=> setMovVol(Number(val)));\n\n\t\t// 起動時初期値セット\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.global_volume', <number>this.val.getVal('sys:sn.sound.global_volume', 1));\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.movie_volume', <number>this.val.getVal('sys:sn.sound.movie_volume', 1));\n\t}\n\n\t//MARK: 音量設定(独自拡張)\n\t#volume(hArg: HArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tconst vnV = 'const.sn.sound.'+ buf +'.volume';\n\t\tconst arg_vol = this.#getVol(hArg, 1);\n\t\tif (Number(this.val.getVal('sys:'+ vnV)) === arg_vol) return false;\n\n\t\tthis.val.setVal_Nochk('sys', vnV, arg_vol)\t// 基準音量(sys:)\n\t\tthis.val.flush();\t// fadese()内で必ずしも呼ばれないので\n\n\t\t// 再生中音声の一時的音量も変更\n\t\thArg.time = 0;\n\t\thArg.volume = Number(this.val.getVal('save:'+ vnV));\t// 目標音量(save:)\n\t\treturn this.#fadese(hArg);\n\t}\n\t#getVol(hArg: HArg, def: number) {\n\t\tconst vol = argChk_Num(hArg, 'volume', def);\n\t\tif (vol < 0) return 0;\n\t\tif (vol > 1) return 1;\n\t\treturn vol;\n\t}\n\n\t//MARK: BGM/効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutbgm(hArg: HArg) {hArg.volume = 0; return this.#fadebgm(hArg)}\n\t//MARK: 効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutse(hArg: HArg) {hArg.volume = 0; return this.#fadese(hArg)}\n\t//MARK: BGMのフェード(loadから使うのでマクロ化禁止)\n\t#fadebgm(hArg: HArg) {hArg.buf = BUF_BGM; return this.#fadese(hArg)}\n\t//MARK: 効果音のフェード\n\t#fadese(hArg: HArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#stopfadese(hArg);\n\t\tthis.#hSndBuf[buf]?.fade(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM の演奏\n\t#playbgm(hArg: HArg) {\n\t\thArg.buf = BUF_BGM;\n\t\thArg.canskip = false;\n\t\targChk_Boolean(hArg, 'loop', true);\n\t\treturn this.#playse(hArg);\n\t}\n\n\t//MARK: 効果音の再生\n\t#playse(hArg: HArg) {\n\t\tconst {buf = BUF_SE, fn} = hArg;\n\t\tthis.#stopse({buf});\n\t\tif (! fn) throw `fnは必須です buf:${buf}`;\n\n\t\t// isSkipping()は此処のみとする。タイミングによって変わる\n\t\tif (argChk_Boolean(hArg, 'canskip', true) && this.#evtMng.isSkipping) return false;\n\n\t\tconst sb = this.#hSndBuf[buf] = new SndBuf(hArg, buf, fn);\n\t\treturn sb.needLoad;\n\t}\n\n\tclearCache() {sound.removeAll()}\n\n\t//MARK: 全効果音再生の停止\n\t#stop_allse() {\n\t\tfor (const buf of Object.keys(this.#hSndBuf)) this.#stopse({buf});\n\t\tthis.#hSndBuf = {};\n\n\t\tsound.stopAll();\t// 念のため\n\n\t\treturn false;\n\t}\n\t//MARK: BGM 演奏の停止(loadから使うのでマクロ化禁止)\n\t#stopbgm(hArg: HArg) {hArg.buf = BUF_BGM; return this.#stopse(hArg)}\n\t//MARK: 効果音再生の停止\n\t#stopse(hArg: HArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopse(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM フェードの終了待ち\n\t#wb(hArg: HArg) {hArg.buf = BUF_BGM; return this.#wf(hArg)}\n\n\t//MARK: 効果音フェードの終了待ち\n\t#wf(hArg: HArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.wf(hArg) ?? false;\n\t}\n\n\t//MARK: 音声フェードの停止\n\t#stopfadese(hArg: HArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopfadese(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM 再生の終了待ち\n\t#wl(hArg: HArg) {hArg.buf = BUF_BGM; return this.#ws(hArg)}\n\t//MARK: 効果音再生の終了待ち\n\t#ws(hArg: HArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.ws(hArg) ?? false;\n\t}\n\n\t//MARK: 再生トラックの交換\n\t#xchgbuf(hArg: HArg) {\n\t\tconst {buf: buf1 = BUF_SE, buf2 = BUF_SE} = hArg;\n\t\tif (buf1 === buf2) return false;\n\n\t\tconst a = this.#hSndBuf[buf1];\t// 分割代入の変数交換だと noUncheckedIndexedAccess エラーになるので\n\t\tconst b = this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (a) this.#hSndBuf[buf2] = a; else delete this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (b) this.#hSndBuf[buf1] = b; else delete this.#hSndBuf[buf1];\n\n\t\tSndBuf.xchgbuf(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: しおりの読込(BGM状態復元)\n\tplayLoopFromSaveObj(all_stop_and_play: boolean): Promise<void>[] {\n\t\tconst lp = String(this.val.getVal('save:const.sn.loopPlaying', '{}'));\n\t\tif (lp === '{}') {this.#stop_allse(); this.clearCache(); return []}\n/*\n\t\t\t\t\t(Now)#hSndBuf\n\t\t\t\t\tstop\tplay\n\thSaveLP\tstop\t-\t\tstop\t\t--[1]\n\t(to)\tplay\tplay\tstop/play\t--[2]\n\t\t\teq play\tplay\t-\t\t\t--[2]\n*/\n\t\tconst hSaveLP = <{[buf: string]: string}>JSON.parse(lp);\n\t\tif (all_stop_and_play) {this.#stop_allse(); this.clearCache()}\n\t\telse for (const [buf, sb] of Object.entries(this.#hSndBuf)) {\n\t\t\t// [1] #hSndBuf(再生中)だが hSaveLP(再生予定) にない buf -> stop\n\t\t\tif (! (buf in hSaveLP)) sb.stopse({buf});\n\t\t}\n\n\t\t// [2] hSaveLP(再生予定)を再生。だが#hSndBuf(再生中)の状況で処理変更\n\t\treturn Object.entries(hSaveLP).map(([buf, fn])=> new Promise(re=> {\n\t\t\tconst sb = this.#hSndBuf[buf]\n\t\t\tif (! all_stop_and_play && sb) {\n\t\t\t\tif (sb.fn === fn) {re(); return}\n\t\t\t\t//sb.stopse({buf});\t// 再生中 fn !== 再生予定 fn なら stop\n\t\t\t\t\t// #playbgm()、#playse() 内で stop するので省略\n\t\t\t}\n\n\t\t\tconst vm = 'save:const.sn.sound.'+ buf +'.';\n\t\t\tconst hArg = {\n\t\t\t\tfn,\n\t\t\t\tbuf,\n\t\t\t\tjoin\t: false,\n\t\t\t\tloop\t: true,\n\t\t\t\tvolume\t: Number(this.val.getVal(vm +'volume')),\n\t\t\t\tstart_ms: Number(this.val.getVal(vm +'start_ms')),\n\t\t\t\tend_ms\t: Number(this.val.getVal(vm +'end_ms')),\n\t\t\t\tret_ms\t: Number(this.val.getVal(vm +'ret_ms')),\n\t\t\t\tfnc\t\t: re,\t// loaded\n\t\t\t};\n\t\t\tif (hArg.buf === BUF_BGM) this.#playbgm(hArg);\n\t\t\telse this.#playse(hArg);\n\t\t}));\n\t}\n\n\tdestroy() {this.#stop_allse(); this.clearCache()}\n\n}\n"],"names":["SoundMng","cfg","hTag","val","main","sys","o","#volume","#fadebgm","#fadeoutbgm","#fadeoutse","#fadese","#playbgm","#playse","#stop_allse","#stopbgm","#stopse","#wb","#wf","#stopfadese","#wl","#ws","#xchgbuf","utils","SndBuf","#hSndBuf","sound","#evtMng","evtMng","setGlbVol","setMovVol","_","hArg","buf","BUF_SE","vnV","arg_vol","#getVol","def","vol","argChk_Num","BUF_BGM","argChk_Boolean","fn","buf1","buf2","a","b","all_stop_and_play","lp","hSaveLP","sb","re","vm"],"mappings":";;AAiBO,MAAMA,EAAS;AAAA,EAGrB,YAAYC,GAAaC,GAA8BC,GAAgBC,GAAaC,GAAc;AAA3C,SAAA,MAAAF,GACtDD,EAAK,SAAU,CAAAI,MAAI,KAAKC,GAAQD,CAAC,GACjCJ,EAAK,UAAU,CAAAI,MAAI,KAAKE,GAASF,CAAC,GAClCJ,EAAK,aAAa,CAAAI,MAAI,KAAKG,GAAYH,CAAC,GACxCJ,EAAK,YAAY,CAAAI,MAAI,KAAKI,GAAWJ,CAAC,GACtCJ,EAAK,SAAU,CAAAI,MAAI,KAAKK,GAAQL,CAAC,GACjCJ,EAAK,UAAU,CAAAI,MAAI,KAAKM,GAASN,CAAC,GAClCJ,EAAK,SAAU,CAAAI,MAAI,KAAKO,GAAQP,CAAC,GACjCJ,EAAK,aAAa,MAAK,KAAKY,GAAA,GAC5BZ,EAAK,UAAU,CAAAI,MAAI,KAAKS,GAAST,CAAC,GAClCJ,EAAK,SAAU,CAAAI,MAAI,KAAKU,GAAQV,CAAC,GACjCJ,EAAK,KAAO,CAAAI,MAAI,KAAKW,GAAIX,CAAC,GAC1BJ,EAAK,KAAO,CAAAI,MAAI,KAAKY,GAAIZ,CAAC,GAC1BJ,EAAK,aAAa,CAAAI,MAAI,KAAKa,GAAYb,CAAC,GACxCJ,EAAK,KAAO,CAAAI,MAAI,KAAKc,GAAId,CAAC,GAC1BJ,EAAK,KAAO,CAAAI,MAAI,KAAKe,GAAIf,CAAC,GAC1BJ,EAAK,UAAU,CAAAI,MAAI,KAAKgB,GAAShB,CAAC,GAElCH,EAAI,aAAa,QAAQ,wBAAwB,IAAI,GAErDA,EAAI,aAAa,OAAO,yBAAyB,KAAK,UAAUoB,EAAM,SAAS,CAAC,GAEhFC,EAAO,KAAKvB,GAAKE,GAAKC,GAAMC,GAAK,KAAKoB,EAAQ,GAC9CC,EAAM,mBAAmB;AAAA,EAC1B;AAAA,EA1BAD,KAAqB,CAAA;AAAA,EA4BrBE;AAAA,EACA,UAAUC,GAAiB;AAAC,SAAKD,KAAUC,GAAQJ,EAAO,UAAUI,CAAM;AAAA,EAAC;AAAA,EAC3E,mBAAmBC,GAA6BC,GAA6B;AAC5E,SAAK,IAAI,UAAU,8BAA8B,CAACC,GAAG5B,MAAO0B,EAAUH,EAAM,YAAY,OAAOvB,CAAG,CAAC,CAAC,GACpG,KAAK,IAAI,UAAU,6BAA6B,CAAC4B,GAAG5B,MAAO2B,EAAU,OAAO3B,CAAG,CAAC,CAAC,GAGjF,KAAK,IAAI,aAAa,OAAO,0BAAkC,KAAK,IAAI,OAAO,8BAA8B,CAAC,CAAC,GAC/G,KAAK,IAAI,aAAa,OAAO,yBAAiC,KAAK,IAAI,OAAO,6BAA6B,CAAC,CAAC;AAAA,EAC9G;AAAA;AAAA,EAGAI,GAAQyB,GAAY;AACnB,UAAM,EAAC,KAAAC,IAAMC,EAAA,IAAUF,GACjBG,IAAM,oBAAmBF,IAAK,WAC9BG,IAAU,KAAKC,GAAQL,GAAM,CAAC;AACpC,WAAI,OAAO,KAAK,IAAI,OAAO,SAAQG,CAAG,CAAC,MAAMC,IAAgB,MAE7D,KAAK,IAAI,aAAa,OAAOD,GAAKC,CAAO,GACzC,KAAK,IAAI,MAAA,GAGTJ,EAAK,OAAO,GACZA,EAAK,SAAS,OAAO,KAAK,IAAI,OAAO,UAASG,CAAG,CAAC,GAC3C,KAAKxB,GAAQqB,CAAI;AAAA,EACzB;AAAA,EACAK,GAAQL,GAAYM,GAAa;AAChC,UAAMC,IAAMC,EAAWR,GAAM,UAAUM,CAAG;AAC1C,WAAIC,IAAM,IAAU,IAChBA,IAAM,IAAU,IACbA;AAAA,EACR;AAAA;AAAA,EAGA9B,GAAYuB,GAAY;AAAC,WAAAA,EAAK,SAAS,GAAU,KAAKxB,GAASwB,CAAI;AAAA,EAAC;AAAA;AAAA,EAEpEtB,GAAWsB,GAAY;AAAC,WAAAA,EAAK,SAAS,GAAU,KAAKrB,GAAQqB,CAAI;AAAA,EAAC;AAAA;AAAA,EAElExB,GAASwB,GAAY;AAAC,WAAAA,EAAK,MAAMS,GAAgB,KAAK9B,GAAQqB,CAAI;AAAA,EAAC;AAAA;AAAA,EAEnErB,GAAQqB,GAAY;AACnB,UAAM,EAAC,KAAAC,IAAMC,EAAA,IAAUF;AACvB,gBAAKb,GAAYa,CAAI,GACrB,KAAKP,GAASQ,CAAG,GAAG,KAAKD,CAAI,GAEtB;AAAA,EACR;AAAA;AAAA,EAGApB,GAASoB,GAAY;AACpB,WAAAA,EAAK,MAAMS,GACXT,EAAK,UAAU,IACfU,EAAeV,GAAM,QAAQ,EAAI,GAC1B,KAAKnB,GAAQmB,CAAI;AAAA,EACzB;AAAA;AAAA,EAGAnB,GAAQmB,GAAY;AACnB,UAAM,EAAC,KAAAC,IAAMC,GAAQ,IAAAS,EAAA,IAAMX;AAE3B,QADA,KAAKhB,GAAQ,EAAC,KAAAiB,GAAI,GACd,CAAEU,EAAI,OAAM,eAAeV,CAAG;AAGlC,WAAIS,EAAeV,GAAM,WAAW,EAAI,KAAK,KAAKL,GAAQ,aAAmB,MAElE,KAAKF,GAASQ,CAAG,IAAI,IAAIT,EAAOQ,GAAMC,GAAKU,CAAE,GAC9C;AAAA,EACX;AAAA,EAEA,aAAa;AAACjB,IAAAA,EAAM,UAAA;AAAA,EAAW;AAAA;AAAA,EAG/BZ,KAAc;AACb,eAAWmB,KAAO,OAAO,KAAK,KAAKR,EAAQ,EAAG,MAAKT,GAAQ,EAAC,KAAAiB,GAAI;AAChE,gBAAKR,KAAW,CAAA,GAEhBC,EAAM,QAAA,GAEC;AAAA,EACR;AAAA;AAAA,EAEAX,GAASiB,GAAY;AAAC,WAAAA,EAAK,MAAMS,GAAgB,KAAKzB,GAAQgB,CAAI;AAAA,EAAC;AAAA;AAAA,EAEnEhB,GAAQgB,GAAY;AACnB,UAAM,EAAC,KAAAC,IAAMC,EAAA,IAAUF;AACvB,gBAAKP,GAASQ,CAAG,GAAG,OAAOD,CAAI,GAExB;AAAA,EACR;AAAA;AAAA,EAGAf,GAAIe,GAAY;AAAC,WAAAA,EAAK,MAAMS,GAAgB,KAAKvB,GAAIc,CAAI;AAAA,EAAC;AAAA;AAAA,EAG1Dd,GAAIc,GAAY;AACf,UAAM,EAAC,KAAAC,IAAMC,EAAA,IAAUF;AACvB,WAAO,KAAKP,GAASQ,CAAG,GAAG,GAAGD,CAAI,KAAK;AAAA,EACxC;AAAA;AAAA,EAGAb,GAAYa,GAAY;AACvB,UAAM,EAAC,KAAAC,IAAMC,EAAA,IAAUF;AACvB,gBAAKP,GAASQ,CAAG,GAAG,WAAWD,CAAI,GAE5B;AAAA,EACR;AAAA;AAAA,EAGAZ,GAAIY,GAAY;AAAC,WAAAA,EAAK,MAAMS,GAAgB,KAAKpB,GAAIW,CAAI;AAAA,EAAC;AAAA;AAAA,EAE1DX,GAAIW,GAAY;AACf,UAAM,EAAC,KAAAC,IAAMC,EAAA,IAAUF;AACvB,WAAO,KAAKP,GAASQ,CAAG,GAAG,GAAGD,CAAI,KAAK;AAAA,EACxC;AAAA;AAAA,EAGAV,GAASU,GAAY;AACpB,UAAM,EAAC,KAAKY,IAAOV,GAAQ,MAAAW,IAAOX,MAAUF;AAC5C,QAAIY,MAASC,EAAM,QAAO;AAE1B,UAAMC,IAAI,KAAKrB,GAASmB,CAAI,GACtBG,IAAI,KAAKtB,GAASoB,CAAI;AAE5B,WAAIC,IAAG,KAAKrB,GAASoB,CAAI,IAAIC,IAAQ,OAAO,KAAKrB,GAASoB,CAAI,GAE1DE,IAAG,KAAKtB,GAASmB,CAAI,IAAIG,IAAQ,OAAO,KAAKtB,GAASmB,CAAI,GAE9DpB,EAAO,QAAQQ,CAAI,GAEZ;AAAA,EACR;AAAA;AAAA,EAGA,oBAAoBgB,GAA6C;AAChE,UAAMC,IAAK,OAAO,KAAK,IAAI,OAAO,6BAA6B,IAAI,CAAC;AACpE,QAAIA,MAAO;AAAO,kBAAKnC,GAAA,GAAe,KAAK,WAAA,GAAqB,CAAA;AAQhE,UAAMoC,IAAmC,KAAK,MAAMD,CAAE;AACtD,QAAID;AAAoB,WAAKlC,GAAA,GAAe,KAAK,WAAA;AAAA,QAC5C,YAAW,CAACmB,GAAKkB,CAAE,KAAK,OAAO,QAAQ,KAAK1B,EAAQ;AAExD,MAAOQ,KAAOiB,OAAa,OAAO,EAAC,KAAAjB,GAAI;AAIxC,WAAO,OAAO,QAAQiB,CAAO,EAAE,IAAI,CAAC,CAACjB,GAAKU,CAAE,MAAK,IAAI,QAAQ,CAAAS,MAAK;AACjE,YAAMD,IAAK,KAAK1B,GAASQ,CAAG;AAC5B,UAAI,CAAEe,KAAqBG,KACtBA,EAAG,OAAOR,GAAI;AAAC,QAAAS,EAAA;AAAM;AAAA,MAAM;AAKhC,YAAMC,IAAK,yBAAwBpB,IAAK,KAClCD,IAAO;AAAA,QACZ,IAAAW;AAAA,QACA,KAAAV;AAAA,QACA,MAAO;AAAA,QACP,MAAO;AAAA,QACP,QAAS,OAAO,KAAK,IAAI,OAAOoB,IAAI,QAAQ,CAAC;AAAA,QAC7C,UAAU,OAAO,KAAK,IAAI,OAAOA,IAAI,UAAU,CAAC;AAAA,QAChD,QAAS,OAAO,KAAK,IAAI,OAAOA,IAAI,QAAQ,CAAC;AAAA,QAC7C,QAAS,OAAO,KAAK,IAAI,OAAOA,IAAI,QAAQ,CAAC;AAAA,QAC7C,KAAOD;AAAA;AAAA,MAAA;AAER,MAAIpB,EAAK,QAAQS,IAAS,KAAK7B,GAASoB,CAAI,IACvC,KAAKnB,GAAQmB,CAAI;AAAA,IACvB,CAAC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU;AAAC,SAAKlB,GAAA,GAAe,KAAK,WAAA;AAAA,EAAY;AAEjD;"}
1
+ {"version":3,"file":"SoundMng.js","sources":["../src/sn/SoundMng.ts"],"sourcesContent":["/* ***** BEGIN LICENSE BLOCK *****\n\tCopyright (c) 2018-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 {type IEvtMng, argChk_Boolean, argChk_Num} from './CmnLib';\nimport type {T_HTag, TArg} from './Grammar';\nimport type {T_Variable, T_Main, T_NoticeChgVolume} from './CmnInterface';\nimport type {Config} from './Config';\nimport type {SysBase} from './SysBase';\nimport {BUF_BGM, BUF_SE, type HSndBuf, SndBuf} from './SndBuf';\n\nimport {sound, utils} from '@pixi/sound';\n\n\nexport class SoundMng {\n\t#hSndBuf\t: HSndBuf\t= {};\n\n\tconstructor(cfg: Config, hTag: T_HTag, private readonly val: T_Variable, main: T_Main, sys: SysBase) {\n\t\thTag.volume\t\t= o=> this.#volume(o);\t\t// 音量設定(独自拡張)\n\t\thTag.fadebgm\t= o=> this.#fadebgm(o);\t\t// BGMのフェード\n\t\thTag.fadeoutbgm\t= o=> this.#fadeoutbgm(o);\t// BGMのフェードアウト\n\t\thTag.fadeoutse\t= o=> this.#fadeoutse(o);\t// 効果音のフェードアウト\n\t\thTag.fadese\t\t= o=> this.#fadese(o);\t\t// 効果音のフェード\n\t\thTag.playbgm\t= o=> this.#playbgm(o);\t\t// BGM の演奏\n\t\thTag.playse\t\t= o=> this.#playse(o);\t\t// 効果音の再生\n\t\thTag.stop_allse\t= ()=> this.#stop_allse();\t// 全効果音再生の停止\n\t\thTag.stopbgm\t= o=> this.#stopbgm(o);\t\t// BGM 演奏の停止\n\t\thTag.stopse\t\t= o=> this.#stopse(o);\t\t// 効果音再生の停止\n\t\thTag.wb\t\t\t= o=> this.#wb(o);\t\t\t// BGM フェードの終了待ち\n\t\thTag.wf\t\t\t= o=> this.#wf(o);\t\t\t// 効果音フェードの終了待ち\n\t\thTag.stopfadese\t= o=> this.#stopfadese(o);\t// 音声フェードの停止\n\t\thTag.wl\t\t\t= o=> this.#wl(o);\t\t\t// BGM 再生の終了待ち\n\t\thTag.ws\t\t\t= o=> this.#ws(o);\t\t\t// 効果音再生の終了待ち\n\t\thTag.xchgbuf\t= o=> this.#xchgbuf(o);\t\t// 再生トラックの交換\n\n\t\tval.setVal_Nochk('save', 'const.sn.loopPlaying', '{}');\n\n\t\tval.setVal_Nochk('tmp', 'const.sn.sound.codecs', JSON.stringify(utils.supported));\n\n\t\tSndBuf.init(cfg, val, main, sys, this.#hSndBuf);\n\t\tsound.disableAutoPause = true;\n\t}\n\n\t#evtMng\t: IEvtMng;\n\tsetEvtMng(evtMng: IEvtMng) {this.#evtMng = evtMng; SndBuf.setEvtMng(evtMng)}\n\tsetNoticeChgVolume(setGlbVol: T_NoticeChgVolume, setMovVol: T_NoticeChgVolume) {\n\t\tthis.val.defValTrg('sys:sn.sound.global_volume', (_, val)=> setGlbVol(sound.volumeAll = Number(val)));\n\t\tthis.val.defValTrg('sys:sn.sound.movie_volume', (_, val)=> setMovVol(Number(val)));\n\n\t\t// 起動時初期値セット\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.global_volume', <number>this.val.getVal('sys:sn.sound.global_volume', 1));\n\t\tthis.val.setVal_Nochk('sys', 'sn.sound.movie_volume', <number>this.val.getVal('sys:sn.sound.movie_volume', 1));\n\t}\n\n\t//MARK: 音量設定(独自拡張)\n\t#volume(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tconst vnV = 'const.sn.sound.'+ buf +'.volume';\n\t\tconst arg_vol = this.#getVol(hArg, 1);\n\t\tif (Number(this.val.getVal('sys:'+ vnV)) === arg_vol) return false;\n\n\t\tthis.val.setVal_Nochk('sys', vnV, arg_vol)\t// 基準音量(sys:)\n\t\tthis.val.flush();\t// fadese()内で必ずしも呼ばれないので\n\n\t\t// 再生中音声の一時的音量も変更\n\t\thArg.time = 0;\n\t\thArg.volume = Number(this.val.getVal('save:'+ vnV));\t// 目標音量(save:)\n\t\treturn this.#fadese(hArg);\n\t}\n\t#getVol(hArg: TArg, def: number) {\n\t\tconst vol = argChk_Num(hArg, 'volume', def);\n\t\tif (vol < 0) return 0;\n\t\tif (vol > 1) return 1;\n\t\treturn vol;\n\t}\n\n\t//MARK: BGM/効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutbgm(hArg: TArg) {hArg.volume = 0; return this.#fadebgm(hArg)}\n\t//MARK: 効果音のフェードアウト(loadから使うのでマクロ化禁止)\n\t#fadeoutse(hArg: TArg) {hArg.volume = 0; return this.#fadese(hArg)}\n\t//MARK: BGMのフェード(loadから使うのでマクロ化禁止)\n\t#fadebgm(hArg: TArg) {hArg.buf = BUF_BGM; return this.#fadese(hArg)}\n\t//MARK: 効果音のフェード\n\t#fadese(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#stopfadese(hArg);\n\t\tthis.#hSndBuf[buf]?.fade(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM の演奏\n\t#playbgm(hArg: TArg) {\n\t\thArg.buf = BUF_BGM;\n\t\thArg.canskip = false;\n\t\targChk_Boolean(hArg, 'loop', true);\n\t\treturn this.#playse(hArg);\n\t}\n\n\t//MARK: 効果音の再生\n\t#playse(hArg: TArg) {\n\t\tconst {buf = BUF_SE, fn} = hArg;\n\t\tthis.#stopse({buf});\n\t\tif (! fn) throw `fnは必須です buf:${buf}`;\n\n\t\t// isSkipping()は此処のみとする。タイミングによって変わる\n\t\tif (argChk_Boolean(hArg, 'canskip', true) && this.#evtMng.isSkipping) return false;\n\n\t\tconst sb = this.#hSndBuf[buf] = new SndBuf(hArg, buf, fn);\n\t\treturn sb.needLoad;\n\t}\n\n\tclearCache() {sound.removeAll()}\n\n\t//MARK: 全効果音再生の停止\n\t#stop_allse() {\n\t\tfor (const buf of Object.keys(this.#hSndBuf)) this.#stopse({buf});\n\t\tthis.#hSndBuf = {};\n\n\t\tsound.stopAll();\t// 念のため\n\n\t\treturn false;\n\t}\n\t//MARK: BGM 演奏の停止(loadから使うのでマクロ化禁止)\n\t#stopbgm(hArg: TArg) {hArg.buf = BUF_BGM; return this.#stopse(hArg)}\n\t//MARK: 効果音再生の停止\n\t#stopse(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopse(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM フェードの終了待ち\n\t#wb(hArg: TArg) {hArg.buf = BUF_BGM; return this.#wf(hArg)}\n\n\t//MARK: 効果音フェードの終了待ち\n\t#wf(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.wf(hArg) ?? false;\n\t}\n\n\t//MARK: 音声フェードの停止\n\t#stopfadese(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\tthis.#hSndBuf[buf]?.stopfadese(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: BGM 再生の終了待ち\n\t#wl(hArg: TArg) {hArg.buf = BUF_BGM; return this.#ws(hArg)}\n\t//MARK: 効果音再生の終了待ち\n\t#ws(hArg: TArg) {\n\t\tconst {buf = BUF_SE} = hArg;\n\t\treturn this.#hSndBuf[buf]?.ws(hArg) ?? false;\n\t}\n\n\t//MARK: 再生トラックの交換\n\t#xchgbuf(hArg: TArg) {\n\t\tconst {buf: buf1 = BUF_SE, buf2 = BUF_SE} = hArg;\n\t\tif (buf1 === buf2) return false;\n\n\t\tconst a = this.#hSndBuf[buf1];\t// 分割代入の変数交換だと noUncheckedIndexedAccess エラーになるので\n\t\tconst b = this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (a) this.#hSndBuf[buf2] = a; else delete this.#hSndBuf[buf2];\n\t\t// eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n\t\tif (b) this.#hSndBuf[buf1] = b; else delete this.#hSndBuf[buf1];\n\n\t\tSndBuf.xchgbuf(hArg);\n\n\t\treturn false;\n\t}\n\n\t//MARK: しおりの読込(BGM状態復元)\n\tplayLoopFromSaveObj(all_stop_and_play: boolean): Promise<void>[] {\n\t\tconst lp = String(this.val.getVal('save:const.sn.loopPlaying', '{}'));\n\t\tif (lp === '{}') {this.#stop_allse(); this.clearCache(); return []}\n/*\n\t\t\t\t\t(Now)#hSndBuf\n\t\t\t\t\tstop\tplay\n\thSaveLP\tstop\t-\t\tstop\t\t--[1]\n\t(to)\tplay\tplay\tstop/play\t--[2]\n\t\t\teq play\tplay\t-\t\t\t--[2]\n*/\n\t\tconst hSaveLP = <{[buf: string]: string}>JSON.parse(lp);\n\t\tif (all_stop_and_play) {this.#stop_allse(); this.clearCache()}\n\t\telse for (const [buf, sb] of Object.entries(this.#hSndBuf)) {\n\t\t\t// [1] #hSndBuf(再生中)だが hSaveLP(再生予定) にない buf -> stop\n\t\t\tif (! (buf in hSaveLP)) sb.stopse({buf});\n\t\t}\n\n\t\t// [2] hSaveLP(再生予定)を再生。だが#hSndBuf(再生中)の状況で処理変更\n\t\treturn Object.entries(hSaveLP).map(([buf, fn])=> new Promise(re=> {\n\t\t\tconst sb = this.#hSndBuf[buf]\n\t\t\tif (! all_stop_and_play && sb) {\n\t\t\t\tif (sb.fn === fn) {re(); return}\n\t\t\t\t//sb.stopse({buf});\t// 再生中 fn !== 再生予定 fn なら stop\n\t\t\t\t\t// #playbgm()、#playse() 内で stop するので省略\n\t\t\t}\n\n\t\t\tconst vm = 'save:const.sn.sound.'+ buf +'.';\n\t\t\tconst hArg = {\n\t\t\t\tfn,\n\t\t\t\tbuf,\n\t\t\t\tjoin\t: false,\n\t\t\t\tloop\t: true,\n\t\t\t\tvolume\t: Number(this.val.getVal(vm +'volume')),\n\t\t\t\tstart_ms: Number(this.val.getVal(vm +'start_ms')),\n\t\t\t\tend_ms\t: Number(this.val.getVal(vm +'end_ms')),\n\t\t\t\tret_ms\t: Number(this.val.getVal(vm +'ret_ms')),\n\t\t\t\tfnc\t\t: re,\t// loaded\n\t\t\t};\n\t\t\tif (hArg.buf === BUF_BGM) this.#playbgm(hArg);\n\t\t\telse this.#playse(hArg);\n\t\t}));\n\t}\n\n\tdestroy() {this.#stop_allse(); this.clearCache()}\n\n}\n"],"names":["SoundMng","cfg","hTag","val","main","sys","o","#volume","#fadebgm","#fadeoutbgm","#fadeoutse","#fadese","#playbgm","#playse","#stop_allse","#stopbgm","#stopse","#wb","#wf","#stopfadese","#wl","#ws","#xchgbuf","utils","SndBuf","#hSndBuf","sound","#evtMng","evtMng","setGlbVol","setMovVol","_","hArg","buf","BUF_SE","vnV","arg_vol","#getVol","def","vol","argChk_Num","BUF_BGM","argChk_Boolean","fn","buf1","buf2","a","b","all_stop_and_play","lp","hSaveLP","sb","re","vm"],"mappings":"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"}
@@ -0,0 +1,228 @@
1
+ import { U as b, L as v, V as F, S as x, m as h, i as L, y as w, D as N, b as O, N as A, B as k, x as y, e as H, z as Y, k as V } from "./app2.js";
2
+ import { a as C } from "./Reading.js";
3
+ class e {
4
+ constructor(t = "", a, c = () => {
5
+ }, n = () => {
6
+ }) {
7
+ this.csvFn = t, this.ctn = a, this.fncFirstComp = c, this.fncAllComp = n, t && (this.#i = a ? (o) => {
8
+ a.addChild(o), this.#d.push(o);
9
+ } : () => {
10
+ }, this.ret = e.#E(
11
+ t,
12
+ (o) => this.fncFirstComp(o),
13
+ // 差し替え考慮
14
+ (o) => this.fncAllComp(o),
15
+ // 差し替え考慮
16
+ (o) => this.#i(o)
17
+ // 差し替え考慮
18
+ ));
19
+ }
20
+ static #n;
21
+ static #f;
22
+ static #e;
23
+ static #r;
24
+ static init(t, a, c, n, o) {
25
+ e.#n = t, e.#f = a, e.#e = c, e.#r = n, c.arg.crypto && (e.#l = (d, f, u) => e.#T(d, f, u), e.#h = (d, f, u) => e.#P(d, f, u));
26
+ const s = () => {
27
+ const d = e.#o * e.#m;
28
+ for (const f of Object.values(e.#t)) f.volume = d;
29
+ };
30
+ o.setNoticeChgVolume(
31
+ (d) => {
32
+ e.#o = d, s();
33
+ },
34
+ (d) => {
35
+ e.#m = d, s();
36
+ }
37
+ );
38
+ }
39
+ static #m = 1;
40
+ static #o = 1;
41
+ static #s;
42
+ static setEvtMng(t) {
43
+ e.#s = t;
44
+ }
45
+ ret = !1;
46
+ #i;
47
+ #d = [];
48
+ destroy() {
49
+ this.fncFirstComp = () => {
50
+ }, this.fncAllComp = () => {
51
+ }, this.#i = (t) => t.destroy();
52
+ for (const t of this.#d)
53
+ e.stopVideo(t.name), t.parent?.removeChild(t), t.destroy();
54
+ this.#d = [];
55
+ }
56
+ static destroy() {
57
+ e.#c = {}, e.#a = {}, e.#t = {};
58
+ }
59
+ //static #ldrHFn: {[fn: string]: 1} = {};
60
+ static #E(t, a, c, n) {
61
+ if (!t) return !1;
62
+ let o = !1;
63
+ if (t.startsWith("data:")) {
64
+ const i = () => {
65
+ const l = y.from(t);
66
+ n(l), a(l), c(o);
67
+ };
68
+ return t in b ? i() : (o = !0, new v().add(t, t).load(i)), o;
69
+ }
70
+ const s = [], d = new v();
71
+ for (const i of t.split(",")) {
72
+ if (!i) throw "face属性に空要素が含まれます";
73
+ const { dx: l, dy: r, blendmode: E, fn: m } = e.#c[i] ?? {
74
+ fn: i,
75
+ dx: 0,
76
+ dy: 0,
77
+ blendmode: F.NORMAL
78
+ };
79
+ if (s.push({ fn: m, fnc: (P) => {
80
+ P.transform && (P.x = l, P.y = r, P.blendMode = E);
81
+ } }), m in e.#a || m in b || m in v.shared.resources) continue;
82
+ o = !0;
83
+ const T = e.#n.searchPath(m, x.SP_GSM), R = this.#e.arg.crypto ? { xhrType: T.endsWith(".json") ? h.XHR_RESPONSE_TYPE.TEXT : h.XHR_RESPONSE_TYPE.BUFFER } : {};
84
+ d.add({ ...R, name: m, url: T });
85
+ }
86
+ const f = s.at(0);
87
+ f && (f.fnc = a);
88
+ const u = (i, l) => {
89
+ for (const { fn: r, fnc: E } of s) {
90
+ const m = e.#v(r, l);
91
+ m.name = r, n(m), E(m);
92
+ }
93
+ c(o);
94
+ };
95
+ return o ? d.use((i, l) => {
96
+ try {
97
+ if (i.extension === "json") {
98
+ this.#e.dec("json", i.data).then((r) => e.#h(r, i, l));
99
+ return;
100
+ }
101
+ this.#e.decAB(i.data).then((r) => e.#l(r, i, l));
102
+ } catch (r) {
103
+ const E = `画像/動画ロード失敗です fn:${i.name} ${String(r)}`;
104
+ e.#s.isSkipping ? console.warn(E) : console.error("%c" + E, "color:#FF3300;");
105
+ }
106
+ }).load(u) : queueMicrotask(() => u(0, {})), o;
107
+ }
108
+ static #c = {};
109
+ static #a = {};
110
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
111
+ static #l = (t, { type: a, name: c, data: n }, o) => {
112
+ switch (a) {
113
+ case h.TYPE.VIDEO: {
114
+ const s = n;
115
+ s.volume = e.#o, e.#t[c] = e.#u(s);
116
+ }
117
+ }
118
+ o();
119
+ };
120
+ static #y(t) {
121
+ const a = /([^\d]+)\d+\.(\w+)/.exec(t[0] ?? "");
122
+ if (!a) return [];
123
+ const [, c = "", n = ""] = a, o = c.length, s = -n.length - 1;
124
+ return t.sort((d, f) => L(d.slice(o, s)) > L(f.slice(o, s)) ? 1 : -1);
125
+ }
126
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
127
+ static #T(t, a, c) {
128
+ if (a.data = t, a.extension !== "bin" && c(), t instanceof HTMLImageElement) {
129
+ w.fromLoader(t, a.url, a.name).then((n) => {
130
+ a.texture = n, a.type = h.TYPE.IMAGE;
131
+ }), c();
132
+ return;
133
+ }
134
+ t instanceof HTMLVideoElement && (t.volume = e.#o, e.#t[a.name] = e.#u(t), a.type = h.TYPE.VIDEO), c();
135
+ }
136
+ static #u(t) {
137
+ return e.#f.getVal("const.sn.needClick2Play") && (N.trace_beforeNew(`[lay系] ${N.strPos()}未クリック状態で動画を自動再生します。音声はミュートされます`, "W"), t.muted = !0), t.setAttribute("playsinline", ""), t;
138
+ }
139
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
140
+ static #h = (t, { type: a, spritesheet: c, name: n, data: o }, s) => {
141
+ switch (a) {
142
+ case h.TYPE.JSON: {
143
+ const d = c._frameKeys;
144
+ e.#y(d), e.#a[n] = {
145
+ aTex: d.map((f) => w.from(f)),
146
+ meta: o.meta
147
+ };
148
+ }
149
+ }
150
+ s();
151
+ };
152
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
153
+ static #P(t, a, c) {
154
+ const { meta: n, frames: o } = a.data = JSON.parse(t);
155
+ if (a.type = h.TYPE.JSON, !n?.image) {
156
+ c();
157
+ return;
158
+ }
159
+ const s = O(n.image), d = e.#n.searchPath(s, x.SP_GSM);
160
+ new v().use((f, u) => {
161
+ this.#e.decAB(f.data).then((i) => {
162
+ f.data = i, i instanceof HTMLImageElement && (f.type = h.TYPE.IMAGE, URL.revokeObjectURL(i.src)), u();
163
+ }).catch((i) => this.#r.errScript(`画像/動画ロード失敗です dec2res4Cripto fn:${f.name} ${String(i)}`, !1));
164
+ }).add({ name: s, url: d, xhrType: h.XHR_RESPONSE_TYPE.BUFFER }).load((f, u) => {
165
+ for (const { data: i } of Object.values(f.resources)) {
166
+ const { baseTexture: l } = w.from(i), r = Object.values(o);
167
+ e.#a[a.name] = {
168
+ aTex: r.map(({ frame: { x: E, y: m, w: T, h: R } }) => new w(
169
+ l,
170
+ new A(E, m, T, R)
171
+ )),
172
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
173
+ meta: n
174
+ };
175
+ }
176
+ c();
177
+ });
178
+ }
179
+ static #v(t, a) {
180
+ const c = e.#a[t];
181
+ if (c) {
182
+ const s = new k(c.aTex);
183
+ return s.animationSpeed = c.meta.animationSpeed ?? 1, s.play(), s;
184
+ }
185
+ if (t in b) return y.from(t);
186
+ const n = e.#t[t];
187
+ if (n) return y.from(n);
188
+ const o = a[t];
189
+ return o ? new y(o.texture) : new y();
190
+ }
191
+ static #t = {};
192
+ static getHFn2VElm(t) {
193
+ return e.#t[t];
194
+ }
195
+ static wv(t) {
196
+ const { fn: a } = t;
197
+ if (!a) throw "fnは必須です";
198
+ const c = e.#t[a];
199
+ if (!c || c.loop) return !1;
200
+ if (e.#s.isSkipping || c.ended)
201
+ return e.stopVideo(a), !1;
202
+ const n = "wv fn:" + a, o = H(t, "stop", !0), s = () => {
203
+ o && e.stopVideo(a);
204
+ };
205
+ return C.beginProc(n, s, !0, s), c.addEventListener("ended", () => C.notifyEndProc(n), { once: !0, passive: !0 }), !0;
206
+ }
207
+ static stopVideo(t) {
208
+ const a = e.#t[t];
209
+ a && (delete e.#t[t], a.pause(), a.currentTime = a.duration);
210
+ }
211
+ static add_face(t) {
212
+ const { name: a } = t;
213
+ if (!a) throw "nameは必須です";
214
+ if (a in e.#c) throw "一つのname(" + a + ")に対して同じ画像を複数割り当てられません";
215
+ const { fn: c = a } = t;
216
+ return e.#c[a] = {
217
+ fn: c,
218
+ dx: V(t, "dx", 0),
219
+ dy: V(t, "dy", 0),
220
+ blendmode: Y.getBlendmodeNum(t.blendmode ?? "")
221
+ }, !1;
222
+ }
223
+ // static clearFace2Name(): void {SpritesMng.hFace = {}}
224
+ }
225
+ export {
226
+ e as S
227
+ };
228
+ //# sourceMappingURL=SpritesMng.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SpritesMng.js","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(r=> {\n\t\t\t\tres.texture = r;\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\t// URL.revokeObjectURL(r.src);\t// TODO: キャッシュ破棄\n\t\t\t});\n\t\t\tnext();\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\tURL.revokeObjectURL(r.src);\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\tthis.#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\tURL.revokeObjectURL(r2.src);\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, fnc);\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"],"names":["SpritesMng","csvFn","ctn","fncFirstComp","fncAllComp","#addChild","sp","#aSp","#csv2Sprites","isStop","#cfg","#val","#sys","#main","cfg","val","sys","main","sndMng","#cachePicMov","r","res","next","#dec2cachePicMov","#cacheAniSpr","#dec2cacheAniSpr","fnc","vol","#glbVol","#movVol","v","#hFn2hve","#evtMng","evtMng","#hFace","#hFn2ResAniSpr","csv","addChild","needLoad","Sprite","utils.TextureCache","Loader","aComp","ldr","fn0","dx","dy","blendmode","fn","BLEND_MODES","url","SEARCH_PATH_ARG_EXT","xt","LoaderResource","comp1","fncLoaded","_","hRes","#mkSprite","str","aiv","e","mes","_r","type","name","data","hve","#charmVideoElm","#sortAFrameName","aFn","a_base_name","d1","d2","is","ie","a","b","int","Texture","DebugMng","spritesheet","meta","frames","getFn","res2","next2","r2","_hRes","baseTexture","aFr","x","y","w","h","Rectangle","ras","asp","AnimatedSprite","hArg","RPN_WV","stop","argChk_Boolean","Reading","argChk_Num","Layer"],"mappings":"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"}