@famibee/skynovel 1.65.0 → 2.0.0

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 (176) hide show
  1. package/README.md +3 -3
  2. package/dist/Button.js +131 -163
  3. package/dist/Button.js.map +1 -1
  4. package/dist/CallStack.js +19 -22
  5. package/dist/CallStack.js.map +1 -1
  6. package/dist/CmnInterface.js +91 -0
  7. package/dist/CmnInterface.js.map +1 -0
  8. package/dist/CmnLib.js +94 -0
  9. package/dist/CmnLib.js.map +1 -0
  10. package/dist/Config.js +26 -0
  11. package/dist/Config.js.map +1 -0
  12. package/dist/ConfigBase.js +152 -0
  13. package/dist/ConfigBase.js.map +1 -0
  14. package/dist/DebugMng.js +89 -102
  15. package/dist/DebugMng.js.map +1 -1
  16. package/dist/EventListenerCtn.js +21 -0
  17. package/dist/EventListenerCtn.js.map +1 -0
  18. package/dist/EventMng.js +1435 -1577
  19. package/dist/EventMng.js.map +1 -1
  20. package/dist/Grammar.js +194 -0
  21. package/dist/Grammar.js.map +1 -0
  22. package/dist/GrpLayer.js +163 -195
  23. package/dist/GrpLayer.js.map +1 -1
  24. package/dist/Layer.js +260 -0
  25. package/dist/Layer.js.map +1 -0
  26. package/dist/LayerMng.js +810 -991
  27. package/dist/LayerMng.js.map +1 -1
  28. package/dist/Main.js +144 -393
  29. package/dist/Main.js.map +1 -1
  30. package/dist/PropParser.js +936 -834
  31. package/dist/PropParser.js.map +1 -1
  32. package/dist/Reading.js +918 -786
  33. package/dist/Reading.js.map +1 -1
  34. package/dist/RubySpliter.js +59 -92
  35. package/dist/RubySpliter.js.map +1 -1
  36. package/dist/ScriptIterator.js +805 -1034
  37. package/dist/ScriptIterator.js.map +1 -1
  38. package/dist/SndBuf.js +1097 -1332
  39. package/dist/SndBuf.js.map +1 -1
  40. package/dist/SoundMng.js +124 -135
  41. package/dist/SoundMng.js.map +1 -1
  42. package/dist/SpritesMng.js +220 -232
  43. package/dist/SpritesMng.js.map +1 -1
  44. package/dist/SysBase.js +1729 -0
  45. package/dist/SysBase.js.map +1 -0
  46. package/dist/TxtLayer.js +1212 -1397
  47. package/dist/TxtLayer.js.map +1 -1
  48. package/dist/Variable.js +398 -466
  49. package/dist/Variable.js.map +1 -1
  50. package/dist/chunk.js +18 -0
  51. package/dist/gamepad.js +723 -511
  52. package/dist/gamepad.js.map +1 -1
  53. package/dist/pixi.js +13422 -0
  54. package/dist/pixi.js.map +1 -0
  55. package/dist/platform.js +424 -369
  56. package/dist/platform.js.map +1 -1
  57. package/dist/sn/AnalyzeTagArg.d.ts +1 -1
  58. package/dist/sn/AnalyzeTagArg.d.ts.map +1 -1
  59. package/dist/sn/CmnInterface.d.ts +3 -1
  60. package/dist/sn/CmnInterface.d.ts.map +1 -1
  61. package/dist/sn/CmnLib.d.ts.map +1 -1
  62. package/dist/sn/CmnTween.d.ts +3 -3
  63. package/dist/sn/CmnTween.d.ts.map +1 -1
  64. package/dist/sn/EventMng.d.ts.map +1 -1
  65. package/dist/sn/Grammar.d.ts +1 -1
  66. package/dist/sn/Grammar.d.ts.map +1 -1
  67. package/dist/sn/PropParser.d.ts +2 -2
  68. package/dist/sn/PropParser.d.ts.map +1 -1
  69. package/dist/sn/Reading.d.ts +6 -0
  70. package/dist/sn/Reading.d.ts.map +1 -1
  71. package/dist/sn/ScriptIterator.d.ts.map +1 -1
  72. package/dist/sn/SndBuf.d.ts +27 -16
  73. package/dist/sn/SndBuf.d.ts.map +1 -1
  74. package/dist/sn/SoundMng.d.ts +4 -1
  75. package/dist/sn/SoundMng.d.ts.map +1 -1
  76. package/dist/sn/SysBase.d.ts.map +1 -1
  77. package/dist/sn/TxtStage.d.ts +2 -1
  78. package/dist/sn/TxtStage.d.ts.map +1 -1
  79. package/dist/test/ValTest.d.ts +1 -1
  80. package/dist/test/ValTest.d.ts.map +1 -1
  81. package/dist/web.js +653 -8
  82. package/dist/web.js.map +1 -1
  83. package/dist_app/Button.js +131 -163
  84. package/dist_app/Button.js.map +1 -1
  85. package/dist_app/CallStack.js +19 -22
  86. package/dist_app/CallStack.js.map +1 -1
  87. package/dist_app/CmnInterface.js +91 -0
  88. package/dist_app/CmnInterface.js.map +1 -0
  89. package/dist_app/CmnLib.js +94 -0
  90. package/dist_app/CmnLib.js.map +1 -0
  91. package/dist_app/Config.js +26 -0
  92. package/dist_app/Config.js.map +1 -0
  93. package/dist_app/ConfigBase.js +152 -0
  94. package/dist_app/ConfigBase.js.map +1 -0
  95. package/dist_app/DebugMng.js +92 -0
  96. package/dist_app/DebugMng.js.map +1 -0
  97. package/dist_app/EventListenerCtn.js +21 -0
  98. package/dist_app/EventListenerCtn.js.map +1 -0
  99. package/dist_app/EventMng.js +1435 -1577
  100. package/dist_app/EventMng.js.map +1 -1
  101. package/dist_app/Grammar.js +194 -0
  102. package/dist_app/Grammar.js.map +1 -0
  103. package/dist_app/GrpLayer.js +163 -195
  104. package/dist_app/GrpLayer.js.map +1 -1
  105. package/dist_app/Layer.js +260 -0
  106. package/dist_app/Layer.js.map +1 -0
  107. package/dist_app/LayerMng.js +810 -991
  108. package/dist_app/LayerMng.js.map +1 -1
  109. package/dist_app/Main.js +144 -392
  110. package/dist_app/Main.js.map +1 -1
  111. package/dist_app/PropParser.js +936 -834
  112. package/dist_app/PropParser.js.map +1 -1
  113. package/dist_app/Reading.js +918 -786
  114. package/dist_app/Reading.js.map +1 -1
  115. package/dist_app/RubySpliter.js +59 -92
  116. package/dist_app/RubySpliter.js.map +1 -1
  117. package/dist_app/ScriptIterator.js +805 -1033
  118. package/dist_app/ScriptIterator.js.map +1 -1
  119. package/dist_app/SndBuf.js +1097 -1332
  120. package/dist_app/SndBuf.js.map +1 -1
  121. package/dist_app/SoundMng.js +124 -135
  122. package/dist_app/SoundMng.js.map +1 -1
  123. package/dist_app/SpritesMng.js +220 -231
  124. package/dist_app/SpritesMng.js.map +1 -1
  125. package/dist_app/SysBase.js +1729 -0
  126. package/dist_app/SysBase.js.map +1 -0
  127. package/dist_app/TxtLayer.js +1212 -1396
  128. package/dist_app/TxtLayer.js.map +1 -1
  129. package/dist_app/Variable.js +398 -466
  130. package/dist_app/Variable.js.map +1 -1
  131. package/dist_app/app.js +211 -8
  132. package/dist_app/app.js.map +1 -1
  133. package/dist_app/appMain.js +20 -21
  134. package/dist_app/appMain.js.map +1 -1
  135. package/dist_app/chunk.js +18 -0
  136. package/dist_app/gamepad.js +723 -511
  137. package/dist_app/gamepad.js.map +1 -1
  138. package/dist_app/pixi.js +11181 -0
  139. package/dist_app/pixi.js.map +1 -0
  140. package/dist_app/platform.js +424 -369
  141. package/dist_app/platform.js.map +1 -1
  142. package/dist_app/preload.js +2 -2
  143. package/dist_app/preload.js.map +1 -1
  144. package/dist_app/sn/AnalyzeTagArg.d.ts +1 -1
  145. package/dist_app/sn/AnalyzeTagArg.d.ts.map +1 -1
  146. package/dist_app/sn/CmnInterface.d.ts +3 -1
  147. package/dist_app/sn/CmnInterface.d.ts.map +1 -1
  148. package/dist_app/sn/CmnLib.d.ts.map +1 -1
  149. package/dist_app/sn/CmnTween.d.ts +3 -3
  150. package/dist_app/sn/CmnTween.d.ts.map +1 -1
  151. package/dist_app/sn/EventMng.d.ts.map +1 -1
  152. package/dist_app/sn/Grammar.d.ts +1 -1
  153. package/dist_app/sn/Grammar.d.ts.map +1 -1
  154. package/dist_app/sn/PropParser.d.ts +2 -2
  155. package/dist_app/sn/PropParser.d.ts.map +1 -1
  156. package/dist_app/sn/Reading.d.ts +6 -0
  157. package/dist_app/sn/Reading.d.ts.map +1 -1
  158. package/dist_app/sn/ScriptIterator.d.ts.map +1 -1
  159. package/dist_app/sn/SndBuf.d.ts +27 -16
  160. package/dist_app/sn/SndBuf.d.ts.map +1 -1
  161. package/dist_app/sn/SoundMng.d.ts +4 -1
  162. package/dist_app/sn/SoundMng.d.ts.map +1 -1
  163. package/dist_app/sn/SysBase.d.ts.map +1 -1
  164. package/dist_app/sn/TxtStage.d.ts +2 -1
  165. package/dist_app/sn/TxtStage.d.ts.map +1 -1
  166. package/dist_app/test/ValTest.d.ts +1 -1
  167. package/dist_app/test/ValTest.d.ts.map +1 -1
  168. package/package.json +23 -13
  169. package/dist/CmnTween.js +0 -1005
  170. package/dist/CmnTween.js.map +0 -1
  171. package/dist/web2.js +0 -21644
  172. package/dist/web2.js.map +0 -1
  173. package/dist_app/CmnTween.js +0 -1005
  174. package/dist_app/CmnTween.js.map +0 -1
  175. package/dist_app/app2.js +0 -18547
  176. package/dist_app/app2.js.map +0 -1
@@ -1,232 +1,221 @@
1
- import { U as w, L as v, V as C, S as L, m as h, i as x, y as R, D as N, b as F, N as A, B as k, x as y, e as H, z as Y, k as O } from "./app2.js";
2
- import { a as V } from "./CmnTween.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 #r;
22
- static #e;
23
- static #f;
24
- static init(t, a, c, n, o) {
25
- e.#n = t, e.#r = a, e.#e = c, e.#f = n, c.arg.crypto && (e.#l = (d, r, u) => e.#T(d, r, u), e.#h = (d, r, u) => e.#P(d, r, u));
26
- const s = () => {
27
- const d = e.#o * e.#m;
28
- for (const r of Object.values(e.#t)) r.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 w ? 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: f, blendmode: E, fn: m } = e.#c[i] ?? {
74
- fn: i,
75
- dx: 0,
76
- dy: 0,
77
- blendmode: C.NORMAL
78
- };
79
- if (s.push({ fn: m, fnc: (P) => {
80
- P.transform && (P.x = l, P.y = f, P.blendMode = E);
81
- } }), m in e.#a || m in w || m in v.shared.resources) continue;
82
- o = !0;
83
- const T = e.#n.searchPath(m, L.SP_GSM), b = this.#e.arg.crypto ? { xhrType: T.endsWith(".json") ? h.XHR_RESPONSE_TYPE.TEXT : h.XHR_RESPONSE_TYPE.BUFFER } : {};
84
- d.add({ ...b, name: m, url: T });
85
- }
86
- const r = s.at(0);
87
- r && (r.fnc = a);
88
- const u = (i, l) => {
89
- for (const { fn: f, fnc: E } of s) {
90
- const m = e.#v(f, l);
91
- m.name = f, 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((f) => e.#h(f, i, l));
99
- return;
100
- }
101
- this.#e.decAB(i.data).then((f) => e.#l(f, i, l));
102
- } catch (f) {
103
- const E = `画像/動画ロード失敗です fn:${i.name} ${String(f)}`;
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, r) => x(d.slice(o, s)) > x(r.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
- R.fromLoader(t, a.url, a.name).then((n) => {
130
- a.texture = n, a.type = h.TYPE.IMAGE, c(), URL.revokeObjectURL(t.src);
131
- });
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.#r.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((r) => R.from(r)),
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 = F(n.image), d = e.#n.searchPath(s, L.SP_GSM);
160
- new v().use((r, u) => {
161
- this.#e.decAB(r.data).then((i) => {
162
- if (r.data = i, i instanceof HTMLImageElement) {
163
- r.type = h.TYPE.IMAGE, u(), URL.revokeObjectURL(i.src);
164
- return;
165
- }
166
- u();
167
- }).catch((i) => this.#f.errScript(`画像/動画ロード失敗です dec2res4Cripto fn:${r.name} ${String(i)}`, !1));
168
- }).add({ name: s, url: d, xhrType: h.XHR_RESPONSE_TYPE.BUFFER }).load((r, u) => {
169
- for (const { data: i } of Object.values(r.resources)) {
170
- const { baseTexture: l } = R.from(i), f = Object.values(o);
171
- e.#a[a.name] = {
172
- aTex: f.map(({ frame: { x: E, y: m, w: T, h: b } }) => new R(
173
- l,
174
- new A(E, m, T, b)
175
- )),
176
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
177
- meta: n
178
- };
179
- }
180
- c();
181
- });
182
- }
183
- static #v(t, a) {
184
- const c = e.#a[t];
185
- if (c) {
186
- const s = new k(c.aTex);
187
- return s.animationSpeed = c.meta.animationSpeed ?? 1, s.play(), s;
188
- }
189
- if (t in w) return y.from(t);
190
- const n = e.#t[t];
191
- if (n) return y.from(n);
192
- const o = a[t];
193
- return o ? new y(o.texture) : new y();
194
- }
195
- static #t = {};
196
- static getHFn2VElm(t) {
197
- return e.#t[t];
198
- }
199
- static wv(t) {
200
- const { fn: a } = t;
201
- if (!a) throw "fnは必須です";
202
- const c = e.#t[a];
203
- if (!c || c.loop) return !1;
204
- if (e.#s.isSkipping || c.ended)
205
- return e.stopVideo(a), !1;
206
- const n = "wv fn:" + a, o = H(t, "stop", !0), s = () => {
207
- o && e.stopVideo(a);
208
- };
209
- return V.beginProc(n, s, !0, s), c.addEventListener("ended", () => V.notifyEndProc(n), { once: !0, passive: !0 }), !0;
210
- }
211
- static stopVideo(t) {
212
- const a = e.#t[t];
213
- a && (delete e.#t[t], a.pause(), a.currentTime = a.duration);
214
- }
215
- static add_face(t) {
216
- const { name: a } = t;
217
- if (!a) throw "nameは必須です";
218
- if (a in e.#c) throw "一つのname(" + a + ")に対して同じ画像を複数割り当てられません";
219
- const { fn: c = a } = t;
220
- return e.#c[a] = {
221
- fn: c,
222
- dx: O(t, "dx", 0),
223
- dy: O(t, "dy", 0),
224
- blendmode: Y.getBlendmodeNum(t.blendmode ?? "")
225
- }, !1;
226
- }
227
- // static clearFace2Name(): void {SpritesMng.hFace = {}}
228
- }
229
- export {
230
- e as S
1
+ import { d as getFn, l as argChk_Num, p as int, s as argChk_Boolean } from "./CmnLib.js";
2
+ import { b as BLEND_MODES, c as Loader, f as Texture, g as TextureCache, h as Rectangle, l as LoaderResource, n as AnimatedSprite, o as Sprite } from "./pixi.js";
3
+ import { n as SEARCH_PATH_ARG_EXT } from "./ConfigBase.js";
4
+ import { t as DebugMng } from "./DebugMng.js";
5
+ import { t as Layer } from "./Layer.js";
6
+ import { t as Reading } from "./Reading.js";
7
+ var SpritesMng = class g {
8
+ static #e;
9
+ static #t;
10
+ static #n;
11
+ static #r;
12
+ static init(e, i, a, o, s) {
13
+ g.#e = e, g.#t = i, g.#n = a, g.#r = o, a.arg.crypto && (g.#f = (e, i, a) => g.#m(e, i, a), g.#g = (e, i, a) => g.#_(e, i, a));
14
+ let c = () => {
15
+ let e = g.#a * g.#i;
16
+ for (let i of Object.values(g.#y)) i.volume = e;
17
+ };
18
+ s.setNoticeChgVolume((e) => {
19
+ g.#a = e, c();
20
+ }, (e) => {
21
+ g.#i = e, c();
22
+ });
23
+ }
24
+ static #i = 1;
25
+ static #a = 1;
26
+ static #o;
27
+ static setEvtMng(e) {
28
+ g.#o = e;
29
+ }
30
+ constructor(e = "", i, a = () => {}, o = () => {}) {
31
+ this.csvFn = e, this.ctn = i, this.fncFirstComp = a, this.fncAllComp = o, e && (this.#s = i ? (e) => {
32
+ i.addChild(e), this.#c.push(e);
33
+ } : () => {}, this.ret = g.#l(e, (e) => this.fncFirstComp(e), (e) => this.fncAllComp(e), (e) => this.#s(e)));
34
+ }
35
+ ret = !1;
36
+ #s;
37
+ #c = [];
38
+ destroy() {
39
+ this.fncFirstComp = () => {}, this.fncAllComp = () => {}, this.#s = (e) => e.destroy();
40
+ for (let e of this.#c) g.stopVideo(e.name), e.parent?.removeChild(e), e.destroy();
41
+ this.#c = [];
42
+ }
43
+ static destroy() {
44
+ g.#u = {}, g.#d = {}, g.#y = {};
45
+ }
46
+ static #l(e, i, a, o) {
47
+ if (!e) return !1;
48
+ let l = !1;
49
+ if (e.startsWith("data:")) {
50
+ let s = () => {
51
+ let s = Sprite.from(e);
52
+ o(s), i(s), a(l);
53
+ };
54
+ return e in TextureCache ? s() : (l = !0, new Loader().add(e, e).load(s)), l;
55
+ }
56
+ let d = [], f = new Loader();
57
+ for (let i of e.split(",")) {
58
+ if (!i) throw "face属性に空要素が含まれます";
59
+ let { dx: e, dy: a, blendmode: o, fn: p } = g.#u[i] ?? {
60
+ fn: i,
61
+ dx: 0,
62
+ dy: 0,
63
+ blendmode: BLEND_MODES.NORMAL
64
+ };
65
+ if (d.push({
66
+ fn: p,
67
+ fnc: (i) => {
68
+ i.transform && (i.x = e, i.y = a, i.blendMode = o);
69
+ }
70
+ }), p in g.#d || p in TextureCache || p in Loader.shared.resources) continue;
71
+ l = !0;
72
+ let m = g.#e.searchPath(p, SEARCH_PATH_ARG_EXT.SP_GSM), h = this.#n.arg.crypto ? { xhrType: m.endsWith(".json") ? LoaderResource.XHR_RESPONSE_TYPE.TEXT : LoaderResource.XHR_RESPONSE_TYPE.BUFFER } : {};
73
+ f.add({
74
+ ...h,
75
+ name: p,
76
+ url: m
77
+ });
78
+ }
79
+ let m = d.at(0);
80
+ m && (m.fnc = i);
81
+ let h = (e, i) => {
82
+ for (let { fn: e, fnc: a } of d) {
83
+ let s = g.#v(e, i);
84
+ s.name = e, o(s), a(s);
85
+ }
86
+ a(l);
87
+ };
88
+ return l ? f.use((e, i) => {
89
+ try {
90
+ if (e.extension === "json") {
91
+ this.#n.dec("json", e.data).then((a) => g.#g(a, e, i));
92
+ return;
93
+ }
94
+ this.#n.decAB(e.data).then((a) => g.#f(a, e, i));
95
+ } catch (i) {
96
+ let a = `画像/動画ロード失敗です fn:${e.name} ${String(i)}`;
97
+ g.#o.isSkipping ? console.warn(a) : console.error("%c" + a, "color:#FF3300;");
98
+ }
99
+ }).load(h) : queueMicrotask(() => h(0, {})), l;
100
+ }
101
+ static #u = {};
102
+ static #d = {};
103
+ static #f = (e, { type: i, name: a, data: o }, s) => {
104
+ switch (i) {
105
+ case LoaderResource.TYPE.VIDEO: {
106
+ let e = o;
107
+ e.volume = g.#a, g.#y[a] = g.#h(e);
108
+ }
109
+ }
110
+ s();
111
+ };
112
+ static #p(e) {
113
+ let i = /([^\d]+)\d+\.(\w+)/.exec(e[0] ?? "");
114
+ if (!i) return [];
115
+ let [, o = "", s = ""] = i, c = o.length, l = -s.length - 1;
116
+ return e.sort((e, i) => int(e.slice(c, l)) > int(i.slice(c, l)) ? 1 : -1);
117
+ }
118
+ static #m(e, i, a) {
119
+ if (i.data = e, i.extension !== "bin" && a(), e instanceof HTMLImageElement) {
120
+ Texture.fromLoader(e, i.url, i.name).then((o) => {
121
+ i.texture = o, i.type = LoaderResource.TYPE.IMAGE, a(), URL.revokeObjectURL(e.src);
122
+ });
123
+ return;
124
+ }
125
+ e instanceof HTMLVideoElement && (e.volume = g.#a, g.#y[i.name] = g.#h(e), i.type = LoaderResource.TYPE.VIDEO), a();
126
+ }
127
+ static #h(e) {
128
+ return g.#t.getVal("const.sn.needClick2Play") && (DebugMng.trace_beforeNew(`[lay系] ${DebugMng.strPos()}未クリック状態で動画を自動再生します。音声はミュートされます`, "W"), e.muted = !0), e.setAttribute("playsinline", ""), e;
129
+ }
130
+ static #g = (e, { type: i, spritesheet: a, name: o, data: s }, c) => {
131
+ switch (i) {
132
+ case LoaderResource.TYPE.JSON: {
133
+ let e = a._frameKeys;
134
+ g.#p(e), g.#d[o] = {
135
+ aTex: e.map((e) => Texture.from(e)),
136
+ meta: s.meta
137
+ };
138
+ }
139
+ }
140
+ c();
141
+ };
142
+ static #_(i, a, o) {
143
+ let { meta: s, frames: u } = a.data = JSON.parse(i);
144
+ if (a.type = LoaderResource.TYPE.JSON, !s?.image) {
145
+ o();
146
+ return;
147
+ }
148
+ let f = getFn(s.image), p = g.#e.searchPath(f, SEARCH_PATH_ARG_EXT.SP_GSM);
149
+ new Loader().use((e, i) => {
150
+ this.#n.decAB(e.data).then((a) => {
151
+ if (e.data = a, a instanceof HTMLImageElement) {
152
+ e.type = LoaderResource.TYPE.IMAGE, i(), URL.revokeObjectURL(a.src);
153
+ return;
154
+ }
155
+ i();
156
+ }).catch((i) => this.#r.errScript(`画像/動画ロード失敗です dec2res4Cripto fn:${e.name} ${String(i)}`, !1));
157
+ }).add({
158
+ name: f,
159
+ url: p,
160
+ xhrType: LoaderResource.XHR_RESPONSE_TYPE.BUFFER
161
+ }).load((e, i) => {
162
+ for (let { data: i } of Object.values(e.resources)) {
163
+ let { baseTexture: e } = Texture.from(i), o = Object.values(u);
164
+ g.#d[a.name] = {
165
+ aTex: o.map(({ frame: { x: i, y: a, w: o, h: s } }) => new Texture(e, new Rectangle(i, a, o, s))),
166
+ meta: s
167
+ };
168
+ }
169
+ o();
170
+ });
171
+ }
172
+ static #v(e, i) {
173
+ let a = g.#d[e];
174
+ if (a) {
175
+ let e = new AnimatedSprite(a.aTex);
176
+ return e.animationSpeed = a.meta.animationSpeed ?? 1, e.play(), e;
177
+ }
178
+ if (e in TextureCache) return Sprite.from(e);
179
+ let o = g.#y[e];
180
+ if (o) return Sprite.from(o);
181
+ let s = i[e];
182
+ return s ? new Sprite(s.texture) : new Sprite();
183
+ }
184
+ static #y = {};
185
+ static getHFn2VElm(e) {
186
+ return g.#y[e];
187
+ }
188
+ static wv(e) {
189
+ let { fn: i } = e;
190
+ if (!i) throw "fnは必須です";
191
+ let a = g.#y[i];
192
+ if (!a || a.loop) return !1;
193
+ if (g.#o.isSkipping || a.ended) return g.stopVideo(i), !1;
194
+ let s = "wv fn:" + i, c = argChk_Boolean(e, "stop", !0), l = () => {
195
+ c && g.stopVideo(i);
196
+ };
197
+ return Reading.beginProc(s, l, !0, argChk_Boolean(e, "canskip", !0) ? l : void 0), a.addEventListener("ended", () => Reading.notifyEndProc(s), {
198
+ once: !0,
199
+ passive: !0
200
+ }), !0;
201
+ }
202
+ static stopVideo(e) {
203
+ let i = g.#y[e];
204
+ i && (delete g.#y[e], i.pause(), i.currentTime = i.duration);
205
+ }
206
+ static add_face(e) {
207
+ let { name: a } = e;
208
+ if (!a) throw "nameは必須です";
209
+ if (a in g.#u) throw "一つのname(" + a + ")に対して同じ画像を複数割り当てられません";
210
+ let { fn: o = a } = e;
211
+ return g.#u[a] = {
212
+ fn: o,
213
+ dx: argChk_Num(e, "dx", 0),
214
+ dy: argChk_Num(e, "dy", 0),
215
+ blendmode: Layer.getBlendmodeNum(e.blendmode ?? "")
216
+ }, !1;
217
+ }
231
218
  };
232
- //# sourceMappingURL=SpritesMng.js.map
219
+ export { SpritesMng as t };
220
+
221
+ //# sourceMappingURL=SpritesMng.js.map
@@ -1 +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(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, 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","r2","DebugMng","spritesheet","meta","frames","getFn","res2","next2","_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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"}
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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"}