/obj/item/storage/slide_projector name = "slide projector" desc = "A handy device capable of showing an enlarged projection of whatever you can fit inside." icon = 'icons/obj/projector.dmi' icon_state = "projector0" max_w_class = WEIGHT_CLASS_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/mechanics_hints(mob/user, distance, is_adjacent) . += ..() . += "You can use this in-hand or click-drag it to yourself to to open its interface." . += "Click anywhere with it in your hand, or click-drag it, to project at that location." /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(istype(target, /obj/structure/table) && proximity_flag) return 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/mouse_drop_dragged(atom/over, mob/user, src_location, over_location, params) if(use_check_and_message(user)) return if(over == user) interact(user) return var/turf/T = get_turf(over) if(istype(T)) afterattack(over, user) /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) UnregisterSignal(src, COMSIG_MOVABLE_MOVED) 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) RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(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 += "