diff --git a/src/routes/scene/+page.svelte b/src/routes/scene/+page.svelte index 9830256..1c55ef7 100644 --- a/src/routes/scene/+page.svelte +++ b/src/routes/scene/+page.svelte @@ -138,6 +138,7 @@ targetX={position.mapped.x * innerWidth} targetY={position.mapped.y * innerHeight} user={getFriendById(userId)} + userStatus={getFriendStatus(userId)} {doll} {isInteractive} /> diff --git a/src/routes/scene/components/DesktopPet.svelte b/src/routes/scene/components/DesktopPet.svelte index b4062a2..a188c1b 100644 --- a/src/routes/scene/components/DesktopPet.svelte +++ b/src/routes/scene/components/DesktopPet.svelte @@ -12,11 +12,14 @@ import PetMenu from "./PetMenu.svelte"; import type { DollDto } from "../../../types/bindings/DollDto"; import type { UserBasicDto } from "../../../types/bindings/UserBasicDto"; + import type { AppMetadata } from "../../../types/bindings/AppMetadata"; + import type { FriendUserStatus } from "../../../events/user-status"; export let id = ""; export let targetX = 0; export let targetY = 0; export let user: UserBasicDto; + export let userStatus: FriendUserStatus | undefined = undefined; export let doll: DollDto | undefined = undefined; export let isInteractive = false; @@ -37,10 +40,12 @@ $: { const interaction = $receivedInteractions.get(user.id); if (interaction && interaction.content !== receivedMessage) { - console.log(`Received interaction for ${user.id}: ${interaction.content}`); + console.log( + `Received interaction for ${user.id}: ${interaction.content}`, + ); receivedMessage = interaction.content; isPetMenuOpen = true; - + // Make scene interactive so user can see it invoke("set_scene_interactive", { interactive: true, @@ -79,9 +84,9 @@ // When we force it via invoke("set_scene_interactive", { interactive: true }), it might not reflect back into `isInteractive` prop immediately or correctly depending on how the parent passes it. // Actually, `isInteractive` is a prop passed from +page.svelte probably based on hover state. // If we want the menu to stay open during the message, we should probably ignore this auto-close behavior if a message is present. - + $: if (!receivedMessage && !isInteractive) { - isPetMenuOpen = false; + isPetMenuOpen = false; } $: { @@ -143,13 +148,24 @@ > {#if isPetMenuOpen} + {/if} + {#if userStatus} +
+ {#if userStatus.appMetadata.appIconB64} + Friend's active app icon {/if}
{/if} diff --git a/src/routes/scene/components/PetMenu.svelte b/src/routes/scene/components/PetMenu.svelte index 1479b1d..c589a27 100644 --- a/src/routes/scene/components/PetMenu.svelte +++ b/src/routes/scene/components/PetMenu.svelte @@ -3,9 +3,11 @@ import { type DollDto } from "../../../types/bindings/DollDto"; import type { UserBasicDto } from "../../../types/bindings/UserBasicDto"; import type { SendInteractionDto } from "../../../types/bindings/SendInteractionDto"; + import type { FriendUserStatus } from "../../../events/user-status"; export let doll: DollDto; export let user: UserBasicDto; + export let userStatus: FriendUserStatus | undefined = undefined; export let receivedMessage: string | undefined = undefined; let showMessageInput = false; @@ -45,6 +47,20 @@

{doll.name}

From {user.name}

+ {#if userStatus} +
+ {#if userStatus.appMetadata.appIconB64} + Friend's active app icon + {/if} +

+ {userStatus.appMetadata.localized} +

+
+ {/if} {#if receivedMessage}