PlayerSnapshot: Readonly<{
    displayName: string;
    isGuest: boolean;
    joinedAtMs: number;
    name: string;
    nameResolved: boolean;
    userId: string;
}>

Last known state of a player, still readable after their entity is gone.

Handed to onLeaveScene as a second argument, because getPlayer reads live ECS data and returns null once the player has left.