@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.
- package/README.md +3 -3
- package/dist/Button.js +131 -163
- package/dist/Button.js.map +1 -1
- package/dist/CallStack.js +19 -22
- package/dist/CallStack.js.map +1 -1
- package/dist/CmnInterface.js +91 -0
- package/dist/CmnInterface.js.map +1 -0
- package/dist/CmnLib.js +94 -0
- package/dist/CmnLib.js.map +1 -0
- package/dist/Config.js +26 -0
- package/dist/Config.js.map +1 -0
- package/dist/ConfigBase.js +152 -0
- package/dist/ConfigBase.js.map +1 -0
- package/dist/DebugMng.js +89 -102
- package/dist/DebugMng.js.map +1 -1
- package/dist/EventListenerCtn.js +21 -0
- package/dist/EventListenerCtn.js.map +1 -0
- package/dist/EventMng.js +1435 -1577
- package/dist/EventMng.js.map +1 -1
- package/dist/Grammar.js +194 -0
- package/dist/Grammar.js.map +1 -0
- package/dist/GrpLayer.js +163 -195
- package/dist/GrpLayer.js.map +1 -1
- package/dist/Layer.js +260 -0
- package/dist/Layer.js.map +1 -0
- package/dist/LayerMng.js +810 -991
- package/dist/LayerMng.js.map +1 -1
- package/dist/Main.js +144 -393
- package/dist/Main.js.map +1 -1
- package/dist/PropParser.js +936 -834
- package/dist/PropParser.js.map +1 -1
- package/dist/Reading.js +918 -786
- package/dist/Reading.js.map +1 -1
- package/dist/RubySpliter.js +59 -92
- package/dist/RubySpliter.js.map +1 -1
- package/dist/ScriptIterator.js +805 -1034
- package/dist/ScriptIterator.js.map +1 -1
- package/dist/SndBuf.js +1097 -1332
- package/dist/SndBuf.js.map +1 -1
- package/dist/SoundMng.js +124 -135
- package/dist/SoundMng.js.map +1 -1
- package/dist/SpritesMng.js +220 -232
- package/dist/SpritesMng.js.map +1 -1
- package/dist/SysBase.js +1729 -0
- package/dist/SysBase.js.map +1 -0
- package/dist/TxtLayer.js +1212 -1397
- package/dist/TxtLayer.js.map +1 -1
- package/dist/Variable.js +398 -466
- package/dist/Variable.js.map +1 -1
- package/dist/chunk.js +18 -0
- package/dist/gamepad.js +723 -511
- package/dist/gamepad.js.map +1 -1
- package/dist/pixi.js +13422 -0
- package/dist/pixi.js.map +1 -0
- package/dist/platform.js +424 -369
- package/dist/platform.js.map +1 -1
- package/dist/sn/AnalyzeTagArg.d.ts +1 -1
- package/dist/sn/AnalyzeTagArg.d.ts.map +1 -1
- package/dist/sn/CmnInterface.d.ts +3 -1
- package/dist/sn/CmnInterface.d.ts.map +1 -1
- package/dist/sn/CmnLib.d.ts.map +1 -1
- package/dist/sn/CmnTween.d.ts +3 -3
- package/dist/sn/CmnTween.d.ts.map +1 -1
- package/dist/sn/EventMng.d.ts.map +1 -1
- package/dist/sn/Grammar.d.ts +1 -1
- package/dist/sn/Grammar.d.ts.map +1 -1
- package/dist/sn/PropParser.d.ts +2 -2
- package/dist/sn/PropParser.d.ts.map +1 -1
- package/dist/sn/Reading.d.ts +6 -0
- package/dist/sn/Reading.d.ts.map +1 -1
- package/dist/sn/ScriptIterator.d.ts.map +1 -1
- package/dist/sn/SndBuf.d.ts +27 -16
- package/dist/sn/SndBuf.d.ts.map +1 -1
- package/dist/sn/SoundMng.d.ts +4 -1
- package/dist/sn/SoundMng.d.ts.map +1 -1
- package/dist/sn/SysBase.d.ts.map +1 -1
- package/dist/sn/TxtStage.d.ts +2 -1
- package/dist/sn/TxtStage.d.ts.map +1 -1
- package/dist/test/ValTest.d.ts +1 -1
- package/dist/test/ValTest.d.ts.map +1 -1
- package/dist/web.js +653 -8
- package/dist/web.js.map +1 -1
- package/dist_app/Button.js +131 -163
- package/dist_app/Button.js.map +1 -1
- package/dist_app/CallStack.js +19 -22
- package/dist_app/CallStack.js.map +1 -1
- package/dist_app/CmnInterface.js +91 -0
- package/dist_app/CmnInterface.js.map +1 -0
- package/dist_app/CmnLib.js +94 -0
- package/dist_app/CmnLib.js.map +1 -0
- package/dist_app/Config.js +26 -0
- package/dist_app/Config.js.map +1 -0
- package/dist_app/ConfigBase.js +152 -0
- package/dist_app/ConfigBase.js.map +1 -0
- package/dist_app/DebugMng.js +92 -0
- package/dist_app/DebugMng.js.map +1 -0
- package/dist_app/EventListenerCtn.js +21 -0
- package/dist_app/EventListenerCtn.js.map +1 -0
- package/dist_app/EventMng.js +1435 -1577
- package/dist_app/EventMng.js.map +1 -1
- package/dist_app/Grammar.js +194 -0
- package/dist_app/Grammar.js.map +1 -0
- package/dist_app/GrpLayer.js +163 -195
- package/dist_app/GrpLayer.js.map +1 -1
- package/dist_app/Layer.js +260 -0
- package/dist_app/Layer.js.map +1 -0
- package/dist_app/LayerMng.js +810 -991
- package/dist_app/LayerMng.js.map +1 -1
- package/dist_app/Main.js +144 -392
- package/dist_app/Main.js.map +1 -1
- package/dist_app/PropParser.js +936 -834
- package/dist_app/PropParser.js.map +1 -1
- package/dist_app/Reading.js +918 -786
- package/dist_app/Reading.js.map +1 -1
- package/dist_app/RubySpliter.js +59 -92
- package/dist_app/RubySpliter.js.map +1 -1
- package/dist_app/ScriptIterator.js +805 -1033
- package/dist_app/ScriptIterator.js.map +1 -1
- package/dist_app/SndBuf.js +1097 -1332
- package/dist_app/SndBuf.js.map +1 -1
- package/dist_app/SoundMng.js +124 -135
- package/dist_app/SoundMng.js.map +1 -1
- package/dist_app/SpritesMng.js +220 -231
- package/dist_app/SpritesMng.js.map +1 -1
- package/dist_app/SysBase.js +1729 -0
- package/dist_app/SysBase.js.map +1 -0
- package/dist_app/TxtLayer.js +1212 -1396
- package/dist_app/TxtLayer.js.map +1 -1
- package/dist_app/Variable.js +398 -466
- package/dist_app/Variable.js.map +1 -1
- package/dist_app/app.js +211 -8
- package/dist_app/app.js.map +1 -1
- package/dist_app/appMain.js +20 -21
- package/dist_app/appMain.js.map +1 -1
- package/dist_app/chunk.js +18 -0
- package/dist_app/gamepad.js +723 -511
- package/dist_app/gamepad.js.map +1 -1
- package/dist_app/pixi.js +11181 -0
- package/dist_app/pixi.js.map +1 -0
- package/dist_app/platform.js +424 -369
- package/dist_app/platform.js.map +1 -1
- package/dist_app/preload.js +2 -2
- package/dist_app/preload.js.map +1 -1
- package/dist_app/sn/AnalyzeTagArg.d.ts +1 -1
- package/dist_app/sn/AnalyzeTagArg.d.ts.map +1 -1
- package/dist_app/sn/CmnInterface.d.ts +3 -1
- package/dist_app/sn/CmnInterface.d.ts.map +1 -1
- package/dist_app/sn/CmnLib.d.ts.map +1 -1
- package/dist_app/sn/CmnTween.d.ts +3 -3
- package/dist_app/sn/CmnTween.d.ts.map +1 -1
- package/dist_app/sn/EventMng.d.ts.map +1 -1
- package/dist_app/sn/Grammar.d.ts +1 -1
- package/dist_app/sn/Grammar.d.ts.map +1 -1
- package/dist_app/sn/PropParser.d.ts +2 -2
- package/dist_app/sn/PropParser.d.ts.map +1 -1
- package/dist_app/sn/Reading.d.ts +6 -0
- package/dist_app/sn/Reading.d.ts.map +1 -1
- package/dist_app/sn/ScriptIterator.d.ts.map +1 -1
- package/dist_app/sn/SndBuf.d.ts +27 -16
- package/dist_app/sn/SndBuf.d.ts.map +1 -1
- package/dist_app/sn/SoundMng.d.ts +4 -1
- package/dist_app/sn/SoundMng.d.ts.map +1 -1
- package/dist_app/sn/SysBase.d.ts.map +1 -1
- package/dist_app/sn/TxtStage.d.ts +2 -1
- package/dist_app/sn/TxtStage.d.ts.map +1 -1
- package/dist_app/test/ValTest.d.ts +1 -1
- package/dist_app/test/ValTest.d.ts.map +1 -1
- package/package.json +23 -13
- package/dist/CmnTween.js +0 -1005
- package/dist/CmnTween.js.map +0 -1
- package/dist/web2.js +0 -21644
- package/dist/web2.js.map +0 -1
- package/dist_app/CmnTween.js +0 -1005
- package/dist_app/CmnTween.js.map +0 -1
- package/dist_app/app2.js +0 -18547
- package/dist_app/app2.js.map +0 -1
package/dist/SpritesMng.js
CHANGED
|
@@ -1,233 +1,221 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
if (!a) throw "nameは必須です";
|
|
219
|
-
if (a in e.#c) throw "一つのname(" + a + ")に対して同じ画像を複数割り当てられません";
|
|
220
|
-
const { fn: c = a } = t;
|
|
221
|
-
return e.#c[a] = {
|
|
222
|
-
fn: c,
|
|
223
|
-
dx: O(t, "dx", 0),
|
|
224
|
-
dy: O(t, "dy", 0),
|
|
225
|
-
blendmode: H.getBlendmodeNum(t.blendmode ?? "")
|
|
226
|
-
}, !1;
|
|
227
|
-
}
|
|
228
|
-
// static clearFace2Name(): void {SpritesMng.hFace = {}}
|
|
229
|
-
}
|
|
230
|
-
export {
|
|
231
|
-
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 Layer } from "./Layer.js";
|
|
5
|
+
import { t as DebugMng } from "./DebugMng.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
|
+
}
|
|
232
218
|
};
|
|
233
|
-
|
|
219
|
+
export { SpritesMng as t };
|
|
220
|
+
|
|
221
|
+
//# sourceMappingURL=SpritesMng.js.map
|
package/dist/SpritesMng.js.map
CHANGED
|
@@ -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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"}
|