/* Contains: - Laser tripwire - Infrared sensor - Remote signaller/tripwire assembly */ //////////////////////////////////////// Laser tripwire ////////////////////////////// /obj/item/device/infra name = "Laser Tripwire" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared0" var/obj/beam/i_beam/first = null var/state = 0.0 var/visible = 0.0 flags = FPRINT | TABLEPASS| CONDUCT w_class = 2.0 item_state = "electronic" m_amt = 150 mats = 3 ///////////////////////////////////////// Infrared sensor /////////////////////////////////////////// /obj/item/device/infra_sensor name = "Infrared Sensor" desc = "Scans for infrared beams in the vicinity." icon_state = "infra_sensor" var/passive = 1.0 flags = FPRINT | TABLEPASS| CONDUCT item_state = "electronic" m_amt = 150 mats = 4 /* When/if someone ever gets around to fixing these uncomment this /obj/item/device/infra_sensor/process() if (src.passive) for(var/obj/beam/i_beam/I in range(2, src.loc)) I.left = 2 return 1 else processing_items.Remove(src) return null /obj/item/device/infra_sensor/proc/burst() for(var/obj/beam/i_beam/I in range(src.loc)) I.left = 10 for(var/obj/item/device/infra/I in range(src.loc)) I.visible = 1 spawn( 0 ) if ((I && I.first)) I.first.vis_spread(1) return for(var/obj/item/assembly/rad_infra/I in range(src.loc)) I.part2.visible = 1 spawn( 0 ) if ((I.part2 && I.part2.first)) I.part2.first.vis_spread(1) return return /obj/item/device/infra_sensor/attack_self(mob/user as mob) user.machine = src var/dat = text("Infrared Sensor

Passive Emitter: []

Active Emitter: Burst Fire
", (src.passive ? text("On", src) : text("Off", src)), src) user << browse(dat, "window=infra_sensor") onclose(user, "infra_sensor") return /obj/item/device/infra_sensor/Topic(href, href_list) ..() if (usr.stat || usr.restrained()) return if ((usr.contents.Find(src) || (usr.contents.Find(src.master) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))))) usr.machine = src if (href_list["passive"]) src.passive = !( src.passive ) if(passive && !(src in processing_items)) processing_items.Add(src) if (href_list["active"]) spawn( 0 ) src.burst() return if (!( src.master )) if (istype(src.loc, /mob)) attack_self(src.loc) else for(var/mob/M in viewers(1, src)) if (M.client) src.attack_self(M) else if (istype(src.master.loc, /mob)) src.attack_self(src.master.loc) else for(var/mob/M in viewers(1, src.master)) if (M.client) src.attack_self(M) src.add_fingerprint(usr) else usr << browse(null, "window=infra_sensor") onclose(usr, "infra_sensor") return return /obj/item/device/infra/proc/hit() if (src.master) spawn() var/datum/signal/signal = new signal.data["message"] = "ACTIVATE" src.master.receive_signal(signal) qdel(signal) return else for(var/mob/O in hearers(null, null)) O.show_message(text("[bicon()] *beep* *beep*", src), 3, "*beep* *beep*", 2) return /obj/item/device/infra/process() if(!state) processing_items.Remove(src) return null if ((!( src.first ) && (src.state && (istype(src.loc, /turf) || (src.master && istype(src.master.loc, /turf)))))) var/obj/beam/i_beam/I = new /obj/beam/i_beam( (src.master ? src.master.loc : src.loc) ) //boutput(world, "infra spawning beam : \ref[I]") I.master = src I.density = 1 I.dir = src.dir step(I, I.dir) if (I) //boutput(world, "infra: beam at [I.x] [I.y] [I.z]") I.density = 0 src.first = I //boutput(world, "infra : vis_spread") I.vis_spread(src.visible) spawn( 0 ) if (I) //boutput(world, "infra: setting limit") I.limit = 20 //boutput(world, "infra: processing beam \ref[I]") I.process() return if (!( src.state )) //src.first = null qdel(src.first) return /obj/item/device/infra/attackby(obj/item/device/radio/signaler/S as obj, mob/user as mob) if ((!( istype(S, /obj/item/device/radio/signaler) ) || !( S.b_stat ))) return var/obj/item/assembly/rad_infra/R = new /obj/item/assembly/rad_infra( user ) S.set_loc(R) R.part1 = S S.layer = initial(S.layer) user.u_equip(S) user.put_in_hand_or_drop(R) S.master = R src.master = R src.layer = initial(src.layer) user.u_equip(src) src.set_loc(R) R.part2 = src R.dir = src.dir src.add_fingerprint(user) return /obj/item/device/infra/attack_self(mob/user as mob) user.machine = src var/dat = text("Infrared Laser
Status: []

Visibility: []

", (src.state ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) user << browse(dat, "window=infra") onclose(user, "infra") return /obj/item/device/infra/Topic(href, href_list) ..() if (usr.stat || usr.restrained()) return if ((usr.contents.Find(src) || usr.contents.Find(src.master) || in_range(src, usr) && istype(src.loc, /turf))) usr.machine = src if (href_list["state"]) src.state = !( src.state ) src.icon_state = text("infrared[]", src.state) if (src.master) src.master:c_state(src.state, src) if(state && !(src in processing_items)) processing_items.Add(src) if (href_list["visible"]) src.visible = !( src.visible ) spawn( 0 ) if (src.first) src.first.vis_spread(src.visible) return if (!( src.master )) if (istype(src.loc, /mob)) attack_self(src.loc) else for(var/mob/M in viewers(1, src)) if (M.client) src.attack_self(M) //Foreach goto(211) else if (istype(src.master.loc, /mob)) src.attack_self(src.master.loc) else for(var/mob/M in viewers(1, src.master)) if (M.client) src.attack_self(M) //Foreach goto(287) else usr << browse(null, "window=infra") onclose(usr, "infra") return return /obj/item/device/infra/attack_hand() //src.first = null qdel(src.first) ..() return /obj/item/device/infra/Move() var/t = src.dir ..() src.dir = t //src.first = null qdel(src.first) return /obj/item/device/infra/verb/rotate() set src in usr src.dir = turn(src.dir, 90) return */ /////////////////////////////////////// Remote signaller/tripwire assembly ///////////////////////////////// /obj/item/assembly/rad_infra name = "Signaller/Infrared Assembly" desc = "An infrared-activated radio signaller" icon_state = "infrared-radio0" var/obj/item/device/radio/signaler/part1 = null var/obj/item/device/infra/part2 = null status = null flags = FPRINT | TABLEPASS| CONDUCT /obj/item/assembly/rad_infra/c_state(n) src.icon_state = text("infrared-radio[]", n) return /* /obj/item/assembly/rad_infra/Del() qdel(src.part1) qdel(src.part2) ..() return /obj/item/assembly/rad_infra/attackby(obj/item/W as obj, mob/user as mob) if ((istype(W, /obj/item/wrench) && !( src.status ))) var/turf/T = src.loc if (ismob(T)) T = T.loc src.part1.set_loc(T) src.part2.set_loc(T) src.part1.master = null src.part2.master = null src.part1 = null src.part2 = null //SN src = null qdel(src) return if (!( istype(W, /obj/item/screwdriver) )) return src.status = !( src.status ) if (src.status) user.show_message("The infrared laser is now secured!", 1) else user.show_message("The infrared laser is now unsecured!", 1) src.part1.b_stat = !( src.status ) src.add_fingerprint(user) return /obj/item/assembly/rad_infra/attack_self(mob/user as mob) src.part1.attack_self(user, src.status) src.part2.attack_self(user, src.status) src.add_fingerprint(user) return /obj/item/assembly/rad_infra/receive_signal(datum/signal/signal) if (signal.source == src.part2) src.part1.send_signal("ACTIVATE") return /obj/item/assembly/rad_infra/verb/rotate() set src in usr src.dir = turn(src.dir, 90) src.part2.dir = src.dir src.add_fingerprint(usr) return /obj/item/assembly/rad_infra/Move() var/t = src.dir ..() src.dir = t //src.part2.first = null qdel(src.part2.first) return /obj/item/assembly/rad_infra/attack_hand(M) qdel(src.part2.first) ..() return */