radames's picture
canvas
560b99e unverified
raw
history blame
2.49 kB
<script lang="ts">
import Cursor from '$lib/Cursor.svelte';
import Canvas from '$lib/Canvas.svelte';
import type { Room } from '@liveblocks/client';
import { onDestroy } from 'svelte';
/**
* The main Liveblocks code for the example.
* Check in src/routes/index.svelte to see the setup code.
*/
export let room: Room;
// Get initial values for presence and others
let myPresence = room.getPresence();
let others = room.getOthers();
// Subscribe to further changes
// const unsubscribeMyPresence = room.subscribe('my-presence', (presence) => {
// myPresence = presence;
// });
// const unsubscribeOthers = room.subscribe('others', (otherUsers) => {
// others = otherUsers;
// });
// Unsubscribe when unmounting
onDestroy(() => {
unsubscribeMyPresence();
unsubscribeOthers();
});
// Update cursor presence to current pointer location
function handlePointerMove(event: PointerEvent) {
event.preventDefault();
room.updatePresence({
cursor: {
x: Math.round(event.clientX),
y: Math.round(event.clientY)
}
});
}
// When the pointer leaves the page, set cursor presence to null
function handlePointerLeave() {
room.updatePresence({
cursor: null
});
}
const COLORS = [
'#E57373',
'#9575CD',
'#4FC3F7',
'#81C784',
'#FFF176',
'#FF8A65',
'#F06292',
'#7986CB'
];
</script>
<main on:pointerleave={handlePointerLeave} on:pointermove={handlePointerMove}>
<!-- Show the current user's cursor location -->
<div class="text">
{myPresence?.cursor
? `${myPresence.cursor.x} × ${myPresence.cursor.y}`
: 'Move your cursor to broadcast its position to other people in the room.'}
</div>
<!-- When others connected, iterate through others and show their cursors -->
{#if others}
{#each [...others] as { connectionId, presence } (connectionId)}
{#if presence?.cursor}
<Cursor
color={COLORS[connectionId % COLORS.length]}
x={presence.cursor.x}
y={presence.cursor.y}
/>
{/if}
{/each}
{/if}
</main>
<Canvas />
<h3 class="text-xl">TESTS</h3>
<style lang="postcss" scoped>
main {
/* @apply fixed top-0 left-0 w-screen h-screen flex flex-col items-center justify-center touch-none bg-white; */
/* position: absolute;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
display: flex;
place-content: center;
place-items: center;
touch-action: none;
background-color: white; */
}
.text {
max-width: 380px;
margin: 0 16px;
text-align: center;
}
</style>