//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 /obj/item/device/assembly/infra name = "infrared emitter" desc = "Emits a visible or invisible beam and is triggered when the beam is interrupted." icon_state = "infrared" origin_tech = list(TECH_MAGNET = 2) matter = list(DEFAULT_WALL_MATERIAL = 1000, "glass" = 500, "waste" = 100) wires = WIRE_PULSE secured = 0 var/on = 0 var/visible = 0 var/obj/effect/beam/i_beam/first = null /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) START_PROCESSING(SSobj, src) else on = 0 if(first) qdel(first) STOP_PROCESSING(SSobj, src) update_icon() return secured /obj/item/device/assembly/infra/update_icon() overlays.Cut() attached_overlays = list() if(on) overlays += "infrared_on" attached_overlays += "infrared_on" if(holder) holder.update_icon() return /obj/item/device/assembly/infra/process()//Old code if(!on) if(first) qdel(first) return if((!(first) && (secured && (istype(loc, /turf) || (holder && istype(holder.loc, /turf)))))) var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam((holder ? holder.loc : loc) ) I.master = src I.density = 1 I.set_dir(dir) step(I, I.dir) if(I) I.density = 0 first = I I.vis_spread(visible) spawn(0) if(I) //to_world("infra: setting limit") I.limit = 8 //to_world("infra: processing beam \ref[I]") I.process() return return /obj/item/device/assembly/infra/attack_hand() qdel(first) ..() return /obj/item/device/assembly/infra/Move() var/t = dir ..() set_dir(t) qdel(first) return /obj/item/device/assembly/infra/holder_movement() if(!holder) return 0 // set_dir(holder.dir) qdel(first) 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" dat += "

Close" user << browse(dat, "window=infra") onclose(user, "infra") return /obj/item/device/assembly/infra/Topic(href, href_list, state = deep_inventory_state) if(..()) return 1 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) spawn(0) if(first) first.vis_spread(visible) if(href_list["close"]) usr << browse(null, "window=infra") return if(usr) attack_self(usr) return /obj/item/device/assembly/infra/verb/rotate_clockwise() set name = "Rotate Infrared Laser Clockwise" set category = "Object" set src in usr src.set_dir(turn(src.dir, 270)) return /***************************IBeam*********************************/ /obj/effect/beam/i_beam name = "i beam" icon = 'icons/obj/projectiles.dmi' icon_state = "ibeam" var/obj/effect/beam/i_beam/next = null var/obj/item/device/assembly/infra/master = null var/limit = null var/visible = 0.0 var/left = null anchored = 1.0 /obj/effect/beam/i_beam/proc/hit() if(master) master.trigger_beam() qdel(src) return /obj/effect/beam/i_beam/proc/vis_spread(v) //to_world("i_beam \ref[src] : vis_spread") visible = v spawn(0) if(next) //to_world("i_beam \ref[src] : is next [next.type] \ref[next], calling spread") next.vis_spread(v) return return /obj/effect/beam/i_beam/process() if((loc && loc.density) || !master) qdel(src) return if(left > 0) left-- if(left < 1) if(!(visible)) invisibility = 101 else invisibility = 0 else invisibility = 0 //to_world("now [src.left] left") var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc) I.master = master I.density = 1 I.set_dir(dir) //to_world("created new beam \ref[I] at [I.x] [I.y] [I.z]") step(I, I.dir) if(I) //to_world("step worked, now at [I.x] [I.y] [I.z]") if(!(next)) //to_world("no next") I.density = 0 //to_world("spreading") I.vis_spread(visible) next = I spawn(0) //to_world("limit = [limit] ") if((I && limit > 0)) I.limit = limit - 1 //to_world("calling next process") I.process() return else //to_world("is a next: \ref[next], deleting beam \ref[I]") qdel(I) else //to_world("step failed, deleting \ref[next]") qdel(next) spawn(10) process() return return /obj/effect/beam/i_beam/Bump() qdel(src) return /obj/effect/beam/i_beam/Bumped() hit() return /obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) if(AM.is_incorporeal()) return if(istype(AM, /obj/effect/beam)) return spawn(0) hit() return return /obj/effect/beam/i_beam/Destroy() . = ..() if(master.first == src) master.first = null if(next && !next.gc_destroyed) QDEL_NULL(next)