/obj/item/device/assembly/infra
name = "infrared emitter"
short_name = "IR emitter"
desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted."
icon_state = "infrared"
starting_materials = list(MAT_IRON = 1000, MAT_GLASS = 500)
w_type = RECYK_ELECTRONIC
origin_tech = Tc_MAGNETS + "=2"
wires = WIRE_PULSE
secured = TRUE
var/on = FALSE
var/visible = TRUE
var/obj/effect/beam/infrared/beam = null
accessible_values = list(
"Visible" = "visible;number",\
"On" = "on;number"
)
/obj/item/device/assembly/infra/New(var/turf/loc)
..()
update_icon()
/obj/item/device/assembly/infra/Destroy(var/turf/loc)
processing_objects.Remove(src)
if (beam)
qdel(beam)
beam = null
..()
/obj/item/device/assembly/infra/examine(var/mob/user)
..()
to_chat(user, "The trigger is [on?"on":"off"].")
to_chat(user, "The lens is facing [dir2text(dir)].")
/obj/item/device/assembly/infra/activate()
if(!..())
return 0//Cooldown check
on = !on
var/turf/T = get_turf(src)
if (T)
playsound(T,'sound/misc/click.ogg',30,0,-5)
if (on)
processing_objects.Add(src)
playsound(T,'sound/weapons/egun_toggle_laser.ogg',70,0,-5)
process()
else
if (beam)
qdel(beam)
beam = null
processing_objects.Remove(src)
playsound(T,'sound/weapons/egun_toggle_taser.ogg',70,0,-5)
update_icon()
return 1
/obj/item/device/assembly/infra/toggle_secure()
secured = !secured
if(!secured)
on = FALSE
if(beam)
qdel(beam)
beam = null
processing_objects.Remove(src)
update_icon()
return secured
/obj/item/device/assembly/infra/update_icon()
overlays.len = 0
attached_overlays = list()
attached_overlays["infrared_aim"] = image(icon = icon, icon_state = "infrared_aim", dir = dir)
overlays += attached_overlays["infrared_aim"]
if(on && visible)
var/image/I = image(icon = icon, icon_state = "infrared_on", dir = dir)
I.layer = ABOVE_LIGHTING_LAYER
I.plane = ABOVE_LIGHTING_PLANE
attached_overlays["infrared_on"] = I
overlays += attached_overlays["infrared_on"]
if(holder)
holder.update_icon()
/obj/item/device/assembly/infra/process()
if(!on)
if (beam)
qdel(beam)
beam = null
return
if(beam || !secured)
return
var/turf/T = null
if(isturf(loc))//is it on the floor?
T = get_turf(src)
else if (holder)
if (istype(holder.loc,/turf))//or in an assembly that's on the floor?
T = holder.loc
else if (holder.master && isturf(holder.loc.loc)) //or in an assembly rigging something that's on the floor?
T = holder.loc.loc
else if(isobj(loc) && isturf(loc.loc)) // or in a grenade on the floor/wired item? (can it even activate grenades without igniters?)
T = loc.loc
if(T)
if(!beam)
beam = new /obj/effect/beam/infrared(T)
beam.visible=visible
beam.dir = dir
beam.assembly = src
beam.emit(src)
/obj/item/device/assembly/infra/attack_hand()
if (beam)
qdel(beam)
beam = null
..()
/obj/item/device/assembly/infra/Move(NewLoc, Dir = 0, step_x = 0, step_y = 0, glide_size_override = 0)
var/t = dir
..()
dir = t
if (beam)
qdel(beam)
beam = null
/obj/item/device/assembly/infra/holder_movement()
if(!holder)
return 0
dir = holder.dir
holder.update_icon()
if (beam)
qdel(beam)
beam = null
return 1
/obj/item/device/assembly/infra/proc/trigger_beam()
if((!secured)||(!on)||(cooldown > 0))
return 0
pulse(0)
if(!holder)
visible_message("[bicon(src)] *beep* *beep*")
cooldown = 2
spawn(10)
process_cooldown()
/obj/item/device/assembly/infra/interact(mob/user as mob)//TODO: change this this to the wire control panel
if(!secured)
return
user.set_machine(src)
var/dat = text("Status: []
\nVisibility: []
", (on ? text("ON", src) : text("OFF", src)), (src.visible ? text("visible", src) : text("infrared", src)))
dat += {"Direction: [dir2text(dir)]
"}
dat += {"
Refresh
Close"}
user << browse("