aboutsummaryrefslogtreecommitdiff
path: root/webAO/viewport/interfaces
diff options
context:
space:
mode:
authorDavid Skoland <davidskoland@gmail.com>2026-04-01 13:59:13 +0200
committerDavid Skoland <davidskoland@gmail.com>2026-04-01 13:59:13 +0200
commit10b413c0f0a31bc9476eed86812b6bb90f82caed (patch)
tree94ac6676fcad76dc76e901e2889a30f7ba611d8d /webAO/viewport/interfaces
parentd6163543f483c35737da52b7e307cf6f65828f82 (diff)
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) <noreply@anthropic.com>
Diffstat (limited to 'webAO/viewport/interfaces')
-rw-r--r--webAO/viewport/interfaces/ChatMsg.ts3
-rw-r--r--webAO/viewport/interfaces/PreloadedAssets.ts20
2 files changed, 23 insertions, 0 deletions
diff --git a/webAO/viewport/interfaces/ChatMsg.ts b/webAO/viewport/interfaces/ChatMsg.ts
index 1e7078f..ab8d0b3 100644
--- a/webAO/viewport/interfaces/ChatMsg.ts
+++ b/webAO/viewport/interfaces/ChatMsg.ts
@@ -1,3 +1,5 @@
+import { PreloadedAssets } from "./PreloadedAssets";
+
export interface ChatMsg {
content: string;
objection: number;
@@ -31,4 +33,5 @@ export interface ChatMsg {
evidence?: number;
looping_sfx?: boolean;
noninterrupting_preanim?: number;
+ preloadedAssets?: PreloadedAssets;
}
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;
+}