MCPcopy
hub / github.com/4ian/GDevelop / MockedResourceManager

Class MockedResourceManager

GDJS/tests/tests/Extensions/MockedResourceLoader.js:10–110  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

8 * @implements {gdjs.ResourceManager}
9 */
10gdjs.MockedResourceManager = class MockedResourceManager {
11 loadResourcePromises = new Map();
12 loadResourceCallbacks = new Map();
13 disposedResources = new Set();
14 loadedResources = new Set();
15 waitingForProcessing = new Set();
16 readyResources = new Set();
17
18 loadResource(resourceName) {
19 if (
20 this.loadedResources.has(resourceName) ||
21 this.waitingForProcessing.has(resourceName)
22 ) {
23 return Promise.resolve();
24 }
25
26 const existingPromise = this.loadResourcePromises.get(resourceName);
27 if (existingPromise) {
28 return existingPromise;
29 }
30
31 const promise = new Promise((resolve) => {
32 this.loadResourceCallbacks.set(resourceName, resolve);
33 });
34 this.loadResourcePromises.set(resourceName, promise);
35 return promise;
36 }
37
38 async processResource(resourceName) {
39 // Mark resource as fully processed
40 this.readyResources.add(resourceName);
41 }
42
43 /**
44 * @param {string} resourceName
45 * @returns {boolean}
46 */
47 isResourceDownloadPending(resourceName) {
48 return this.loadResourceCallbacks.has(resourceName);
49 }
50
51 /**
52 * @param {string} resourceName
53 */
54 markPendingResourcesAsLoaded(resourceName) {
55 const loadResourceCallback = this.loadResourceCallbacks.get(resourceName);
56 if (loadResourceCallback) {
57 this.loadedResources.add(resourceName);
58 loadResourceCallback();
59 this.loadResourceCallbacks.delete(resourceName);
60 this.loadResourcePromises.delete(resourceName);
61 } else {
62 throw new Error(
63 `Resource ${resourceName} was not being loaded, so cannot be marked as loaded.`
64 );
65 }
66 }
67

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected