Files
GS13NG/code/modules/clothing/glasses/engine_goggles.dm
T

137 lines
3.7 KiB
Plaintext

//Engineering Mesons
/obj/item/clothing/glasses/meson/engine
name = "Engineering Scanner Goggles"
desc = "Goggles used by engineers. The Meson Scanner mode lets you see basic structural and terrain layouts through walls, regardless of lighting condition. The T-ray Scanner mode lets you see underfloor objects such as cables and pipes."
icon_state = "trayson-meson"
actions_types = list(/datum/action/item_action/toggle_mode)
origin_tech = "materials=3;magnets=3;engineering=3;plasmatech=3"
var/mode = 0 //0 - regular mesons mode 1 - t-ray mode
var/invis_objects = list()
var/range = 1
/obj/item/clothing/glasses/meson/engine/attack_self(mob/user)
mode = !mode
if(mode)
START_PROCESSING(SSobj, src)
vision_flags = 0
darkness_view = 2
invis_view = SEE_INVISIBLE_LIVING
user << "<span class='notice'>You toggle the goggles' scanning mode to \[T-Ray].</span>"
else
STOP_PROCESSING(SSobj, src)
vision_flags = SEE_TURFS
darkness_view = 1
invis_view = SEE_INVISIBLE_MINIMUM
loc << "<span class='notice'>You toggle the goggles' scanning mode to \[Meson].</span>"
invis_update()
if(ishuman(user))
var/mob/living/carbon/human/H = user
if(H.glasses == src)
H.update_sight()
update_icon()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/glasses/meson/engine/process()
if(!mode)
return
if(!istype(loc,/mob/living/carbon/human))
invis_update()
return
var/mob/living/carbon/human/user = loc
if(user.glasses != src)
invis_update()
return
scan()
/obj/item/clothing/glasses/meson/engine/proc/scan()
for(var/turf/T in range(range, loc))
if(!T.intact)
continue
for(var/obj/O in T.contents)
if(O.level != 1)
continue
if(O.invisibility == INVISIBILITY_MAXIMUM)
O.invisibility = 0
invis_objects += O
addtimer(src, "invis_update", 5)
/obj/item/clothing/glasses/meson/engine/proc/invis_update()
for(var/obj/O in invis_objects)
if(!t_ray_on() || !(O in range(range, loc)))
invis_objects -= O
var/turf/T = O.loc
if(T && T.intact)
O.invisibility = INVISIBILITY_MAXIMUM
/obj/item/clothing/glasses/meson/engine/proc/t_ray_on()
if(!istype(loc,/mob/living/carbon/human))
return 0
var/mob/living/carbon/human/user = loc
return mode & (user.glasses == src)
/obj/item/clothing/glasses/meson/engine/update_icon()
icon_state = mode ? "trayson-tray" : "trayson-meson"
if(istype(loc,/mob/living/carbon/human/))
var/mob/living/carbon/human/user = loc
if(user.glasses == src)
user.update_inv_glasses()
/obj/item/clothing/glasses/meson/engine/tray //atmos techs have lived far too long without tray goggles while those damned engineers get their dual-purpose gogles all to themselves
name = "Optical T-Ray Scanner"
desc = "Used by engineering staff to see underfloor objects such as cables and pipes."
icon_state = "trayson-tray_off"
origin_tech = "materials=3;magnets=2;engineering=2"
mode = 1
var/on = 0
vision_flags = 0
darkness_view = 2
invis_view = SEE_INVISIBLE_LIVING
range = 2
/obj/item/clothing/glasses/meson/engine/tray/process()
if(!on)
return
..()
/obj/item/clothing/glasses/meson/engine/tray/update_icon()
icon_state = "trayson-tray[on ? "" : "_off"]"
if(istype(loc,/mob/living/carbon/human/))
var/mob/living/carbon/human/user = loc
if(user.glasses == src)
user.update_inv_glasses()
/obj/item/clothing/glasses/meson/engine/tray/attack_self(mob/user)
on = !on
if(on)
START_PROCESSING(SSobj, src)
user << "<span class='notice'>You turn the goggles on.</span>"
else
STOP_PROCESSING(SSobj, src)
user << "<span class='notice'>You turn the goggles off.</span>"
invis_update()
update_icon()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/obj/item/clothing/glasses/meson/engine/tray/t_ray_on()
return on && ..()