Jukeboxes will now be synced across all clients (#17599)

This commit is contained in:
ynot01
2023-01-22 15:00:50 -05:00
committed by GitHub
parent 3dea19b54d
commit 546c510458
3 changed files with 18 additions and 8 deletions

View File

@@ -9,11 +9,12 @@
#define CHANNEL_BUZZ 1017
#define CHANNEL_BICYCLE 1016
#define CHANNEL_VOICE_ANNOUNCE 1015
#define CHANNEL_MEGAFAUNA 1014 // battle music
//THIS SHOULD ALWAYS BE THE LOWEST ONE!
//KEEP IT UPDATED
#define CHANNEL_HIGHEST_AVAILABLE 1014
#define CHANNEL_HIGHEST_AVAILABLE 1013
#define MAX_INSTRUMENT_CHANNELS (128 * 6)

View File

@@ -176,6 +176,17 @@
active = TRUE
update_icon()
START_PROCESSING(SSobj, src)
var/sound/song_played = sound(selection.song_path)
var/list/close = range(10,src)
for(var/mob/L in GLOB.player_list)
if(!L || !L.client)
continue
// it doesn't send at 0 volume so you get 0.001 volume on init
L.playsound_local(get_turf(L), null, 0.001, channel = CHANNEL_JUKEBOX, S = song_played)
if(L in close && L.client.prefs.toggles & SOUND_JUKEBOX)
L.set_sound_channel_volume(CHANNEL_JUKEBOX, volume) // TURN THAT SHIT UP!!!!
else
L.set_sound_channel_volume(CHANNEL_JUKEBOX, 0)
stop = world.time + selection.song_length
/obj/machinery/jukebox/disco/activate_music()
@@ -423,7 +434,7 @@
lying_prev = 0
/obj/machinery/jukebox/proc/dance_over()
for(var/mob/living/L in rangers)
for(var/mob/L in GLOB.player_list)
if(!L || !L.client)
continue
L.stop_sound_channel(CHANNEL_JUKEBOX)
@@ -436,20 +447,18 @@
/obj/machinery/jukebox/process()
if(world.time < stop && active)
var/sound/song_played = sound(selection.song_path)
for(var/mob/M in range(10,src))
if(!M.client || !(M.client.prefs.toggles & SOUND_JUKEBOX))
continue
if(!(M in rangers))
rangers[M] = TRUE
M.playsound_local(get_turf(M), null, volume, channel = CHANNEL_JUKEBOX, S = song_played)
M.set_sound_channel_volume(CHANNEL_JUKEBOX, volume) // We want volume updated without having to walk away!!
for(var/mob/L in rangers)
if(get_dist(src,L) > 10)
rangers -= L
if(!L || !L.client)
continue
L.stop_sound_channel(CHANNEL_JUKEBOX)
L.set_sound_channel_volume(CHANNEL_JUKEBOX, 0)
else if(active)
active = FALSE
STOP_PROCESSING(SSobj, src)

View File

@@ -56,14 +56,14 @@
target.playing_music = src
if(sound_datum || !target || !sound_file)
return
sound_datum = sound(sound_file, does_loop, 0, CHANNEL_JUKEBOX, base_volume * fade_volume)
sound_datum = sound(sound_file, does_loop, 0, CHANNEL_MEGAFAUNA, base_volume * fade_volume)
SEND_SOUND(target, sound_datum)
/datum/music/proc/mask()
if(target)
target.playing_music = null
if(sound_datum)
SEND_SOUND(target, sound(null, repeat = 0, wait = 0, channel = CHANNEL_JUKEBOX))
SEND_SOUND(target, sound(null, repeat = 0, wait = 0, channel = CHANNEL_MEGAFAUNA))
sound_datum = null
if(!does_loop)
qdel(src)