Add spoken spatial clock announcements with top-of-hour mode

This commit is contained in:
Jage9
2026-02-27 01:05:23 -05:00
parent 2e532f5471
commit 4ed52649f1
47 changed files with 273 additions and 19 deletions

View File

@@ -69,6 +69,7 @@ type MessageHandlerDeps = {
playLocateToneAt: (x: number, y: number) => void;
resolveIncomingSoundUrl: (url: string) => string;
playIncomingItemUseSound: (url: string, x: number, y: number) => void;
playClockAnnouncement: (sounds: string[], x: number, y: number) => void;
handleAuthRequired: (message: Extract<IncomingMessage, { type: 'auth_required' }>) => void;
handleAuthResult: (message: Extract<IncomingMessage, { type: 'auth_result' }>) => Promise<void>;
isPeerNegotiationReady: () => boolean;
@@ -267,19 +268,26 @@ export function createOnMessageHandler(deps: MessageHandlerDeps): (message: Inco
if (handledByItemBehavior) {
break;
}
const text = message.message.trim();
if (message.ok) {
if (message.action === 'use' || message.action === 'secondary_use') {
deps.pushChatMessage(message.message);
if (text) {
deps.pushChatMessage(text);
}
const item = message.itemId ? deps.getItemById(message.itemId) : null;
if (message.action === 'use' && !item?.useSound && item && item.type !== 'piano') {
deps.playLocateToneAt(item.x, item.y);
}
} else if (message.action !== 'update') {
deps.pushChatMessage(message.message);
if (text) {
deps.pushChatMessage(text);
}
deps.audioUiConfirm();
}
} else {
deps.pushChatMessage(message.message);
if (text) {
deps.pushChatMessage(text);
}
deps.audioUiCancel();
}
break;
@@ -300,6 +308,12 @@ export function createOnMessageHandler(deps: MessageHandlerDeps): (message: Inco
break;
}
case 'item_clock_announce': {
if (!deps.getAudioLayers().world) break;
deps.playClockAnnouncement(message.sounds, message.x, message.y);
break;
}
case 'item_piano_status': {
deps.handlePianoStatus(message);
break;