/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 = 0
var/on = 0
var/visible = 0
var/obj/effect/beam/infrared/beam = null
accessible_values = list(
"Visible" = "visible;number",\
"On" = "on;number"
)
New()
qdel(src) // Why is this even
///obj/item/device/assembly/infra/describe()
// return "The infrared trigger is [on?"on":"off"]."
/obj/item/device/assembly/infra/activate()
if(!..())
return 0//Cooldown check
on = !on
update_icon()
return 1
/obj/item/device/assembly/infra/toggle_secure()
secured = !secured
if(secured)
processing_objects.Add(src)
else
on = 0
if(beam)
qdel(beam)
processing_objects.Remove(src)
update_icon()
return secured
/obj/item/device/assembly/infra/update_icon()
overlays.len = 0
attached_overlays = list()
if(on)
attached_overlays += "infrared_on"
overlays += image(icon = icon, icon_state = "infrared_on")
if(holder)
holder.update_icon()
return
/obj/item/device/assembly/infra/process()//Old code
if(1)
return PROCESS_KILL
if(!on && beam)
qdel(beam)
return
if(beam || !secured)
return
var/turf/T = null
if(isturf(loc))
T = get_turf(src)
else if (holder)
if (istype(holder.loc,/turf))
T = holder.loc
else if (isturf(holder.loc.loc)) //for onetankbombs and other tertiary builds with assemblies
T = holder.loc.loc
else if(istype(loc,/obj/item/weapon/grenade) && isturf(loc.loc))
T = loc.loc
if(T)
if(!beam)
beam = new /obj/effect/beam/infrared(T)
beam.visible=visible
beam.emit(src)
return
/obj/item/device/assembly/infra/attack_hand()
qdel(beam)
..()
return
/obj/item/device/assembly/infra/Move()
var/t = dir
..()
dir = t
qdel(beam)
return
/obj/item/device/assembly/infra/holder_movement()
if(!holder)
return 0
// dir = holder.dir
qdel(beam)
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()
return
/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("Infrared Laser\nStatus: []
\nVisibility: []
\n", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src)))
dat += {"
Refresh
Close"}
user << browse(dat, "window=infra")
onclose(user, "infra")
return
/obj/item/device/assembly/infra/Topic(href, href_list)
..()
if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=infra")
onclose(usr, "infra")
return
if(href_list["state"])
on = !(on)
update_icon()
if(href_list["visible"])
visible = !(visible)
if(beam)
beam.set_visible(visible)
if(href_list["close"])
usr << browse(null, "window=infra")
return
if(usr)
attack_self(usr)
return
/obj/item/device/assembly/infra/verb/rotate()//This could likely be better
set name = "Rotate Infrared Laser"
set category = "Object"
set src in usr
dir = turn(dir, 90)
return
/***************************IBeam*********************************/
/obj/effect/beam/infrared
name = "i beam"
icon = 'icons/obj/projectiles.dmi'
icon_state = "ibeam"
var/limit = null
var/visible = 0.0
var/left = null
anchored = 1.0
flags = 0
var/obj/item/device/assembly/infra/assembly
/obj/effect/beam/infrared/proc/hit()
if(assembly)
assembly.trigger_beam()
/obj/effect/beam/infrared/Crossed(atom/movable/O)
..(O)
if(O && O.density && !istype(O, /obj/effect/beam))
hit()
/obj/effect/beam/infrared/proc/set_visible(v)
visible = v
if(next)
var/obj/effect/beam/infrared/B=next
B.set_visible(v)
/obj/effect/beam/infrared/Bumped()
hit()
..()
/obj/effect/beam/infrared/spawn_child()
var/obj/effect/beam/infrared/B = ..()
if(!B)
return null
B.visible=visible
return B