Release Healer Man 0.1.22
This commit is contained in:
1 parent
f6f2375145
commit
7f6001723a
144 files changed
+54107
-690
No files matched your search
@@ -0,0 +1,71 @@
|
||||
import type { ClassId } from "../app/characterCatalog";
|
||||
import { loadTalentUiCatalog, talentUiArtUrls } from "../game/talentUiCatalog";
|
||||
|
||||
let talentGameplayPanelModule: Promise<typeof import("./TalentGameplayPanel")> | null = null;
|
||||
let loadedTalentGameplayPanel: typeof import("./TalentGameplayPanel")["default"] | null = null;
|
||||
const talentArtLoads = new Map<string, Promise<void>>();
|
||||
const retainedTalentArt = new Map<string, HTMLImageElement>();
|
||||
const talentGameplayResourceLoads = new Map<ClassId, Promise<void>>();
|
||||
|
||||
export function loadTalentGameplayPanel() {
|
||||
if (!talentGameplayPanelModule) {
|
||||
talentGameplayPanelModule = import("./TalentGameplayPanel")
|
||||
.then((module) => {
|
||||
loadedTalentGameplayPanel = module.default;
|
||||
return module;
|
||||
})
|
||||
.catch((error: unknown) => {
|
||||
talentGameplayPanelModule = null;
|
||||
throw error;
|
||||
});
|
||||
}
|
||||
return talentGameplayPanelModule;
|
||||
}
|
||||
|
||||
export function getLoadedTalentGameplayPanel() {
|
||||
return loadedTalentGameplayPanel;
|
||||
}
|
||||
|
||||
function preloadTalentArt(url: string): Promise<void> {
|
||||
const cached = talentArtLoads.get(url);
|
||||
if (cached) return cached;
|
||||
if (typeof Image === "undefined") return Promise.resolve();
|
||||
|
||||
const image = new Image();
|
||||
retainedTalentArt.set(url, image);
|
||||
const pending = new Promise<void>((resolve) => {
|
||||
image.onload = () => {
|
||||
image.onload = null;
|
||||
image.onerror = null;
|
||||
if (typeof image.decode === "function") {
|
||||
void image.decode().catch(() => undefined).then(() => resolve());
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
};
|
||||
image.onerror = () => {
|
||||
image.onload = null;
|
||||
image.onerror = null;
|
||||
resolve();
|
||||
};
|
||||
image.src = url;
|
||||
});
|
||||
talentArtLoads.set(url, pending);
|
||||
return pending;
|
||||
}
|
||||
|
||||
export function preloadTalentGameplayResources(classId: ClassId): Promise<void> {
|
||||
const cached = talentGameplayResourceLoads.get(classId);
|
||||
if (cached) return cached;
|
||||
const pending = Promise.all([
|
||||
loadTalentUiCatalog(classId),
|
||||
loadTalentGameplayPanel(),
|
||||
]).then(async ([catalog]) => {
|
||||
await Promise.all(talentUiArtUrls(catalog).map(preloadTalentArt));
|
||||
}).catch((error: unknown) => {
|
||||
talentGameplayResourceLoads.delete(classId);
|
||||
throw error;
|
||||
});
|
||||
talentGameplayResourceLoads.set(classId, pending);
|
||||
return pending;
|
||||
}
|
||||
Reference in new issue
Block a user