MCPcopy Create free account
hub / github.com/Monogatari/Monogatari / preload

Method preload

src/monogatari.ts:1511–1698  ·  view source on GitHub ↗

* Preload game assets

()

Source from the content-addressed store, hash-verified

1509 * Preload game assets
1510 */
1511 static preload () {
1512 // Check if asset preloading is enabled. Preloading will not be done in
1513 // electron or cordova since the assets are expected to be available
1514 // locally.
1515 const preloadEnabled = this.setting ('Preload') && !Platform.desktopApp && !Platform.cordova && location.protocol.indexOf ('file') < 0;
1516
1517 if (!preloadEnabled) {
1518 return Promise.resolve ();
1519 }
1520
1521 const promises: Promise<void>[] = [];
1522
1523 this.trigger('willPreloadAssets');
1524
1525 const assetsPath = this.setting('AssetsPath');
1526
1527 // Check if Preload action has a 'default' block configured
1528 const preloadAction = this.action('Preload') as typeof PreloadAction | undefined;
1529 const blocks = preloadAction?.blocks?.();
1530 const defaultBlock = blocks?.['default'];
1531
1532 if (defaultBlock && preloadAction) {
1533 // Use the registry-based preloading for the 'default' block
1534 for (const [category, assets] of Object.entries(defaultBlock)) {
1535 // Handle characters separately (nested structure)
1536 if (category === 'characters' && typeof assets === 'object' && !Array.isArray(assets)) {
1537 for (const [charId, sprites] of Object.entries(assets as Record<string, string[]>)) {
1538 const character = this.character(charId);
1539 if (!character) continue;
1540
1541 let directory = character.directory ? `${character.directory}/` : '';
1542 directory = `${assetsPath.root}/${assetsPath.characters}/${directory}`;
1543
1544 for (const spriteName of sprites) {
1545 const spriteFile = character.sprites?.[spriteName];
1546 if (!spriteFile || typeof spriteFile !== 'string') continue;
1547
1548 const url = `${directory}${spriteFile}`;
1549 promises.push(
1550 Preload.image(url).then((img) => {
1551 this.imageCache(`characters/${charId}/${spriteName}`, img);
1552 this.trigger('assetLoaded', { name: spriteName, type: 'image', category: 'characters' });
1553 })
1554 );
1555 this.trigger('assetQueued');
1556 }
1557 }
1558 continue;
1559 }
1560
1561 if (!Array.isArray(assets)) continue;
1562
1563 // Use the Preload action's registry to determine how to load this category
1564 const loaderType = preloadAction.getLoaderType(category);
1565 if (!loaderType) {
1566 console.warn(`Preload: No loader registered for category "${category}" in default block`);
1567 continue;
1568 }

Callers 1

displayInitialScreenFunction · 0.80

Calls 13

settingMethod · 0.95
triggerMethod · 0.95
actionMethod · 0.95
characterMethod · 0.95
imageCacheMethod · 0.95
assetsMethod · 0.95
charactersMethod · 0.95
blocksMethod · 0.80
getLoaderTypeMethod · 0.80
getLoaderMethod · 0.80
setMethod · 0.65
keysMethod · 0.65

Tested by

no test coverage detected