diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index da6d422d4e6..962d7792f93 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -5,7 +5,7 @@ icon_state = "" flags = CONDUCT w_class = WEIGHT_CLASS_SMALL - materials = list(MAT_METAL=100) + materials = list(MAT_METAL = 100) throwforce = 2 throw_speed = 3 throw_range = 10 @@ -18,7 +18,7 @@ var/secured = 1 var/list/attached_overlays = null var/obj/item/assembly_holder/holder = null - var/cooldown = 0//To prevent spam + var/cooldown = 0 //To prevent spam var/wires = WIRE_RECEIVE | WIRE_PULSE var/datum/wires/connected = null // currently only used by timer/signaler @@ -28,173 +28,119 @@ var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate() var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message - proc/activate() //What the device does when turned on - return +/obj/item/assembly/proc/activate() //What the device does when turned on + return - proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs - return +/obj/item/assembly/proc/pulsed(radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs + return - proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct - return +/obj/item/assembly/proc/pulse(radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct + return - proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here - return +/obj/item/assembly/proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here + return - proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another - return +/obj/item/assembly/proc/attach_assembly(obj/A, mob/user) //Called when an assembly is attacked by another + return - proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var - return +/obj/item/assembly/proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var + return - proc/holder_movement() //Called when the holder is moved - return +/obj/item/assembly/proc/holder_movement() //Called when the holder is moved + return - proc/describe() // Called by grenades to describe the state of the trigger (time left, etc) - return "The trigger assembly looks broken!" +/obj/item/assembly/proc/describe() // Called by grenades to describe the state of the trigger (time left, etc) + return "The trigger assembly looks broken!" +/obj/item/assembly/interact(mob/user) //Called when attack_self is called + return - interact(mob/user as mob) //Called when attack_self is called - return - - process_cooldown() - cooldown-- - if(cooldown <= 0) return 0 - spawn(10) - process_cooldown() - return 1 - - Destroy() - if(istype(src.loc, /obj/item/assembly_holder) || istype(holder)) - var/obj/item/assembly_holder/A = src.loc - if(A.a_left == src) - A.a_left = null - else if(A.a_right == src) - A.a_right = null - src.holder = null - return ..() - - pulsed(var/radio = 0) - if(holder && (wires & WIRE_RECEIVE)) - activate() - if(radio && (wires & WIRE_RADIO_RECEIVE)) - activate() - return 1 - - - pulse(var/radio = 0) - if(holder && (wires & WIRE_PULSE)) - holder.process_activation(src, 1, 0) - if(holder && (wires & WIRE_PULSE_SPECIAL)) - holder.process_activation(src, 0, 1) -// if(connected && (wires & WIRE_PULSE)) -// connected.Pulse(src) -// if(radio && (wires & WIRE_RADIO_PULSE)) - //Not sure what goes here quite yet send signal? - - if(istype(loc,/obj/item/grenade)) // This is a hack. Todo: Manage this better -Sayu - var/obj/item/grenade/G = loc - G.prime() // Adios, muchachos - - - return 1 - - - activate() - if(!secured || (cooldown > 0)) return 0 - cooldown = 2 - spawn(10) - process_cooldown() - return 1 - - - toggle_secure() - secured = !secured - update_icon() - return secured - - - attach_assembly(var/obj/item/assembly/A, var/mob/user) - holder = new/obj/item/assembly_holder(get_turf(src)) - if(holder.attach(A,src,user)) - to_chat(user, "You attach \the [A] to \the [src]!") - return 1 +/obj/item/assembly/process_cooldown() + cooldown-- + if(cooldown <= 0) return 0 + spawn(10) + process_cooldown() + return 1 +/obj/item/assembly/Destroy() + if(istype(loc, /obj/item/assembly_holder) || istype(holder)) + var/obj/item/assembly_holder/A = loc + if(A.a_left == src) + A.a_left = null + else if(A.a_right == src) + A.a_right = null + holder = null + return ..() - attackby(obj/item/W as obj, mob/user as mob, params) - if(isassembly(W)) - var/obj/item/assembly/A = W - if((!A.secured) && (!secured)) - attach_assembly(A,user) - return - if(istype(W, /obj/item/screwdriver)) - if(toggle_secure()) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be attached!") +/obj/item/assembly/pulsed(radio = 0) + if(holder && (wires & WIRE_RECEIVE)) + activate() + if(radio && (wires & WIRE_RADIO_RECEIVE)) + activate() + return 1 + +/obj/item/assembly/pulse(radio = 0) + if(holder && (wires & WIRE_PULSE)) + holder.process_activation(src, 1, 0) + if(holder && (wires & WIRE_PULSE_SPECIAL)) + holder.process_activation(src, 0, 1) + if(istype(loc, /obj/item/grenade)) // This is a hack. Todo: Manage this better -Sayu + var/obj/item/grenade/G = loc + G.prime() // Adios, muchachos + return 1 + +/obj/item/assembly/activate() + if(!secured || (cooldown > 0)) + return 0 + cooldown = 2 + spawn(10) + process_cooldown() + return 1 + +/obj/item/assembly/toggle_secure() + secured = !secured + update_icon() + return secured + +/obj/item/assembly/attach_assembly(obj/item/assembly/A, mob/user) + holder = new /obj/item/assembly_holder(get_turf(src)) + if(holder.attach(A, src, user)) + to_chat(user, "You attach [A] to [src]!") + return 1 + return 0 + +/obj/item/assembly/attackby(obj/item/W, mob/user, params) + if(isassembly(W)) + var/obj/item/assembly/A = W + if((!A.secured) && (!secured)) + attach_assembly(A, user) return - ..() + if(isscrewdriver(W)) + if(toggle_secure()) + to_chat(user, "[src] is ready!") + else + to_chat(user, "[src] can now be attached!") return + ..() +/obj/item/assembly/process() + processing_objects.Remove(src) - process() - processing_objects.Remove(src) +/obj/item/assembly/examine(mob/user) + ..() + if((in_range(src, user) || loc == user)) + if(secured) + to_chat(user, "[src] is ready!") + else + to_chat(user, "[src] can be attached!") + +/obj/item/assembly/attack_self(mob/user) + if(!user) return + user.set_machine(src) + interact(user) + return 1 - - examine(mob/user) - ..(user) - if((in_range(src, user) || loc == user)) - if(secured) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can be attached!") - - - attack_self(mob/user as mob) - if(!user) return 0 - user.set_machine(src) - interact(user) - return 1 - - - interact(mob/user as mob) - return //HTML MENU FOR WIRES GOES HERE - -/* - var/small_icon_state = null//If this obj will go inside the assembly use this for icons - var/list/small_icon_state_overlays = null//Same here - var/obj/holder = null - var/cooldown = 0//To prevent spam - - proc - Activate()//Called when this assembly is pulsed by another one - Process_cooldown()//Call this via spawn(10) to have it count down the cooldown var - Attach_Holder(var/obj/H, var/mob/user)//Called when an assembly holder attempts to attach, sets src's loc in here - - - Activate() - if(cooldown > 0) - return 0 - cooldown = 2 - spawn(10) - Process_cooldown() - //Rest of code here - return 0 - - - Process_cooldown() - cooldown-- - if(cooldown <= 0) return 0 - spawn(10) - Process_cooldown() - return 1 - - - Attach_Holder(var/obj/H, var/mob/user) - if(!H) return 0 - if(!H.IsAssemblyHolder()) return 0 - //Remember to have it set its loc somewhere in here - - -*/ +/obj/item/assembly/interact(mob/user) + return \ No newline at end of file diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index fb159abf5bb..c08b9246e33 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -2,7 +2,7 @@ name = "proximity sensor" desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" - materials = list(MAT_METAL=800, MAT_GLASS=200) + materials = list(MAT_METAL = 800, MAT_GLASS = 200) origin_tech = "magnets=1;engineering=1" secured = 0 @@ -13,142 +13,122 @@ var/timing = 0 var/time = 10 - proc - toggle_scan() - sense() - - describe() - if(timing) - return "The proximity sensor is arming." - return "The proximity sensor is [scanning?"armed":"disarmed"]." - - activate() - if(!..()) return 0//Cooldown check - timing = !timing - update_icon() - return 0 - - - toggle_secure() - secured = !secured - if(secured) - processing_objects.Add(src) - else - scanning = 0 - timing = 0 - processing_objects.Remove(src) - update_icon() - return secured - - - HasProximity(atom/movable/AM as mob|obj) - if(!isobj(AM) && !isliving(AM)) - return - if(istype(AM, /obj/effect)) return - if(AM.move_speed < 12) sense() - return - - - sense() - if((!secured)||(!scanning)||(cooldown > 0)) return 0 - pulse(0) - visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") - cooldown = 2 - spawn(10) - process_cooldown() - return - - - process() - if(timing && (time >= 0)) - time-- - if(timing && time <= 0) - timing = 0 - toggle_scan() - time = 10 - return - - - dropped() - ..() - spawn(0) - sense() - return - return - - - toggle_scan() - if(!secured) return 0 - scanning = !scanning - update_icon() - return - +/obj/item/assembly/prox_sensor/describe() + if(timing) + return "The proximity sensor is arming." + return "The proximity sensor is [scanning ? "armed" : "disarmed"]." +/obj/item/assembly/prox_sensor/activate() + if(!..()) + return 0 //Cooldown check + timing = !timing update_icon() - overlays.Cut() - attached_overlays = list() - if(timing) - overlays += "prox_timing" - attached_overlays += "prox_timing" - if(scanning) - overlays += "prox_scanning" - attached_overlays += "prox_scanning" - if(holder) - holder.update_icon() + return 0 + +/obj/item/assembly/prox_sensor/toggle_secure() + secured = !secured + if(secured) + processing_objects.Add(src) + else + scanning = 0 + timing = 0 + processing_objects.Remove(src) + update_icon() + return secured + +/obj/item/assembly/prox_sensor/HasProximity(atom/movable/AM) + if(!isobj(AM) && !isliving(AM)) return + if(istype(AM, /obj/effect)) + return + if(AM.move_speed < 12) + sense() +/obj/item/assembly/prox_sensor/proc/sense() + if((!secured)||(!scanning)||(cooldown > 0)) + return 0 + pulse(0) + visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") + cooldown = 2 + spawn(10) + process_cooldown() - Move() - ..() +/obj/item/assembly/prox_sensor/process() + if(timing && (time >= 0)) + time-- + if(timing && time <= 0) + timing = 0 + toggle_scan() + time = 10 + +/obj/item/assembly/prox_sensor/dropped() + ..() + spawn(0) sense() return - holder_movement() - sense() +/obj/item/assembly/prox_sensor/proc/toggle_scan() + if(!secured) + return 0 + scanning = !scanning + update_icon() +/obj/item/assembly/prox_sensor/update_icon() + overlays.Cut() + attached_overlays = list() + if(timing) + overlays += "prox_timing" + attached_overlays += "prox_timing" + if(scanning) + overlays += "prox_scanning" + attached_overlays += "prox_scanning" + if(holder) + holder.update_icon() - interact(mob/user as mob)//TODO: Change this to the wires thingy - if(!secured) - user.show_message("The [name] is unsecured!") - return 0 - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Proximity Sensor\n[] []:[]\n- - + +\n", (timing ? "Arming" : "Not Arming"), minute, second) - dat += "
[scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)" - dat += "

Refresh" - dat += "

Close" - var/datum/browser/popup = new(user, "prox", name, 400, 400) - popup.set_content(dat) - popup.open(0) - onclose(user, "prox") +/obj/item/assembly/prox_sensor/Move() + ..() + sense() + +/obj/item/assembly/prox_sensor/holder_movement() + sense() + +/obj/item/assembly/prox_sensor/interact(mob/user)//TODO: Change this to the wires thingy + if(!secured) + user.show_message("The [name] is unsecured!") + return 0 + var/second = time % 60 + var/minute = (time - second) / 60 + var/dat = text("Proximity Sensor\n[] []:[]\n- - + +\n", (timing ? "Arming" : "Not Arming"), minute, second) + dat += "
[scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)" + dat += "

Refresh" + dat += "

Close" + var/datum/browser/popup = new(user, "prox", name, 400, 400) + popup.set_content(dat) + popup.open(0) + onclose(user, "prox") + +/obj/item/assembly/prox_sensor/Topic(href, href_list) + ..() + if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + usr << browse(null, "window=prox") + onclose(usr, "prox") return + if(href_list["scanning"]) + toggle_scan() - Topic(href, href_list) - ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=prox") - onclose(usr, "prox") - return - - if(href_list["scanning"]) - toggle_scan() - - if(href_list["time"]) - timing = text2num(href_list["time"]) - update_icon() - - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 600) - - if(href_list["close"]) - usr << browse(null, "window=prox") - return - - if(usr) - attack_self(usr) + if(href_list["time"]) + timing = text2num(href_list["time"]) + update_icon() + if(href_list["tp"]) + var/tp = text2num(href_list["tp"]) + time += tp + time = min(max(round(time), 0), 600) + if(href_list["close"]) + usr << browse(null, "window=prox") return + + if(usr) + attack_self(usr) \ No newline at end of file