@rpgjs/client 5.0.0-alpha.21 → 5.0.0-alpha.23

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 (135) hide show
  1. package/dist/Game/Object.d.ts +111 -0
  2. package/dist/Game/TransitionManager.d.ts +56 -0
  3. package/dist/RpgClientEngine.d.ts +306 -9
  4. package/dist/components/gui/mobile/index.d.ts +8 -0
  5. package/dist/components/prebuilt/index.d.ts +1 -0
  6. package/dist/index.d.ts +7 -1
  7. package/dist/index.js +14 -8
  8. package/dist/index.js.map +1 -1
  9. package/dist/index10.js +1 -1
  10. package/dist/index11.js +6 -5
  11. package/dist/index11.js.map +1 -1
  12. package/dist/index12.js +2 -2
  13. package/dist/index13.js +102 -10
  14. package/dist/index13.js.map +1 -1
  15. package/dist/index14.js +68 -9
  16. package/dist/index14.js.map +1 -1
  17. package/dist/index15.js +10 -224
  18. package/dist/index15.js.map +1 -1
  19. package/dist/index16.js +9 -97
  20. package/dist/index16.js.map +1 -1
  21. package/dist/index17.js +300 -89
  22. package/dist/index17.js.map +1 -1
  23. package/dist/index18.js +63 -80
  24. package/dist/index18.js.map +1 -1
  25. package/dist/index19.js +96 -348
  26. package/dist/index19.js.map +1 -1
  27. package/dist/index2.js +387 -21
  28. package/dist/index2.js.map +1 -1
  29. package/dist/index20.js +361 -5
  30. package/dist/index20.js.map +1 -1
  31. package/dist/index21.js +19 -50
  32. package/dist/index21.js.map +1 -1
  33. package/dist/index22.js +212 -5
  34. package/dist/index22.js.map +1 -1
  35. package/dist/index23.js +6 -395
  36. package/dist/index23.js.map +1 -1
  37. package/dist/index24.js +4 -39
  38. package/dist/index24.js.map +1 -1
  39. package/dist/index25.js +19 -20
  40. package/dist/index25.js.map +1 -1
  41. package/dist/index26.js +44 -2624
  42. package/dist/index26.js.map +1 -1
  43. package/dist/index27.js +5 -110
  44. package/dist/index27.js.map +1 -1
  45. package/dist/index28.js +394 -65
  46. package/dist/index28.js.map +1 -1
  47. package/dist/index29.js +40 -15
  48. package/dist/index29.js.map +1 -1
  49. package/dist/index3.js +3 -3
  50. package/dist/index30.js +21 -23
  51. package/dist/index30.js.map +1 -1
  52. package/dist/index31.js +49 -91
  53. package/dist/index31.js.map +1 -1
  54. package/dist/index32.js +2624 -32
  55. package/dist/index32.js.map +1 -1
  56. package/dist/index33.js +108 -18
  57. package/dist/index33.js.map +1 -1
  58. package/dist/index34.js +69 -3
  59. package/dist/index34.js.map +1 -1
  60. package/dist/index35.js +17 -331
  61. package/dist/index35.js.map +1 -1
  62. package/dist/index36.js +24 -24
  63. package/dist/index36.js.map +1 -1
  64. package/dist/index37.js +92 -8
  65. package/dist/index37.js.map +1 -1
  66. package/dist/index38.js +37 -7
  67. package/dist/index38.js.map +1 -1
  68. package/dist/index39.js +22 -10
  69. package/dist/index39.js.map +1 -1
  70. package/dist/index4.js +3 -3
  71. package/dist/index40.js +140 -6
  72. package/dist/index40.js.map +1 -1
  73. package/dist/index41.js +31 -3678
  74. package/dist/index41.js.map +1 -1
  75. package/dist/index42.js +3 -185
  76. package/dist/index42.js.map +1 -1
  77. package/dist/index43.js +172 -489
  78. package/dist/index43.js.map +1 -1
  79. package/dist/index44.js +498 -71
  80. package/dist/index44.js.map +1 -1
  81. package/dist/index45.js +331 -2
  82. package/dist/index45.js.map +1 -1
  83. package/dist/index46.js +25 -11
  84. package/dist/index46.js.map +1 -1
  85. package/dist/index47.js +70 -139
  86. package/dist/index47.js.map +1 -1
  87. package/dist/index48.js +9 -9
  88. package/dist/index48.js.map +1 -1
  89. package/dist/index49.js +6 -112
  90. package/dist/index49.js.map +1 -1
  91. package/dist/index5.js +1 -1
  92. package/dist/index50.js +3678 -124
  93. package/dist/index50.js.map +1 -1
  94. package/dist/index51.js +48 -131
  95. package/dist/index51.js.map +1 -1
  96. package/dist/index52.js +17 -109
  97. package/dist/index52.js.map +1 -1
  98. package/dist/index53.js +3 -138
  99. package/dist/index53.js.map +1 -1
  100. package/dist/index54.js +10 -7
  101. package/dist/index54.js.map +1 -1
  102. package/dist/index55.js +107 -48
  103. package/dist/index55.js.map +1 -1
  104. package/dist/index56.js +136 -0
  105. package/dist/index56.js.map +1 -0
  106. package/dist/index57.js +137 -0
  107. package/dist/index57.js.map +1 -0
  108. package/dist/index58.js +112 -0
  109. package/dist/index58.js.map +1 -0
  110. package/dist/index59.js +9 -0
  111. package/dist/index59.js.map +1 -0
  112. package/dist/index6.js +1 -1
  113. package/dist/index7.js +1 -1
  114. package/dist/index8.js +20 -2
  115. package/dist/index8.js.map +1 -1
  116. package/dist/index9.js +11 -27
  117. package/dist/index9.js.map +1 -1
  118. package/dist/module.d.ts +43 -4
  119. package/dist/services/keyboardControls.d.ts +11 -1
  120. package/package.json +11 -10
  121. package/src/Game/Object.ts +90 -8
  122. package/src/Game/TransitionManager.ts +75 -0
  123. package/src/Gui/Gui.ts +5 -31
  124. package/src/RpgClientEngine.ts +430 -16
  125. package/src/components/character.ce +212 -11
  126. package/src/components/gui/mobile/index.ts +24 -0
  127. package/src/components/gui/mobile/mobile.ce +95 -0
  128. package/src/components/prebuilt/index.ts +2 -0
  129. package/src/components/prebuilt/light-halo.ce +217 -0
  130. package/src/components/scenes/canvas.ce +12 -2
  131. package/src/components/scenes/draw-map.ce +12 -3
  132. package/src/components/scenes/transition.ce +60 -0
  133. package/src/index.ts +7 -1
  134. package/src/module.ts +66 -2
  135. package/src/services/keyboardControls.ts +14 -2
package/dist/index19.js CHANGED
@@ -1,366 +1,114 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
- // src/inject.ts
5
- var DEFAULT_INSTANCE_KEY = "__default__";
6
- function toTokenName(token) {
7
- return typeof token === "function" ? token.name : token;
8
- }
9
- __name(toTokenName, "toTokenName");
10
- function toInstanceKey(name) {
11
- return name ?? DEFAULT_INSTANCE_KEY;
12
- }
13
- __name(toInstanceKey, "toInstanceKey");
14
- function getRecord(context, token) {
15
- return context.get("inject:" + toTokenName(token));
16
- }
17
- __name(getRecord, "getRecord");
18
- function ensureRecord(context, token) {
19
- const key = "inject:" + toTokenName(token);
20
- let record = context.get(key);
21
- if (!record) {
22
- record = {
23
- multi: false,
24
- values: /* @__PURE__ */ new Map(),
25
- injected: /* @__PURE__ */ new Set()
26
- };
27
- }
28
- context.set(key, record);
29
- return record;
30
- }
31
- __name(ensureRecord, "ensureRecord");
32
- function provide(context, token, value, options = {}) {
33
- const record = ensureRecord(context, token);
34
- const instanceKey = toInstanceKey(options.name);
35
- if (options.multi) {
36
- record.multi = true;
37
- }
38
- if (!record.multi && instanceKey !== DEFAULT_INSTANCE_KEY) {
39
- record.multi = true;
40
- }
41
- record.values.set(instanceKey, value);
42
- return value;
43
- }
44
- __name(provide, "provide");
45
- function isInjected(context, token, options = {}) {
46
- const record = getRecord(context, token);
47
- if (!record) {
48
- return false;
49
- }
50
- if (options.name) {
51
- return record.injected.has(toInstanceKey(options.name));
52
- }
53
- if (record.multi) {
54
- return record.injected.size > 0;
55
- }
56
- return record.injected.has(DEFAULT_INSTANCE_KEY);
57
- }
58
- __name(isInjected, "isInjected");
59
- function isProvided(context, token, options = {}) {
60
- const record = getRecord(context, token);
61
- if (!record) {
62
- return false;
63
- }
64
- if (options.name) {
65
- return record.values.has(toInstanceKey(options.name));
66
- }
67
- if (record.multi) {
68
- return record.values.size > 0;
69
- }
70
- return record.values.has(DEFAULT_INSTANCE_KEY);
71
- }
72
- __name(isProvided, "isProvided");
73
- function hasInstance(context, token, options = {}) {
74
- return isProvided(context, token, options);
75
- }
76
- __name(hasInstance, "hasInstance");
77
- function handleMissingInjection(token, options) {
78
- const name = toTokenName(token);
79
- if (options.name) {
80
- throw new Error(`Injection provider ${name} with name ${options.name} not found`);
81
- }
82
- throw new Error(`Injection provider ${name} not found`);
83
- }
84
- __name(handleMissingInjection, "handleMissingInjection");
85
- function markInjected(record, key) {
86
- record.injected.add(key);
87
- }
88
- __name(markInjected, "markInjected");
89
- function markAllInjected(record) {
90
- for (const key of record.values.keys()) {
91
- record.injected.add(key);
92
- }
93
- }
94
- __name(markAllInjected, "markAllInjected");
95
- function inject(context, token, options = {}) {
96
- const record = getRecord(context, token);
97
- if (!record) {
98
- if (options.optional) {
99
- return options.multi ? [] : void 0;
100
- }
101
- return handleMissingInjection(token, options);
102
- }
103
- if (options.name) {
104
- const instanceKey = toInstanceKey(options.name);
105
- if (!record.values.has(instanceKey)) {
106
- if (options.optional) {
107
- return void 0;
108
- }
109
- return handleMissingInjection(token, options);
110
- }
111
- const value2 = record.values.get(instanceKey);
112
- markInjected(record, instanceKey);
113
- return value2;
114
- }
115
- if (options.multi || record.multi) {
116
- if (record.values.size === 0) {
117
- if (options.optional) {
118
- return [];
119
- }
120
- return handleMissingInjection(token, options);
121
- }
122
- markAllInjected(record);
123
- return Array.from(record.values.values());
124
- }
125
- const value = record.values.get(DEFAULT_INSTANCE_KEY);
126
- if (value === void 0) {
127
- if (options.optional) {
128
- return void 0;
129
- }
130
- return handleMissingInjection(token, options);
131
- }
132
- markInjected(record, DEFAULT_INSTANCE_KEY);
133
- return value;
134
- }
135
- __name(inject, "inject");
136
- function override(providers, newProvider, options) {
137
- let { upsert = false, key } = options ?? {};
138
- if (!key) {
139
- key = typeof newProvider === "function" ? newProvider.name : newProvider.provide;
1
+ class RpgResource {
2
+ static {
3
+ this.engine = null;
140
4
  }
141
- const flatProviders = providers.flat();
142
- const exists = flatProviders.some((provider) => {
143
- if (typeof provider === "function") {
144
- return provider.name === key;
145
- } else if (typeof provider === "object") {
146
- return provider.provide === key;
147
- }
148
- return false;
149
- });
150
- const mappedProviders = flatProviders.map((provider) => {
151
- if (typeof provider === "function" && provider.name === key) {
152
- return newProvider;
153
- } else if (typeof provider === "object" && provider.provide === key) {
154
- return newProvider;
155
- }
156
- return provider;
157
- });
158
- if (upsert && !exists) {
159
- mappedProviders.push(newProvider);
5
+ static {
6
+ this._spritesheets = /* @__PURE__ */ new Map();
160
7
  }
161
- return mappedProviders;
162
- }
163
- __name(override, "override");
164
- function findProviders(providers, name) {
165
- const results = [];
166
- for (const provider of providers) {
167
- if (Array.isArray(provider)) {
168
- results.push(...findProviders(provider, name));
169
- } else if (findProvider(provider, name)) {
170
- results.push(provider);
171
- }
8
+ static {
9
+ this._sounds = /* @__PURE__ */ new Map();
172
10
  }
173
- return results;
174
- }
175
- __name(findProviders, "findProviders");
176
- function findProvider(providers, name) {
177
- if (!Array.isArray(providers)) {
178
- if (typeof providers === "object" && "provide" in providers) {
179
- const provider = providers;
180
- const providerName = typeof provider.provide === "function" ? provider.provide.name : provider.provide;
181
- if (name instanceof RegExp) {
182
- if (name.test(providerName)) return providers;
183
- } else {
184
- if (providerName === name) return providers;
185
- }
186
- }
187
- return null;
11
+ /**
12
+ * Initialize RpgResource with the engine instance
13
+ *
14
+ * This is called automatically by the engine during initialization.
15
+ * It synchronizes the resource Maps with the engine's internal storage.
16
+ *
17
+ * @param engine - The RpgClientEngine instance
18
+ */
19
+ static init(engine) {
20
+ RpgResource.engine = engine;
21
+ RpgResource.syncResources();
188
22
  }
189
- for (const provider of providers) {
190
- if (Array.isArray(provider)) {
191
- const found = findProvider(provider, name);
192
- if (found) return found;
193
- continue;
23
+ /**
24
+ * Synchronize resource Maps with the engine's internal storage
25
+ *
26
+ * Extracts file links from spritesheets and sounds stored in the engine
27
+ * and updates the Maps accordingly.
28
+ *
29
+ * @private
30
+ */
31
+ static syncResources() {
32
+ if (!RpgResource.engine) {
33
+ return;
194
34
  }
195
- if (typeof provider === "object" && "provide" in provider) {
196
- const providerName = typeof provider.provide === "function" ? provider.provide.name : provider.provide;
197
- if (name instanceof RegExp) {
198
- if (name.test(providerName)) return provider;
199
- } else {
200
- if (providerName === name) return provider;
35
+ RpgResource._spritesheets.clear();
36
+ RpgResource.engine.spritesheets.forEach((spritesheet, id) => {
37
+ const imageLink = spritesheet?.image || spritesheet?.imageSource || void 0;
38
+ if (imageLink) {
39
+ RpgResource._spritesheets.set(id, imageLink);
201
40
  }
202
- }
203
- }
204
- return null;
205
- }
206
- __name(findProvider, "findProvider");
207
-
208
- // src/merge-config.ts
209
- function processProvider(mergedConfig, baseConfig, provider) {
210
- if (Array.isArray(provider)) {
211
- for (const nestedProvider of provider) {
212
- processProvider(mergedConfig, baseConfig, nestedProvider);
213
- }
214
- return;
215
- }
216
- const existingProvider = findProvider(baseConfig.providers, provider.provide);
217
- if (existingProvider) {
218
- mergedConfig.providers = override(mergedConfig.providers, provider);
219
- } else {
220
- mergedConfig.providers.push(provider);
221
- }
222
- }
223
- __name(processProvider, "processProvider");
224
- function mergeConfig(baseConfig, config) {
225
- const mergedConfig = {
226
- ...baseConfig,
227
- ...config,
228
- providers: [
229
- ...baseConfig.providers
230
- ]
231
- // Start with a copy of base providers
232
- };
233
- for (const provider of config.providers) {
234
- processProvider(mergedConfig, baseConfig, provider);
235
- }
236
- return mergedConfig;
237
- }
238
- __name(mergeConfig, "mergeConfig");
239
-
240
- // src/provider.ts
241
- function extractProvideOptions(source) {
242
- if (!source) {
243
- return void 0;
244
- }
245
- const { multi, name } = source;
246
- if (multi === void 0 && name === void 0) {
247
- return void 0;
248
- }
249
- return {
250
- multi,
251
- name
252
- };
253
- }
254
- __name(extractProvideOptions, "extractProvideOptions");
255
- function getDeps(provider) {
256
- if (typeof provider === "function") {
257
- return provider.deps ?? [];
258
- }
259
- return provider.deps ?? [];
260
- }
261
- __name(getDeps, "getDeps");
262
- function sortProviders(providers) {
263
- const tokenName = /* @__PURE__ */ __name((t) => typeof t === "function" ? t.name : t, "tokenName");
264
- const map = /* @__PURE__ */ new Map();
265
- for (const p of providers) {
266
- const token = tokenName(typeof p === "function" ? p : p.provide);
267
- const list = map.get(token);
268
- if (list) {
269
- list.push(p);
270
- } else {
271
- map.set(token, [
272
- p
273
- ]);
274
- }
275
- }
276
- const result = [];
277
- const visited = /* @__PURE__ */ new Set();
278
- const stack = /* @__PURE__ */ new Set();
279
- const visit = /* @__PURE__ */ __name((token) => {
280
- const name = tokenName(token);
281
- if (visited.has(name)) return;
282
- if (stack.has(name)) {
283
- throw new Error(`Circular dependency detected for provider ${name}`);
284
- }
285
- stack.add(name);
286
- const providersForToken = map.get(name);
287
- if (providersForToken) {
288
- for (const provider of providersForToken) {
289
- for (const dep of getDeps(provider)) {
290
- visit(dep);
41
+ });
42
+ RpgResource._sounds.clear();
43
+ RpgResource.engine.sounds.forEach((sound, id) => {
44
+ let soundLink;
45
+ if (sound && typeof sound === "object") {
46
+ if (sound._src && Array.isArray(sound._src) && sound._src.length > 0) {
47
+ soundLink = sound._src[0];
48
+ } else if (sound.src && typeof sound.src === "string") {
49
+ soundLink = sound.src;
50
+ } else if (sound.src && Array.isArray(sound.src) && sound.src.length > 0) {
51
+ soundLink = sound.src[0];
291
52
  }
292
- result.push(provider);
293
53
  }
294
- visited.add(name);
295
- }
296
- stack.delete(name);
297
- }, "visit");
298
- for (const p of providers) {
299
- const token = typeof p === "function" ? p : p.provide;
300
- visit(token);
301
- }
302
- return result;
303
- }
304
- __name(sortProviders, "sortProviders");
305
- async function injector(context, providers) {
306
- providers = providers.flat();
307
- providers = sortProviders(providers);
308
- for (const provider of providers) {
309
- let token;
310
- let instance;
311
- let options;
312
- if (typeof provider === "function") {
313
- token = provider;
314
- instance = new provider(context);
315
- const diOptions = extractProvideOptions(provider.diOptions ?? provider.di);
316
- options = diOptions;
317
- } else {
318
- token = provider.provide;
319
- options = extractProvideOptions(provider);
320
- const provideUserClass = provider.useClass;
321
- const isClass = typeof provideUserClass === "function";
322
- if (isClass) {
323
- instance = new provideUserClass(context);
324
- } else if ("useValue" in provider) {
325
- instance = provider.useValue;
326
- } else if ("useFactory" in provider) {
327
- instance = provider.useFactory?.(context);
328
- if (instance instanceof Promise) {
329
- instance = await instance;
330
- }
331
- } else if ("useExisting" in provider) {
332
- instance = inject(context, provider.useExisting);
54
+ if (soundLink) {
55
+ RpgResource._sounds.set(id, soundLink);
333
56
  }
334
- }
335
- provide(context, token, instance, options);
57
+ });
336
58
  }
337
- }
338
- __name(injector, "injector");
339
-
340
- // src/context.ts
341
- var Context = class {
342
- static {
343
- __name(this, "Context");
344
- }
345
- /** Internal storage for injected values */
346
- values = {};
347
59
  /**
348
- * Sets a value in the context
349
- * @param key - Unique identifier for the value
350
- * @param value - Value to store
60
+ * Get/Set image links for spritesheets
61
+ *
62
+ * Map of spritesheet IDs to their image file paths/URLs.
63
+ * This Map is synchronized with the engine's spritesheet storage.
64
+ *
65
+ * @type {Map<string, string>}
66
+ *
67
+ * @example
68
+ * ```ts
69
+ * // Get an image link
70
+ * const imageLink = RpgResource.spritesheets.get('hero')
71
+ *
72
+ * // Set a new image link
73
+ * RpgResource.spritesheets.set('new-sprite', './assets/new-sprite.png')
74
+ *
75
+ * // Check if a spritesheet exists
76
+ * if (RpgResource.spritesheets.has('monster')) {
77
+ * const link = RpgResource.spritesheets.get('monster')
78
+ * }
79
+ * ```
351
80
  */
352
- set(key, value) {
353
- this.values[key] = value;
81
+ static get spritesheets() {
82
+ RpgResource.syncResources();
83
+ return RpgResource._spritesheets;
354
84
  }
355
85
  /**
356
- * Retrieves a value from the context
357
- * @param key - Unique identifier for the value
358
- * @returns The stored value or undefined if not found
86
+ * Get/Set sound file links
87
+ *
88
+ * Map of sound IDs to their audio file paths/URLs.
89
+ * This Map is synchronized with the engine's sound storage.
90
+ *
91
+ * @type {Map<string, string>}
92
+ *
93
+ * @example
94
+ * ```ts
95
+ * // Get a sound link
96
+ * const soundLink = RpgResource.sounds.get('town-music')
97
+ *
98
+ * // Set a new sound link
99
+ * RpgResource.sounds.set('new-sound', './assets/new-sound.ogg')
100
+ *
101
+ * // Iterate over all sounds
102
+ * RpgResource.sounds.forEach((link, id) => {
103
+ * console.log(`Sound ${id}: ${link}`)
104
+ * })
105
+ * ```
359
106
  */
360
- get(key) {
361
- return this.values[key];
107
+ static get sounds() {
108
+ RpgResource.syncResources();
109
+ return RpgResource._sounds;
362
110
  }
363
- };
111
+ }
364
112
 
365
- export { Context, findProvider, findProviders, hasInstance, inject, injector, isInjected, isProvided, mergeConfig, override, provide };
113
+ export { RpgResource };
366
114
  //# sourceMappingURL=index19.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index19.js","sources":["../../../node_modules/.pnpm/@signe+di@2.5.1/node_modules/@signe/di/dist/index.js"],"sourcesContent":["var __defProp = Object.defineProperty;\nvar __name = (target, value) => __defProp(target, \"name\", { value, configurable: true });\n\n// src/inject.ts\nvar DEFAULT_INSTANCE_KEY = \"__default__\";\nfunction toTokenName(token) {\n return typeof token === \"function\" ? token.name : token;\n}\n__name(toTokenName, \"toTokenName\");\nfunction toInstanceKey(name) {\n return name ?? DEFAULT_INSTANCE_KEY;\n}\n__name(toInstanceKey, \"toInstanceKey\");\nfunction getRecord(context, token) {\n return context.get(\"inject:\" + toTokenName(token));\n}\n__name(getRecord, \"getRecord\");\nfunction ensureRecord(context, token) {\n const key = \"inject:\" + toTokenName(token);\n let record = context.get(key);\n if (!record) {\n record = {\n multi: false,\n values: /* @__PURE__ */ new Map(),\n injected: /* @__PURE__ */ new Set()\n };\n }\n context.set(key, record);\n return record;\n}\n__name(ensureRecord, \"ensureRecord\");\nfunction provide(context, token, value, options = {}) {\n const record = ensureRecord(context, token);\n const instanceKey = toInstanceKey(options.name);\n if (options.multi) {\n record.multi = true;\n }\n if (!record.multi && instanceKey !== DEFAULT_INSTANCE_KEY) {\n record.multi = true;\n }\n record.values.set(instanceKey, value);\n return value;\n}\n__name(provide, \"provide\");\nfunction isInjected(context, token, options = {}) {\n const record = getRecord(context, token);\n if (!record) {\n return false;\n }\n if (options.name) {\n return record.injected.has(toInstanceKey(options.name));\n }\n if (record.multi) {\n return record.injected.size > 0;\n }\n return record.injected.has(DEFAULT_INSTANCE_KEY);\n}\n__name(isInjected, \"isInjected\");\nfunction isProvided(context, token, options = {}) {\n const record = getRecord(context, token);\n if (!record) {\n return false;\n }\n if (options.name) {\n return record.values.has(toInstanceKey(options.name));\n }\n if (record.multi) {\n return record.values.size > 0;\n }\n return record.values.has(DEFAULT_INSTANCE_KEY);\n}\n__name(isProvided, \"isProvided\");\nfunction hasInstance(context, token, options = {}) {\n return isProvided(context, token, options);\n}\n__name(hasInstance, \"hasInstance\");\nfunction handleMissingInjection(token, options) {\n const name = toTokenName(token);\n if (options.name) {\n throw new Error(`Injection provider ${name} with name ${options.name} not found`);\n }\n throw new Error(`Injection provider ${name} not found`);\n}\n__name(handleMissingInjection, \"handleMissingInjection\");\nfunction markInjected(record, key) {\n record.injected.add(key);\n}\n__name(markInjected, \"markInjected\");\nfunction markAllInjected(record) {\n for (const key of record.values.keys()) {\n record.injected.add(key);\n }\n}\n__name(markAllInjected, \"markAllInjected\");\nfunction inject(context, token, options = {}) {\n const record = getRecord(context, token);\n if (!record) {\n if (options.optional) {\n return options.multi ? [] : void 0;\n }\n return handleMissingInjection(token, options);\n }\n if (options.name) {\n const instanceKey = toInstanceKey(options.name);\n if (!record.values.has(instanceKey)) {\n if (options.optional) {\n return void 0;\n }\n return handleMissingInjection(token, options);\n }\n const value2 = record.values.get(instanceKey);\n markInjected(record, instanceKey);\n return value2;\n }\n if (options.multi || record.multi) {\n if (record.values.size === 0) {\n if (options.optional) {\n return [];\n }\n return handleMissingInjection(token, options);\n }\n markAllInjected(record);\n return Array.from(record.values.values());\n }\n const value = record.values.get(DEFAULT_INSTANCE_KEY);\n if (value === void 0) {\n if (options.optional) {\n return void 0;\n }\n return handleMissingInjection(token, options);\n }\n markInjected(record, DEFAULT_INSTANCE_KEY);\n return value;\n}\n__name(inject, \"inject\");\nfunction override(providers, newProvider, options) {\n let { upsert = false, key } = options ?? {};\n if (!key) {\n key = typeof newProvider === \"function\" ? newProvider.name : newProvider.provide;\n }\n const flatProviders = providers.flat();\n const exists = flatProviders.some((provider) => {\n if (typeof provider === \"function\") {\n return provider.name === key;\n } else if (typeof provider === \"object\") {\n return provider.provide === key;\n }\n return false;\n });\n const mappedProviders = flatProviders.map((provider) => {\n if (typeof provider === \"function\" && provider.name === key) {\n return newProvider;\n } else if (typeof provider === \"object\" && provider.provide === key) {\n return newProvider;\n }\n return provider;\n });\n if (upsert && !exists) {\n mappedProviders.push(newProvider);\n }\n return mappedProviders;\n}\n__name(override, \"override\");\nfunction findProviders(providers, name) {\n const results = [];\n for (const provider of providers) {\n if (Array.isArray(provider)) {\n results.push(...findProviders(provider, name));\n } else if (findProvider(provider, name)) {\n results.push(provider);\n }\n }\n return results;\n}\n__name(findProviders, \"findProviders\");\nfunction findProvider(providers, name) {\n if (!Array.isArray(providers)) {\n if (typeof providers === \"object\" && \"provide\" in providers) {\n const provider = providers;\n const providerName = typeof provider.provide === \"function\" ? provider.provide.name : provider.provide;\n if (name instanceof RegExp) {\n if (name.test(providerName)) return providers;\n } else {\n if (providerName === name) return providers;\n }\n }\n return null;\n }\n for (const provider of providers) {\n if (Array.isArray(provider)) {\n const found = findProvider(provider, name);\n if (found) return found;\n continue;\n }\n if (typeof provider === \"object\" && \"provide\" in provider) {\n const providerName = typeof provider.provide === \"function\" ? provider.provide.name : provider.provide;\n if (name instanceof RegExp) {\n if (name.test(providerName)) return provider;\n } else {\n if (providerName === name) return provider;\n }\n }\n }\n return null;\n}\n__name(findProvider, \"findProvider\");\n\n// src/merge-config.ts\nfunction processProvider(mergedConfig, baseConfig, provider) {\n if (Array.isArray(provider)) {\n for (const nestedProvider of provider) {\n processProvider(mergedConfig, baseConfig, nestedProvider);\n }\n return;\n }\n const existingProvider = findProvider(baseConfig.providers, provider.provide);\n if (existingProvider) {\n mergedConfig.providers = override(mergedConfig.providers, provider);\n } else {\n mergedConfig.providers.push(provider);\n }\n}\n__name(processProvider, \"processProvider\");\nfunction mergeConfig(baseConfig, config) {\n const mergedConfig = {\n ...baseConfig,\n ...config,\n providers: [\n ...baseConfig.providers\n ]\n // Start with a copy of base providers\n };\n for (const provider of config.providers) {\n processProvider(mergedConfig, baseConfig, provider);\n }\n return mergedConfig;\n}\n__name(mergeConfig, \"mergeConfig\");\n\n// src/provider.ts\nfunction extractProvideOptions(source) {\n if (!source) {\n return void 0;\n }\n const { multi, name } = source;\n if (multi === void 0 && name === void 0) {\n return void 0;\n }\n return {\n multi,\n name\n };\n}\n__name(extractProvideOptions, \"extractProvideOptions\");\nfunction getDeps(provider) {\n if (typeof provider === \"function\") {\n return provider.deps ?? [];\n }\n return provider.deps ?? [];\n}\n__name(getDeps, \"getDeps\");\nfunction sortProviders(providers) {\n const tokenName = /* @__PURE__ */ __name((t) => typeof t === \"function\" ? t.name : t, \"tokenName\");\n const map = /* @__PURE__ */ new Map();\n for (const p of providers) {\n const token = tokenName(typeof p === \"function\" ? p : p.provide);\n const list = map.get(token);\n if (list) {\n list.push(p);\n } else {\n map.set(token, [\n p\n ]);\n }\n }\n const result = [];\n const visited = /* @__PURE__ */ new Set();\n const stack = /* @__PURE__ */ new Set();\n const visit = /* @__PURE__ */ __name((token) => {\n const name = tokenName(token);\n if (visited.has(name)) return;\n if (stack.has(name)) {\n throw new Error(`Circular dependency detected for provider ${name}`);\n }\n stack.add(name);\n const providersForToken = map.get(name);\n if (providersForToken) {\n for (const provider of providersForToken) {\n for (const dep of getDeps(provider)) {\n visit(dep);\n }\n result.push(provider);\n }\n visited.add(name);\n }\n stack.delete(name);\n }, \"visit\");\n for (const p of providers) {\n const token = typeof p === \"function\" ? p : p.provide;\n visit(token);\n }\n return result;\n}\n__name(sortProviders, \"sortProviders\");\nasync function injector(context, providers) {\n providers = providers.flat();\n providers = sortProviders(providers);\n for (const provider of providers) {\n let token;\n let instance;\n let options;\n if (typeof provider === \"function\") {\n token = provider;\n instance = new provider(context);\n const diOptions = extractProvideOptions(provider.diOptions ?? provider.di);\n options = diOptions;\n } else {\n token = provider.provide;\n options = extractProvideOptions(provider);\n const provideUserClass = provider.useClass;\n const isClass = typeof provideUserClass === \"function\";\n if (isClass) {\n instance = new provideUserClass(context);\n } else if (\"useValue\" in provider) {\n instance = provider.useValue;\n } else if (\"useFactory\" in provider) {\n instance = provider.useFactory?.(context);\n if (instance instanceof Promise) {\n instance = await instance;\n }\n } else if (\"useExisting\" in provider) {\n instance = inject(context, provider.useExisting);\n }\n }\n provide(context, token, instance, options);\n }\n}\n__name(injector, \"injector\");\n\n// src/context.ts\nvar Context = class {\n static {\n __name(this, \"Context\");\n }\n /** Internal storage for injected values */\n values = {};\n /**\n * Sets a value in the context\n * @param key - Unique identifier for the value\n * @param value - Value to store\n */\n set(key, value) {\n this.values[key] = value;\n }\n /**\n * Retrieves a value from the context\n * @param key - Unique identifier for the value\n * @returns The stored value or undefined if not found\n */\n get(key) {\n return this.values[key];\n }\n};\nexport {\n Context,\n findProvider,\n findProviders,\n hasInstance,\n inject,\n injector,\n isInjected,\n isProvided,\n mergeConfig,\n override,\n provide\n};\n//# sourceMappingURL=index.js.map"],"names":[],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"index19.js","sources":["../src/Resource.ts"],"sourcesContent":["import { RpgClientEngine } from './RpgClientEngine';\n\n/**\n * RpgResource class\n * \n * Provides a unified API to access resource file links (images and sounds) in the game.\n * Resources are stored as Maps of resource IDs to file paths/URLs.\n * \n * ## Design\n * \n * RpgResource acts as a facade over the engine's resource storage, providing\n * easy access to resource file links. It maintains Maps that are synchronized\n * with the engine's internal storage, but only stores the file paths/URLs,\n * not the full resource objects.\n * \n * @example\n * ```ts\n * import { RpgResource } from '@rpgjs/client'\n * \n * // Get spritesheet image link\n * const imageLink = RpgResource.spritesheets.get('hero')\n * \n * // Get sound file link\n * const soundLink = RpgResource.sounds.get('town-music')\n * \n * // Set a new resource link\n * RpgResource.spritesheets.set('new-sprite', './assets/new-sprite.png')\n * ```\n */\nexport class RpgResource {\n private static engine: RpgClientEngine | null = null;\n private static _spritesheets: Map<string, string> = new Map();\n private static _sounds: Map<string, string> = new Map();\n\n /**\n * Initialize RpgResource with the engine instance\n * \n * This is called automatically by the engine during initialization.\n * It synchronizes the resource Maps with the engine's internal storage.\n * \n * @param engine - The RpgClientEngine instance\n */\n static init(engine: RpgClientEngine): void {\n RpgResource.engine = engine;\n RpgResource.syncResources();\n }\n\n /**\n * Synchronize resource Maps with the engine's internal storage\n * \n * Extracts file links from spritesheets and sounds stored in the engine\n * and updates the Maps accordingly.\n * \n * @private\n */\n private static syncResources(): void {\n if (!RpgResource.engine) {\n return;\n }\n\n // Sync spritesheets\n RpgResource._spritesheets.clear();\n RpgResource.engine.spritesheets.forEach((spritesheet, id) => {\n // Extract image path from spritesheet\n const imageLink = spritesheet?.image || spritesheet?.imageSource || undefined;\n if (imageLink) {\n RpgResource._spritesheets.set(id, imageLink);\n }\n });\n\n // Sync sounds\n RpgResource._sounds.clear();\n RpgResource.engine.sounds.forEach((sound, id) => {\n // Extract src path from sound\n let soundLink: string | undefined;\n \n // If it's a Howler instance, try to get src from _src or src property\n if (sound && typeof sound === 'object') {\n if (sound._src && Array.isArray(sound._src) && sound._src.length > 0) {\n soundLink = sound._src[0];\n } else if (sound.src && typeof sound.src === 'string') {\n soundLink = sound.src;\n } else if (sound.src && Array.isArray(sound.src) && sound.src.length > 0) {\n soundLink = sound.src[0];\n }\n }\n \n if (soundLink) {\n RpgResource._sounds.set(id, soundLink);\n }\n });\n }\n\n /**\n * Get/Set image links for spritesheets\n * \n * Map of spritesheet IDs to their image file paths/URLs.\n * This Map is synchronized with the engine's spritesheet storage.\n * \n * @type {Map<string, string>}\n * \n * @example\n * ```ts\n * // Get an image link\n * const imageLink = RpgResource.spritesheets.get('hero')\n * \n * // Set a new image link\n * RpgResource.spritesheets.set('new-sprite', './assets/new-sprite.png')\n * \n * // Check if a spritesheet exists\n * if (RpgResource.spritesheets.has('monster')) {\n * const link = RpgResource.spritesheets.get('monster')\n * }\n * ```\n */\n static get spritesheets(): Map<string, string> {\n // Sync before returning to ensure we have the latest data\n RpgResource.syncResources();\n return RpgResource._spritesheets;\n }\n\n /**\n * Get/Set sound file links\n * \n * Map of sound IDs to their audio file paths/URLs.\n * This Map is synchronized with the engine's sound storage.\n * \n * @type {Map<string, string>}\n * \n * @example\n * ```ts\n * // Get a sound link\n * const soundLink = RpgResource.sounds.get('town-music')\n * \n * // Set a new sound link\n * RpgResource.sounds.set('new-sound', './assets/new-sound.ogg')\n * \n * // Iterate over all sounds\n * RpgResource.sounds.forEach((link, id) => {\n * console.log(`Sound ${id}: ${link}`)\n * })\n * ```\n */\n static get sounds(): Map<string, string> {\n // Sync before returning to ensure we have the latest data\n RpgResource.syncResources();\n return RpgResource._sounds;\n }\n}\n\n"],"names":[],"mappings":"AA6BO,MAAM,WAAA,CAAY;AAAA,EACvB;AAAA,IAAA,IAAA,CAAe,MAAA,GAAiC,IAAA;AAAA;AAAA,EAChD;AAAA,IAAA,IAAA,CAAe,aAAA,uBAAyC,GAAA,EAAI;AAAA;AAAA,EAC5D;AAAA,IAAA,IAAA,CAAe,OAAA,uBAAmC,GAAA,EAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUtD,OAAO,KAAK,MAAA,EAA+B;AACzC,IAAA,WAAA,CAAY,MAAA,GAAS,MAAA;AACrB,IAAA,WAAA,CAAY,aAAA,EAAc;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,OAAe,aAAA,GAAsB;AACnC,IAAA,IAAI,CAAC,YAAY,MAAA,EAAQ;AACvB,MAAA;AAAA,IACF;AAGA,IAAA,WAAA,CAAY,cAAc,KAAA,EAAM;AAChC,IAAA,WAAA,CAAY,MAAA,CAAO,YAAA,CAAa,OAAA,CAAQ,CAAC,aAAa,EAAA,KAAO;AAE3D,MAAA,MAAM,SAAA,GAAY,WAAA,EAAa,KAAA,IAAS,WAAA,EAAa,WAAA,IAAe,MAAA;AACpE,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,WAAA,CAAY,aAAA,CAAc,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AAAA,MAC7C;AAAA,IACF,CAAC,CAAA;AAGD,IAAA,WAAA,CAAY,QAAQ,KAAA,EAAM;AAC1B,IAAA,WAAA,CAAY,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,CAAC,OAAO,EAAA,KAAO;AAE/C,MAAA,IAAI,SAAA;AAGJ,MAAA,IAAI,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,EAAU;AACtC,QAAA,IAAI,KAAA,CAAM,IAAA,IAAQ,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACpE,UAAA,SAAA,GAAY,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,QAC1B,WAAW,KAAA,CAAM,GAAA,IAAO,OAAO,KAAA,CAAM,QAAQ,QAAA,EAAU;AACrD,UAAA,SAAA,GAAY,KAAA,CAAM,GAAA;AAAA,QACpB,CAAA,MAAA,IAAW,KAAA,CAAM,GAAA,IAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,IAAK,KAAA,CAAM,GAAA,CAAI,MAAA,GAAS,CAAA,EAAG;AACxE,UAAA,SAAA,GAAY,KAAA,CAAM,IAAI,CAAC,CAAA;AAAA,QACzB;AAAA,MACF;AAEA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,WAAA,CAAY,OAAA,CAAQ,GAAA,CAAI,EAAA,EAAI,SAAS,CAAA;AAAA,MACvC;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,WAAW,YAAA,GAAoC;AAE7C,IAAA,WAAA,CAAY,aAAA,EAAc;AAC1B,IAAA,OAAO,WAAA,CAAY,aAAA;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBA,WAAW,MAAA,GAA8B;AAEvC,IAAA,WAAA,CAAY,aAAA,EAAc;AAC1B,IAAA,OAAO,WAAA,CAAY,OAAA;AAAA,EACrB;AACF;;;;"}