Files
CHOMPStation2/code/modules/detectivework/tools/uvlight.dm
2016-10-09 18:55:29 -04:00

70 lines
1.9 KiB
Plaintext

/obj/item/device/uv_light
name = "\improper UV light"
desc = "A small handheld black light."
icon_state = "uv_off"
slot_flags = SLOT_BELT
w_class = ITEMSIZE_SMALL
item_state = "electronic"
action_button_name = "Toggle UV light"
matter = list(DEFAULT_WALL_MATERIAL = 150)
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
var/list/scanned = list()
var/list/stored_alpha = list()
var/list/reset_objects = list()
var/range = 3
var/on = 0
var/step_alpha = 50
/obj/item/device/uv_light/attack_self(var/mob/user)
on = !on
if(on)
set_light(range, 2, "#007fff")
processing_objects |= src
icon_state = "uv_on"
else
set_light(0)
clear_last_scan()
processing_objects -= src
icon_state = "uv_off"
/obj/item/device/uv_light/proc/clear_last_scan()
if(scanned.len)
for(var/atom/O in scanned)
O.invisibility = scanned[O]
if(O.fluorescent == 2) O.fluorescent = 1
scanned.Cut()
if(stored_alpha.len)
for(var/atom/O in stored_alpha)
O.alpha = stored_alpha[O]
if(O.fluorescent == 2) O.fluorescent = 1
stored_alpha.Cut()
if(reset_objects.len)
for(var/obj/item/I in reset_objects)
I.overlays -= I.blood_overlay
if(I.fluorescent == 2) I.fluorescent = 1
reset_objects.Cut()
/obj/item/device/uv_light/process()
clear_last_scan()
if(on)
step_alpha = round(255/range)
var/turf/origin = get_turf(src)
if(!origin)
return
for(var/turf/T in range(range, origin))
var/use_alpha = 255 - (step_alpha * get_dist(origin, T))
for(var/atom/A in T.contents)
if(A.fluorescent == 1)
A.fluorescent = 2 //To prevent light crosstalk.
if(A.invisibility)
scanned[A] = A.invisibility
A.invisibility = 0
stored_alpha[A] = A.alpha
A.alpha = use_alpha
if(istype(A, /obj/item))
var/obj/item/O = A
if(O.was_bloodied && !(O.blood_overlay in O.overlays))
O.overlays |= O.blood_overlay
reset_objects |= O