/obj/item/storage/slide_projector name = "slide projector" desc = "A handy device capable of showing an enlarged projection of whatever you can fit inside." desc_info = "You can use this in hand to open the interface, click-dragging it to you also works. Click anywhere with it in your hand to project at that location. Click dragging it to that location also works." icon = 'icons/obj/projector.dmi' icon_state = "projector0" max_w_class = ITEMSIZE_SMALL max_storage_space = 10 use_sound = 'sound/items/storage/toolbox.ogg' var/static/list/projection_types = list( /obj/item/photo = /obj/effect/projection/photo, /obj/item/paper = /obj/effect/projection/paper, /obj/item = /obj/effect/projection ) var/obj/item/current_slide var/obj/effect/projection/projection /obj/item/storage/slide_projector/Destroy() QDEL_NULL(current_slide) QDEL_NULL(projection) return ..() /obj/item/storage/slide_projector/update_icon() icon_state = "projector[!!projection]" /obj/item/storage/slide_projector/remove_from_storage(obj/item/W) . = ..() if(. && W == current_slide) set_slide(length(contents) ? contents[1] : null) /obj/item/storage/slide_projector/handle_item_insertion(var/obj/item/W) . = ..() if(. && !current_slide) set_slide(W) /obj/item/storage/slide_projector/afterattack(atom/target, mob/user, proximity_flag, click_parameters) if(!current_slide) to_chat(user, SPAN_WARNING("\The [src] does not have a slide loaded.")) return project_at(get_turf(target)) /obj/item/storage/slide_projector/MouseDrop(atom/over) if(use_check_and_message(usr)) return if(over == usr) interact(usr) return var/turf/T = get_turf(over) if(istype(T)) afterattack(over, usr) /obj/item/storage/slide_projector/proc/set_slide(obj/item/new_slide) current_slide = new_slide playsound(loc, 'sound/machines/slide_change.ogg', 50) if(projection) project_at(get_turf(projection)) /obj/item/storage/slide_projector/proc/check_projections() if(!projection) return if(!(projection in view(7,get_turf(src)))) stop_projecting() /obj/item/storage/slide_projector/proc/stop_projecting() if(projection) QDEL_NULL(projection) moved_event.unregister(src, src, .proc/check_projections) set_light(0) update_icon() /obj/item/storage/slide_projector/proc/project_at(turf/target) stop_projecting() if(!current_slide) return var/projection_type for(var/T in projection_types) if(istype(current_slide, T)) projection_type = projection_types[T] break projection = new projection_type(target) projection.set_source(current_slide) moved_event.register(src, src, .proc/check_projections) set_light(1.4, 0.1, COLOR_WHITE) //Bit of light update_icon() /obj/item/storage/slide_projector/attack_self(mob/user) interact(user) /obj/item/storage/slide_projector/interact(mob/user) var/data = list() if(projection) data += "Disable Projector" else data += "Projector Inactive" var/table = list("
| # | SLIDE | SHOW | ||
|---|---|---|---|---|
| #[i] | " if(I == current_slide) table += "[I.name] | SHOWING | " else table += "[I.name] | SHOW | " table += "