From 10b413c0f0a31bc9476eed86812b6bb90f82caed Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 1 Apr 2026 13:59:13 +0200 Subject: Add asset preloading system for IC message rendering Fix rendering race conditions where character sprites, pre-animations, and paired character assets were displayed before being downloaded. All assets referenced in an MS packet are now resolved and preloaded into the browser cache before the animation timeline starts. - Add unified assetCache module with session-wide promise caching - Add preloadMessageAssets orchestrator for parallel asset resolution - Cache fileExists HEAD requests so missing files aren't re-probed - Preload all SFX (emote, shout, realization, stab) alongside sprites - Use synchronous setEmoteFromUrl at all render transition points - Graceful fallback to legacy setEmote if preloading times out Co-Authored-By: Claude Opus 4.6 (1M context) --- webAO/viewport/interfaces/PreloadedAssets.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 webAO/viewport/interfaces/PreloadedAssets.ts (limited to 'webAO/viewport/interfaces/PreloadedAssets.ts') diff --git a/webAO/viewport/interfaces/PreloadedAssets.ts b/webAO/viewport/interfaces/PreloadedAssets.ts new file mode 100644 index 0000000..54d20b8 --- /dev/null +++ b/webAO/viewport/interfaces/PreloadedAssets.ts @@ -0,0 +1,20 @@ +export interface PreloadedAssets { + /** Resolved URL for idle (a) sprite */ + idleUrl: string; + /** Resolved URL for talking (b) sprite */ + talkingUrl: string; + /** Resolved URL for pre-animation sprite (no prefix) */ + preanimUrl: string; + /** Duration of preanim in ms (0 if no preanim) */ + preanimDuration: number; + /** Resolved URL for paired character idle (a) sprite */ + pairIdleUrl: string; + /** Resolved per-character shout SFX URL, or null to use default */ + shoutSfxUrl: string | null; + /** Resolved emote SFX URL, or null if no sound */ + emoteSfxUrl: string | null; + /** Resolved realization (flash) SFX URL */ + realizationSfxUrl: string | null; + /** Resolved stab (screenshake) SFX URL */ + stabSfxUrl: string | null; +} -- cgit