From 20467bded71cb58f0ee4e68486323602d48ad31e Mon Sep 17 00:00:00 2001 From: Rob Nelson Date: Sat, 22 Mar 2014 03:02:55 -0700 Subject: [PATCH] Fix a bunch of jukebox bugs, add and implement new sprites. --- code/modules/media/jukebox.dm | 54 +++++++++++++++++++++++++++------- icons/obj/jukebox.dmi | Bin 7346 -> 4691 bytes 2 files changed, 43 insertions(+), 11 deletions(-) diff --git a/code/modules/media/jukebox.dm b/code/modules/media/jukebox.dm index 60175441358..572788cff59 100644 --- a/code/modules/media/jukebox.dm +++ b/code/modules/media/jukebox.dm @@ -29,6 +29,14 @@ length = text2num(json["length"]) + proc/display() + var/str="\"[title]\"" + if(artist!="") + str += ", by [artist]" + if(album!="") + str += ", from '[album]'" + return str + var/global/loopModeNames=list( JUKEMODE_SHUFFLE = "Shuffle", @@ -39,7 +47,7 @@ var/global/loopModeNames=list( name = "Jukebox" desc = "A jukebox used for parties and shit." icon = 'icons/obj/jukebox.dmi' - icon_state = "jukebox" + icon_state = "jukebox2-unpowered" density = 1 anchored = 1 @@ -70,19 +78,35 @@ var/global/loopModeNames=list( "lounge" = "Portishead - Dummy" ) -/obj/machinery/media/jukebox/attack_ai() - return +/obj/machinery/media/jukebox/attack_ai(var/mob/user) + attack_hand(user) /obj/machinery/media/jukebox/attack_paw() return +/obj/machinery/media/jukebox/power_change() + ..() + update_icon() + +/obj/machinery/media/jukebox/update_icon() + overlays = 0 + if(stat & (NOPOWER|BROKEN)) + icon_state = "jukebox2-unpowered" + stop_playing() + return + icon_state = "jukebox2" + if(playing) + overlays += "jukebox2-running" + /obj/machinery/media/jukebox/proc/check_reload() return world.time > last_reload + JUKEBOX_RELOAD_COOLDOWN /obj/machinery/media/jukebox/attack_hand(var/mob/user) + if(stat & (NOPOWER|BROKEN)) + return var/t = "

Jukebox Interface

" t += "Power: [playing?"On":"Off"]
" - t += "Play Mode: [loopModeNames[loop_mode]]
" + t += "Play Mode: [loopModeNames[loop_mode]]
" if(playlist == null) t += "\[DOWNLOADING PLAYLIST, PLEASE WAIT\]" else @@ -112,6 +136,7 @@ var/global/loopModeNames=list( if (href_list["power"]) playing=!playing update_music() + update_icon() if (href_list["playlist"]) if(!check_reload()) @@ -122,14 +147,16 @@ var/global/loopModeNames=list( playlist=null current_song=0 update_music() + update_icon() if (href_list["song"]) current_song=Clamp(text2num(href_list["song"]),1,playlist.len) update_music() + update_icon() if (href_list["mode"]) - // Theoretically, this should barrel shift. - loop_mode = (loop_mode % JUKEMODE_COUNT)+1 + loop_mode = (loop_mode % JUKEMODE_COUNT) + 1 + return attack_hand(usr) /obj/machinery/media/jukebox/process() @@ -170,19 +197,24 @@ var/global/loopModeNames=list( current_song=current_song if(JUKEMODE_PLAY_ONCE) playing=0 + update_icon() return - if(!playing) - return update_music() /obj/machinery/media/jukebox/update_music() - if(current_song) + if(current_song && playing) var/datum/song_info/song = playlist[current_song] media_url = song.url media_start_time = world.time - visible_message("\icon[src] \The [src] begins to play \"[song.title]\", by [song.artist].","You hear music.") + visible_message("\icon[src] \The [src] begins to play [song.display()].","You hear music.") //visible_message("\icon[src] \The [src] warbles: [song.length/10]s @ [song.url]") else media_url="" media_start_time = 0 - ..() \ No newline at end of file + ..() + +/obj/machinery/media/jukebox/proc/stop_playing() + current_song=0 + playing=0 + update_music() + return diff --git a/icons/obj/jukebox.dmi b/icons/obj/jukebox.dmi index c896b98bfcc3518e2b0d0671d95084d0d76b862b..5889237f24da22ec6973fba2041cf8bfa49bb138 100644 GIT binary patch literal 4691 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 literal 7346 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