add buzz sounds

This commit is contained in:
ducklet 2021-02-25 22:54:56 +01:00
parent e7ecde32a2
commit a97f258348
9 changed files with 44 additions and 14 deletions

View file

@ -94,6 +94,17 @@
> >
add tokens add tokens
</button> </button>
<select name="sound" data-onchange="
conn.send('control', {action: 'sound', client_id: client.id, sound: target.value})
">
<option value="">-</option>
<option value="bark">bark</option>
<option value="chirp">chirp</option>
<option value="meow">meow</option>
<option value="moo">moo</option>
<option value="quack">quack</option>
<option value="ribbit">ribbit</option>
</select>
</div> </div>
</li> </li>
</template> </template>

View file

@ -210,24 +210,36 @@ function enable_admin_ui() {
{ target: q("#points-admin") }, { target: q("#points-admin") },
) )
on( const client_for_target = (target) => {
"click",
({ target }) => {
let node = target let node = target
while (!node.dataset.cid && node.parentElement) { while (!node.dataset.cid && node.parentElement) {
node = node.parentElement node = node.parentElement
} }
if (!target.dataset.onclick) { return find_client(node.dataset.cid)
return
} }
const client = find_client(node.dataset.cid)
if (!client) { on(
"click",
({ target }) => {
const client = client_for_target(target)
if (!client || !target.dataset.onclick) {
return return
} }
eval(`;{${target.dataset.onclick}};`) eval(`;{${target.dataset.onclick}};`)
}, },
{ target: q("#info .players") }, { target: q("#info .players") },
) )
on(
"change",
({ target }) => {
const client = client_for_target(target)
if (!client || !target.dataset.onchange) {
return
}
eval(`;{${target.dataset.onchange}};`)
},
{ target: q("#info .players") },
)
} }
function set_name(name) { function set_name(name) {

View file

@ -103,12 +103,12 @@ const redraw_clients = debounce(_redraw_clients, 200)
let highlighted = false let highlighted = false
function highlight(client_id, until_ns) { function highlight(client_id, until_ns) {
if (highlighted) { if (highlighted) {
return return false
} }
const timeout_ms = (until_ns - conn.servertime_now_ns()) / ms_ns const timeout_ms = (until_ns - conn.servertime_now_ns()) / ms_ns
if (timeout_ms <= 10) { if (timeout_ms <= 10) {
console.warn("That highlight timeout was ridiculously low:", client_id, timeout_ms) console.warn("That highlight timeout was ridiculously low:", client_id, timeout_ms)
return return false
} }
for (const li of player_list.children) { for (const li of player_list.children) {
if (li.dataset.cid === client_id) { if (li.dataset.cid === client_id) {
@ -118,7 +118,7 @@ function highlight(client_id, until_ns) {
highlighted = false highlighted = false
li.classList.remove("buzzing") li.classList.remove("buzzing")
}, timeout_ms) }, timeout_ms)
return return true
} }
} }
} }
@ -126,7 +126,8 @@ function highlight(client_id, until_ns) {
function setup_ws() { function setup_ws() {
let clients = {}, let clients = {},
me, me,
monitored = [] monitored = [],
sounds = {}
const sid = session_id() const sid = session_id()
const overlay = q('#text-overlay') const overlay = q('#text-overlay')
conn = new Connection() conn = new Connection()
@ -140,7 +141,10 @@ function setup_ws() {
const { time: buzztime_ns, client: client_id } = value const { time: buzztime_ns, client: client_id } = value
const duration_ns = 12 * s_ns const duration_ns = 12 * s_ns
const until_ns = buzztime_ns + duration_ns const until_ns = buzztime_ns + duration_ns
highlight(client_id, until_ns) const is_new_buzz = highlight(client_id, until_ns)
if (is_new_buzz && sounds[client_id]) {
sounds[client_id].play()
}
}) })
conn.on("clients", ({ value }) => { conn.on("clients", ({ value }) => {
clients = Object.fromEntries(value.clients.map((c) => [c.id, c])) clients = Object.fromEntries(value.clients.map((c) => [c.id, c]))
@ -161,6 +165,9 @@ function setup_ws() {
} else { } else {
overlay.classList.add('hidden') overlay.classList.add('hidden')
} }
} else if (action === 'sound' && args.sound) {
const { client_id, sound } = args
sounds[client_id] = new Audio(`sounds/${sound}.mp3`)
} }
}) })
conn.connect(session_url(sid)) conn.connect(session_url(sid))

BIN
public/sounds/bark.mp3 Normal file

Binary file not shown.

BIN
public/sounds/chirp.mp3 Normal file

Binary file not shown.

BIN
public/sounds/meow.mp3 Normal file

Binary file not shown.

BIN
public/sounds/moo.mp3 Normal file

Binary file not shown.

BIN
public/sounds/quack.mp3 Normal file

Binary file not shown.

BIN
public/sounds/ribbit.mp3 Normal file

Binary file not shown.