From 75cb1d2bdfc1fb52ad523dc12f5d8580cee7a557 Mon Sep 17 00:00:00 2001 From: Geeves Date: Wed, 7 Oct 2020 15:11:18 +0200 Subject: [PATCH] Assembly Code Clean-up (#10146) --- code/modules/assembly/assembly.dm | 209 +++------ code/modules/assembly/bomb.dm | 21 +- code/modules/assembly/helpers.dm | 39 +- code/modules/assembly/holder.dm | 419 ++++++++---------- code/modules/assembly/igniter.dm | 26 +- code/modules/assembly/infrared.dm | 325 +++++++------- code/modules/assembly/mousetrap.dm | 104 ++--- code/modules/assembly/proximity.dm | 233 +++++----- code/modules/assembly/shock_kit.dm | 14 +- code/modules/assembly/signaler.dm | 122 ++--- code/modules/assembly/timer.dm | 151 +++---- code/modules/assembly/voice.dm | 34 +- html/changelogs/geeves-augh_old_code.yml | 8 + .../view/devices/assembly/infrared.vue | 22 + .../view/devices/assembly/proximity.vue | 48 ++ .../view/devices/assembly/signaler.vue | 42 ++ .../view/devices/assembly/timer.vue | 36 ++ 17 files changed, 894 insertions(+), 959 deletions(-) create mode 100644 html/changelogs/geeves-augh_old_code.yml create mode 100644 vueui/src/components/view/devices/assembly/infrared.vue create mode 100644 vueui/src/components/view/devices/assembly/proximity.vue create mode 100644 vueui/src/components/view/devices/assembly/signaler.vue create mode 100644 vueui/src/components/view/devices/assembly/timer.vue diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 0bb42ead3fb..54ac19494fd 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -10,13 +10,13 @@ throw_speed = 3 throw_range = 10 drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 1) - var/secured = 1 + var/secured = TRUE var/list/attached_overlays = null var/obj/item/device/assembly_holder/holder = null - var/cooldown = 0//To prevent spam + var/cooldown = 0 //To prevent spam var/wires = WIRE_RECEIVE | WIRE_PULSE var/const/WIRE_RECEIVE = 1 //Allows Pulsed(0) to call Activate() @@ -25,152 +25,87 @@ 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/device/assembly/proc/holder_movement() + 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 +//Called via spawn(10) to have it count down the cooldown var +/obj/item/device/assembly/proc/process_cooldown() + cooldown-- + if(cooldown <= 0) + return FALSE + addtimer(CALLBACK(src, .proc/process_cooldown), 1 SECOND) + return TRUE - 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 +// Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs +/obj/item/device/assembly/proc/pulsed(var/radio = 0) + if(holder && (wires & WIRE_RECEIVE)) + activate() + if(radio && (wires & WIRE_RADIO_RECEIVE)) + activate() + return TRUE - proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here - return +// Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct +/obj/item/device/assembly/proc/pulse(var/radio = 0) + if(holder && (wires & WIRE_PULSE)) + holder.process_activation(src, TRUE, FALSE) + if(holder && (wires & WIRE_PULSE_SPECIAL)) + holder.process_activation(src, FALSE, TRUE) + return TRUE - proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another - return +/obj/item/device/assembly/proc/activate() + if(!secured || cooldown) + return FALSE + cooldown = 2 + addtimer(CALLBACK(src, .proc/process_cooldown), 1 SECOND) + return TRUE - proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var - return +/obj/item/device/assembly/proc/toggle_secure() + secured = !secured + update_icon() + return secured - proc/holder_movement() //Called when the holder is moved - return +// Called when an assembly is attacked by another +/obj/item/device/assembly/proc/attach_assembly(var/obj/item/device/assembly/A, var/mob/user) + holder = new /obj/item/device/assembly_holder(get_turf(src)) + if(holder.attach(A, src, user)) + to_chat(user, SPAN_NOTICE("You attach \the [A] to \the [src]!")) + return TRUE + return FALSE - interact(mob/user as mob) //Called when attack_self is called - return - - - process_cooldown() - cooldown-- - if(cooldown <= 0) return 0 - addtimer(CALLBACK(src, .proc/process_cooldown), 10) - return 1 - - - 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(radio && (wires & WIRE_RADIO_PULSE)) - //Not sure what goes here quite yet send signal? - return 1 - - - activate() - if(!secured || (cooldown > 0)) return 0 - cooldown = 2 - addtimer(CALLBACK(src, .proc/process_cooldown), 10) - return 1 - - - toggle_secure() - secured = !secured - update_icon() - return secured - - - attach_assembly(var/obj/item/device/assembly/A, var/mob/user) - holder = new/obj/item/device/assembly_holder(get_turf(src)) - if(holder.attach(A,src,user)) - to_chat(user, "You attach \the [A] to \the [src]!") - return 1 - return 0 - - - attackby(obj/item/W as obj, mob/user as mob) - if(isassembly(W)) - var/obj/item/device/assembly/A = W - if((!A.secured) && (!secured)) - attach_assembly(A,user) - return - if(W.isscrewdriver()) - if(toggle_secure()) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be attached!") +/obj/item/device/assembly/attackby(obj/item/W, mob/user) + if(isassembly(W)) + var/obj/item/device/assembly/A = W + if(!A.secured && !secured) + attach_assembly(A, user) return - ..() + if(W.isscrewdriver()) + if(toggle_secure()) + to_chat(user, SPAN_NOTICE("\The [src] is ready!")) + else + to_chat(user, SPAN_NOTICE("\The [src] can now be attached!")) return + return ..() + +/obj/item/device/assembly/process() + STOP_PROCESSING(SSprocessing, src) + return - process() - STOP_PROCESSING(SSprocessing, src) - return +/obj/item/device/assembly/examine(mob/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!") - 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!") - return +/obj/item/device/assembly/attack_self(mob/user) + if(!user) + return FALSE + interact(user) + return TRUE - 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/device/assembly/interact(mob/user) + return \ No newline at end of file diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm index 1080fe9e623..aa4df9c2836 100644 --- a/code/modules/assembly/bomb.dm +++ b/code/modules/assembly/bomb.dm @@ -7,7 +7,7 @@ throw_speed = 2 throw_range = 4 flags = CONDUCT | PROXMOVE - var/status = 0 //0 - not readied //1 - bomb finished with welder + var/status = FALSE // FALSE - not readied // TRUE - bomb finished with welder var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device var/obj/item/tank/bombtank = null //the second part of the bomb is a phoron tank @@ -22,7 +22,7 @@ add_overlay(bombassembly) add_overlay("bomb_assembly") -/obj/item/device/onetankbomb/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/device/onetankbomb/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/device/analyzer)) bombtank.attackby(W, user) return @@ -39,21 +39,24 @@ qdel(src) return - if((W.iswelder() && W:welding)) + if(W.iswelder()) + var/obj/item/weldingtool/WT = W + if(!WT.welding) + return if(!status) - status = 1 + status = TRUE bombers += "[key_name(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" message_admins("[key_name_admin(user)] welded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]") to_chat(user, "A pressure hole has been bored to [bombtank] valve. \The [bombtank] can now be ignited.") else - status = 0 + status = FALSE bombers += "[key_name(user)] unwelded a single tank bomb. Temp: [bombtank.air_contents.temperature-T0C]" to_chat(user, "The hole has been closed.") add_fingerprint(user) ..() -/obj/item/device/onetankbomb/attack_self(mob/user as mob) //pressing the bomb accesses its assembly - bombassembly.attack_self(user, 1) +/obj/item/device/onetankbomb/attack_self(mob/user) //pressing the bomb accesses its assembly + bombassembly.attack_self(user, TRUE) add_fingerprint(user) return @@ -73,7 +76,7 @@ // ---------- Procs below are for tanks that are used exclusively in 1-tank bombs ---------- -/obj/item/tank/proc/bomb_assemble(W,user) //Bomb assembly proc. This turns assembly+tank into a bomb +/obj/item/tank/proc/bomb_assemble(W, user) //Bomb assembly proc. This turns assembly+tank into a bomb var/obj/item/device/assembly_holder/S = W var/mob/M = user if(!S.secured) //Check if the assembly is secured @@ -151,4 +154,4 @@ var/turf/simulated/T = get_turf(src) if(!T) return - T.assume_air(removed) + T.assume_air(removed) \ No newline at end of file diff --git a/code/modules/assembly/helpers.dm b/code/modules/assembly/helpers.dm index 2a24c1b7d1f..5fb9437efe8 100644 --- a/code/modules/assembly/helpers.dm +++ b/code/modules/assembly/helpers.dm @@ -1,44 +1,25 @@ /proc/isassembly(O) - if(istype(O, /obj/item/device/assembly)) - return 1 - return 0 + return istype(O, /obj/item/device/assembly) /proc/isigniter(O) - if(istype(O, /obj/item/device/assembly/igniter)) - return 1 - return 0 + return istype(O, /obj/item/device/assembly/igniter) /proc/isinfared(O) - if(istype(O, /obj/item/device/assembly/infra)) - return 1 - return 0 + return istype(O, /obj/item/device/assembly/infra) /proc/isprox(O) - if(istype(O, /obj/item/device/assembly/prox_sensor)) - return 1 - return 0 + return istype(O, /obj/item/device/assembly/prox_sensor) /proc/issignaler(O) - if(istype(O, /obj/item/device/assembly/signaler)) - return 1 - return 0 + return istype(O, /obj/item/device/assembly/signaler) /proc/istimer(O) - if(istype(O, /obj/item/device/assembly/timer)) - return 1 - return 0 - -/* -Name: IsSpecialAssembly -Desc: If true is an object that can be attached to an assembly holder but is a special thing like a phoron can or door -*/ + return istype(O, /obj/item/device/assembly/timer) +// IsSpecialAssemblyIf true is an object that can be attached to an assembly holder but is a special thing like a phoron can or door /obj/proc/IsSpecialAssembly() - return 0 + return FALSE -/* -Name: IsAssemblyHolder -Desc: If true is an object that can hold an assemblyholder object -*/ +// If true is an object that can hold an assemblyholder object /obj/proc/IsAssemblyHolder() - return 0 \ No newline at end of file + return FALSE \ No newline at end of file diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 738cdf95127..027f38da0e1 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -9,277 +9,230 @@ throw_speed = 3 throw_range = 10 - var/secured = 0 + var/secured = FALSE var/obj/item/device/assembly/a_left = null var/obj/item/device/assembly/a_right = null var/obj/special_assembly = null - proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user) - return - - proc/attach_special(var/obj/O, var/mob/user) - return - - proc/process_activation(var/obj/item/device/D) - return - - proc/detached() - return - - - IsAssemblyHolder() - return 1 - - - attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user) - if((!D)||(!D2)) return 0 - if((!isassembly(D))||(!isassembly(D2))) return 0 - if((D:secured)||(D2:secured)) return 0 - if(user) - user.remove_from_mob(D) - user.remove_from_mob(D2) - D:holder = src - D2:holder = src - D.forceMove(src) - D2.forceMove(src) - a_left = D - a_right = D2 - name = "[D.name]-[D2.name] assembly" - update_icon() - usr.put_in_hands(src) - - return 1 - - - attach_special(var/obj/O, var/mob/user) - if(!O) return - if(!O.IsSpecialAssembly()) return 0 - -/* if(O:Attach_Holder()) - special_assembly = O - update_icon() - src.name = "[a_left.name] [a_right.name] [special_assembly.name] assembly" -*/ - return +/obj/item/device/assembly_holder/proc/detached() + return +/obj/item/device/assembly_holder/IsAssemblyHolder() + return TRUE +/obj/item/device/assembly_holder/proc/attach(var/obj/item/device/assembly/D, var/obj/item/device/assembly/D2, var/mob/user) + if(!istype(D) || !istype(D2)) + return FALSE + if(D.secured || D2.secured) + return FALSE + if(user) + user.remove_from_mob(D) + user.remove_from_mob(D2) + D.holder = src + D2.holder = src + D.forceMove(src) + D2.forceMove(src) + a_left = D + a_right = D2 + name = "[D.name]-[D2.name] assembly" update_icon() - cut_overlays() - if(a_left) - add_overlay("[a_left.icon_state]_left") - for(var/O in a_left.attached_overlays) - add_overlay("[O]_l") - if(a_right) - add_overlay("[a_right.icon_state]_right") - for(var/O in a_right.attached_overlays) - add_overlay("[O]_r") - if(master) - master.update_icon() + user.put_in_hands(src) + return TRUE -/* if(special_assembly) - special_assembly.update_icon() - if(special_assembly:small_icon_state) - src.overlays += special_assembly:small_icon_state - for(var/O in special_assembly:small_icon_state_overlays) - src.overlays += O -*/ - - examine(mob/user) - ..(user) - if ((in_range(src, user) || src.loc == user)) - if (src.secured) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can be attached!") +/obj/item/device/assembly_holder/proc/attach_special(var/obj/O, var/mob/user) + if(!O) return + if(!O.IsSpecialAssembly()) + return FALSE + +/obj/item/device/assembly_holder/update_icon() + cut_overlays() + if(a_left) + add_overlay("[a_left.icon_state]_left") + for(var/O in a_left.attached_overlays) + add_overlay("[O]_l") + if(a_right) + add_overlay("[a_right.icon_state]_right") + for(var/O in a_right.attached_overlays) + add_overlay("[O]_r") + if(master) + master.update_icon() + +/obj/item/device/assembly_holder/examine(mob/user) + . = ..(user) + if(. && (in_range(src, user) || src.loc == user)) + if (src.secured) + to_chat(user, SPAN_NOTICE("\The [src] is ready!")) + else + to_chat(user, SPAN_NOTICE("\The [src] can be attached!")) + +/obj/item/device/assembly_holder/HasProximity(atom/movable/AM as mob|obj) + if(a_left) + a_left.HasProximity(AM) + if(a_right) + a_right.HasProximity(AM) + if(special_assembly) + special_assembly.HasProximity(AM) + +/obj/item/device/assembly_holder/Crossed(atom/movable/AM as mob|obj) + if(a_left) + a_left.Crossed(AM) + if(a_right) + a_right.Crossed(AM) + if(special_assembly) + special_assembly.Crossed(AM) + +/obj/item/device/assembly_holder/on_found(mob/finder) + if(a_left) + a_left.on_found(finder) + if(a_right) + a_right.on_found(finder) + if(special_assembly) + if(istype(special_assembly, /obj/item)) + var/obj/item/S = special_assembly + S.on_found(finder) + +/obj/item/device/assembly_holder/Move() + . = ..() + if(a_left && a_right) + a_left.holder_movement() + a_right.holder_movement() - HasProximity(atom/movable/AM as mob|obj) - if(a_left) - a_left.HasProximity(AM) - if(a_right) - a_right.HasProximity(AM) - if(special_assembly) - special_assembly.HasProximity(AM) +/obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess + if(a_left && a_right) + a_left.holder_movement() + a_right.holder_movement() + return ..() - - Crossed(atom/movable/AM as mob|obj) - if(a_left) - a_left.Crossed(AM) - if(a_right) - a_right.Crossed(AM) - if(special_assembly) - special_assembly.Crossed(AM) - - - on_found(mob/finder as mob) - if(a_left) - a_left.on_found(finder) - if(a_right) - a_right.on_found(finder) - if(special_assembly) - if(istype(special_assembly, /obj/item)) - var/obj/item/S = special_assembly - S.on_found(finder) - - - Move() - ..() - if(a_left && a_right) - a_left.holder_movement() - a_right.holder_movement() -// if(special_assembly) -// special_assembly:holder_movement() - return - - - attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess - if(a_left && a_right) - a_left.holder_movement() - a_right.holder_movement() -// if(special_assembly) -// special_assembly:Holder_Movement() - ..() - return - - - attackby(obj/item/W as obj, mob/user as mob) - if(W.isscrewdriver()) - if(!a_left || !a_right) - to_chat(user, "BUG:Assembly part missing, please report this!") - return - a_left.toggle_secure() - a_right.toggle_secure() - secured = !secured - if(secured) - to_chat(user, "\The [src] is ready!") - else - to_chat(user, "\The [src] can now be taken apart!") - update_icon() +/obj/item/device/assembly_holder/attackby(obj/item/W, mob/user) + if(W.isscrewdriver()) + if(!a_left || !a_right) + to_chat(user, SPAN_DANGER("BUG: Assembly part missing, please report this!")) return - else if(W.IsSpecialAssembly()) - attach_special(W, user) + a_left.toggle_secure() + a_right.toggle_secure() + secured = !secured + if(secured) + to_chat(user, SPAN_NOTICE("\The [src] is ready!")) else - ..() + to_chat(user, SPAN_NOTICE("\The [src] can now be taken apart!")) + update_icon() return + else if(W.IsSpecialAssembly()) + attach_special(W, user) + else + return ..() - - attack_self(mob/user as mob) - src.add_fingerprint(user) - if(src.secured) - if(!a_left || !a_right) - to_chat(user, "Assembly part missing!") - return - if(istype(a_left,a_right.type))//If they are the same type it causes issues due to window code - switch(alert("Which side would you like to use?",,"Left","Right")) - if("Left") a_left.attack_self(user) - if("Right") a_right.attack_self(user) - return - else - if(!istype(a_left,/obj/item/device/assembly/igniter)) +/obj/item/device/assembly_holder/attack_self(mob/user) + add_fingerprint(user) + if(secured) + if(!a_left || !a_right) + to_chat(user, SPAN_WARNING("Assembly part missing!")) + return + if(istype(a_left, a_right.type)) //If they are the same type it causes issues due to window code + switch(alert("Which side would you like to use?",,"Left","Right")) + if("Left") a_left.attack_self(user) - if(!istype(a_right,/obj/item/device/assembly/igniter)) + if("Right") a_right.attack_self(user) + return else - var/turf/T = get_turf(src) - if(!T) return 0 - if(a_left) - a_left:holder = null - a_left.forceMove(T) - if(a_right) - a_right:holder = null - a_right.forceMove(T) - QDEL_IN(src, 0) - return + if(!istype(a_left, /obj/item/device/assembly/igniter)) + a_left.attack_self(user) + if(!istype(a_right, /obj/item/device/assembly/igniter)) + a_right.attack_self(user) + else + var/turf/T = get_turf(src) + if(!T) + return FALSE + if(a_left) + a_left.holder = null + a_left.forceMove(T) + if(a_right) + a_right.holder = null + a_right.forceMove(T) + QDEL_IN(src, 1) - process_activation(var/obj/D, var/normal = 1, var/special = 1) - if(!D) return 0 - if(!secured) - visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") - if((normal) && (a_right) && (a_left)) - if(a_right != D) - a_right.pulsed(0) - if(a_left != D) - a_left.pulsed(0) - if(master) - master.receive_signal() -// if(special && special_assembly) -// if(!special_assembly == D) -// special_assembly.dothings() - return 1 +/obj/item/device/assembly_holder/proc/process_activation(var/obj/D, var/normal = 1, var/special = 1) + if(!D) + return FALSE + if(!secured) + audible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") + if(normal && a_right && a_left) + if(a_right != D) + a_right.pulsed(FALSE) + if(a_left != D) + a_left.pulsed(FALSE) + if(master) + master.receive_signal() + return TRUE - -/obj/item/device/assembly_holder/New() - ..() +/obj/item/device/assembly_holder/Initialize(mapload, ...) + . = ..() listening_objects += src /obj/item/device/assembly_holder/Destroy() listening_objects -= src return ..() - -/obj/item/device/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking) +/obj/item/device/assembly_holder/hear_talk(mob/living/M, msg, verb, datum/language/speaking) if(a_right) - a_right.hear_talk(M,msg,verb,speaking) + a_right.hear_talk(M, msg, verb, speaking) if(a_left) - a_left.hear_talk(M,msg,verb,speaking) - - - + a_left.hear_talk(M, msg, verb, speaking) /obj/item/device/assembly_holder/timer_igniter name = "timer-igniter assembly" - New() - ..() +/obj/item/device/assembly_holder/timer_igniter/Initialize(mapload, ...) + . = ..() - var/obj/item/device/assembly/igniter/ign = new(src) - ign.secured = 1 - ign.holder = src - var/obj/item/device/assembly/timer/tmr = new(src) - tmr.time=5 - tmr.secured = 1 - tmr.holder = src - START_PROCESSING(SSprocessing, tmr) - a_left = tmr - a_right = ign - secured = 1 - update_icon() - name = initial(name) + " ([tmr.time] secs)" + var/obj/item/device/assembly/igniter/ign = new(src) + ign.secured = TRUE + ign.holder = src + var/obj/item/device/assembly/timer/tmr = new(src) + tmr.time = 5 + tmr.secured = TRUE + tmr.holder = src + START_PROCESSING(SSprocessing, tmr) + a_left = tmr + a_right = ign + secured = TRUE + update_icon() + name = "[initial(name)] ([tmr.time] secs)" - loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure + loc.verbs += /obj/item/device/assembly_holder/timer_igniter/verb/configure - detached() - loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure - ..() +/obj/item/device/assembly_holder/timer_igniter/detached() + loc.verbs -= /obj/item/device/assembly_holder/timer_igniter/verb/configure + ..() - verb/configure() - set name = "Set Timer" - set category = "Object" - set src in usr +/obj/item/device/assembly_holder/timer_igniter/verb/configure() + set name = "Set Timer" + set category = "Object" + set src in usr - if ( !(usr.stat || usr.restrained()) ) - var/obj/item/device/assembly_holder/holder - if(istype(src,/obj/item/grenade/chem_grenade)) - var/obj/item/grenade/chem_grenade/gren = src - holder=gren.detonator - var/obj/item/device/assembly/timer/tmr = holder.a_left - if(!istype(tmr,/obj/item/device/assembly/timer)) - tmr = holder.a_right - if(!istype(tmr,/obj/item/device/assembly/timer)) - to_chat(usr, "This detonator has no timer.") - return + if(!(usr.stat || usr.restrained())) + var/obj/item/device/assembly_holder/holder + if(istype(src,/obj/item/grenade/chem_grenade)) + var/obj/item/grenade/chem_grenade/gren = src + holder = gren.detonator + var/obj/item/device/assembly/timer/tmr = holder.a_left + if(!istype(tmr, /obj/item/device/assembly/timer)) + tmr = holder.a_right + if(!istype(tmr, /obj/item/device/assembly/timer)) + to_chat(usr, SPAN_WARNING("This detonator has no timer.")) + return - if(tmr.timing) - to_chat(usr, "Clock is ticking already.") - else - var/ntime = input("Enter desired time in seconds", "Time", "5") as num - if (ntime>0 && ntime<1000) - tmr.time = ntime - name = initial(name) + "([tmr.time] secs)" - to_chat(usr, "Timer set to [tmr.time] seconds.") - else - to_chat(usr, "Timer can't be [ntime<=0?"negative":"more than 1000 seconds"].") + if(tmr.timing) + to_chat(usr, SPAN_WARNING("The timer has already been activated.")) else - to_chat(usr, "You cannot do this while [usr.stat?"unconscious/dead":"restrained"].") + var/ntime = input("Enter desired time in seconds", "Time", "5") as num + ntime = clamp(ntime, 5, 1000) + tmr.time = ntime + name = "[initial(name)] ([tmr.time] secs)" + to_chat(usr, SPAN_NOTICE("Timer set to [tmr.time] seconds.")) + else + to_chat(usr, SPAN_WARNING("You cannot do this while [usr.stat ? "unconscious/dead" : "restrained"].")) \ No newline at end of file diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index 4a9ac779e6c..06c992dd393 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -3,36 +3,36 @@ desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 1) matter = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 50) - secured = 1 + secured = TRUE wires = WIRE_RECEIVE /obj/item/device/assembly/igniter/activate() - if(!..()) return 0//Cooldown check + . = ..() + if(!.) + return FALSE //Cooldown check - if(holder && istype(holder.loc,/obj/item/grenade/chem_grenade)) + if(holder && istype(holder.loc, /obj/item/grenade/chem_grenade)) var/obj/item/grenade/chem_grenade/grenade = holder.loc grenade.prime() else var/turf/location = get_turf(loc) if(location) - location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + location.hotspot_expose(1000, 1000) + if(istype(src.loc, /obj/item/device/assembly_holder)) + if(istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank)) var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank && tank.is_leaking) - tank.ex_act(3.0) - + if(tank?.is_leaking) + tank.ex_act(3) spark(src, 4, cardinal) - return 1 + return TRUE -/obj/item/device/assembly/igniter/attack_self(mob/user as mob) +/obj/item/device/assembly/igniter/attack_self(mob/user) activate() add_fingerprint(user) - return /obj/item/device/assembly/igniter/isFlameSource() return TRUE \ No newline at end of file diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 664ab1ce8dc..78f79245afb 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -1,149 +1,142 @@ -//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" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 2) matter = list(DEFAULT_WALL_MATERIAL = 1000, MATERIAL_GLASS = 500) wires = WIRE_PULSE - secured = 0 + secured = FALSE obj_flags = OBJ_FLAG_ROTATABLE - var/on = 0 - var/visible = 0 + var/on = FALSE + var/visible = FALSE var/obj/effect/beam/i_beam/first = null - proc - trigger_beam() - - - activate() - if(!..()) return 0//Cooldown check - on = !on - update_icon() - return 1 - - - toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSprocessing, src) - else - on = 0 - if(first) qdel(first) - STOP_PROCESSING(SSprocessing, src) - update_icon() - return secured - +/obj/item/device/assembly/infra/activate() + if(!..()) + return FALSE //Cooldown check + toggle_on() + return TRUE +/obj/item/device/assembly/infra/proc/toggle_on() + on = !on + if(secured && on) + START_PROCESSING(SSprocessing, src) + else + on = FALSE + QDEL_NULL(first) + STOP_PROCESSING(SSprocessing, src) update_icon() - cut_overlays() - attached_overlays = list() - if(on) - add_overlay("infrared_on") - attached_overlays += "infrared_on" - if(holder) - holder.update_icon() - return +/obj/item/device/assembly/infra/toggle_secure() + secured = !secured + if(secured && on) + START_PROCESSING(SSprocessing, src) + else + on = FALSE + QDEL_NULL(first) + STOP_PROCESSING(SSprocessing, src) + update_icon() + return secured +/obj/item/device/assembly/infra/update_icon() + cut_overlays() + attached_overlays = list() + if(on) + add_overlay("infrared_on") + attached_overlays += "infrared_on" - process()//Old code - if(!on) - if(first) - qdel(first) - return + if(holder) + holder.update_icon() - 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) - I.limit = 8 - I.process() - return - return +/obj/item/device/assembly/infra/rotate(var/mob/user, var/anchored_ignore = FALSE) + . = ..() + var/direction_text = dir2text(dir) + to_chat(user, SPAN_NOTICE("You rotate \the [src] to face [direction_text].")) + QDEL_NULL(first) +/obj/item/device/assembly/infra/process() + if(!on || !secured) + QDEL_NULL(first) + return ..() - attack_hand() - qdel(first) - ..() - return + if(first && !isturf(first.loc)) + QDEL_NULL(first) - - Move() - var/t = dir - ..() - set_dir(t) - qdel(first) - return - - - holder_movement() - if(!holder) return 0 -// set_dir(holder.dir) - qdel(first) - return 1 - - - trigger_beam() - if((!secured)||(!on)||(cooldown > 0)) return 0 - pulse(0) - if(!holder) - visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*") - cooldown = 2 - addtimer(CALLBACK(src, .proc/process_cooldown), 10) - return - - - 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 - - - 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(!first && (isturf(loc) || (holder && isturf(holder.loc)))) + var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(holder ? holder.loc : loc, src) + I.density = TRUE + step(I, I.dir) + if(I) + I.density = FALSE spawn(0) - if(first) - first.vis_spread(visible) - - if(href_list["close"]) - usr << browse(null, "window=infra") - return - - if(usr) - attack_self(usr) - + if(I) + I.limit = 8 + I.process() return + if(first) + first.process() + + +/obj/item/device/assembly/infra/attack_hand() + QDEL_NULL(first) + return ..() + +/obj/item/device/assembly/infra/Move() + var/t = dir + ..() + set_dir(t) + QDEL_NULL(first) + return + +/obj/item/device/assembly/infra/holder_movement() + if(!holder) + return FALSE + QDEL_NULL(first) + return TRUE + +/obj/item/device/assembly/infra/proc/trigger_beam() + if(!secured || !on || cooldown) + return FALSE + pulse(FALSE) + if(!holder) + audible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*") + cooldown = 2 + addtimer(CALLBACK(src, .proc/process_cooldown), 10) + +/obj/item/device/assembly/infra/interact(mob/user) + if(!secured) + to_chat(user, SPAN_WARNING("\The [src] is unsecured!")) + return + + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + ui = new(user, src, "devices-assembly-infrared", 320, 220, capitalize_first_letters(name)) + ui.open() + +/obj/item/device/assembly/infra/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + + VUEUI_SET_CHECK(data["active"], on, ., data) + VUEUI_SET_CHECK(data["visible"], visible, ., data) + +/obj/item/device/assembly/infra/Topic(href, href_list) + ..() + + if(href_list["state"]) + toggle_on() + + if(href_list["visible"]) + visible = !visible + + var/datum/vueui/ui = SSvueui.get_open_ui(usr, src) + ui.check_for_change() + /***************************IBeam*********************************/ @@ -154,66 +147,50 @@ 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/New(loc, var/set_master) + ..() + master = set_master + if(!master.first) + master.first = src + set_dir(master.dir) + check_visiblity() /obj/effect/beam/i_beam/proc/hit() if(master) master.trigger_beam() qdel(src) - return -/obj/effect/beam/i_beam/proc/vis_spread(v) - visible = v - spawn(0) - if(next) - next.vis_spread(v) - return - return +/obj/effect/beam/i_beam/proc/check_visiblity() + if(master.visible) + invisibility = 0 + else + invisibility = 101 /obj/effect/beam/i_beam/process() - - if((loc && loc.density) || !master) + if(loc?.density || !master) qdel(src) return - if(left > 0) - left-- - if(left < 1) - if(!(visible)) - invisibility = 101 - else - invisibility = 0 - else - invisibility = 0 + check_visiblity() - - var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc) - I.master = master - I.density = 1 - I.set_dir(dir) - step(I, I.dir) - - if(I) - if(!(next)) - I.density = 0 - I.vis_spread(visible) - next = I - spawn(0) - if((I && limit > 0)) - I.limit = limit - 1 - I.process() - return - else - qdel(I) - else - qdel(next) - spawn(10) - process() + if(!limit) return - return + + if(!QDELETED(next)) + next.process() + return + + var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(loc, master) + I.density = TRUE + step(I, I.dir) + if(I) + I.density = FALSE + next = I + spawn(0) + if(I && limit > 0) + I.limit = limit - 1 + I.process() /obj/effect/beam/i_beam/Collide() . = ..() @@ -226,17 +203,21 @@ /obj/effect/beam/i_beam/Crossed(atom/movable/AM as mob|obj) if(istype(AM, /obj/effect/beam)) return - if( (AM.invisibility == INVISIBILITY_OBSERVER) || (AM.invisibility == 101) ) + if(AM.invisibility == INVISIBILITY_OBSERVER || AM.invisibility == 101) return spawn(0) hit() - return - return /obj/effect/beam/i_beam/Destroy() if(master.first == src) master.first = null if(next) - qdel(next) - next = null + QDEL_NULL(next) return ..() + +/obj/effect/beam/i_beam/set_dir(ndir) + . = ..() + if(ndir & EAST || ndir & WEST) + var/matrix/M = matrix() + M.Turn(90) + transform = M \ No newline at end of file diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index 57b28aeb884..87f6bab6be9 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -7,24 +7,20 @@ ) icon_state = "mousetrap" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_COMBAT = 1) matter = list(DEFAULT_WALL_MATERIAL = 100) - var/armed = 0 + var/armed = FALSE +/obj/item/device/assembly/mousetrap/examine(mob/user) + . = ..() + if(. && armed) + to_chat(user, "It looks like it's armed.") - examine(mob/user) - ..(user) - if(armed) - to_chat(user, "It looks like it's armed.") - - update_icon() - if(armed) - icon_state = "mousetraparmed" - else - icon_state = "mousetrap" - if(holder) - holder.update_icon() +/obj/item/device/assembly/mousetrap/update_icon() + icon_state = armed ? "mousetraparmed" : "mousetrap" + if(holder) + holder.update_icon() /obj/item/device/assembly/mousetrap/proc/triggered(var/mob/living/target, var/type = "feet") if(!armed || !istype(target)) @@ -33,7 +29,7 @@ var/types = target.find_type() if(israt(target)) var/mob/living/simple_animal/rat/M = target - visible_message("SPLAT!") + audible_message(SPAN_DANGER("SPLAT!")) M.splat() else var/zone = BP_CHEST @@ -43,53 +39,47 @@ if("feet") zone = pick(BP_L_FOOT, BP_R_FOOT) if(!H.shoes) - H.apply_effect(400/(target.mob_size*(target.mob_size*0.25)), PAIN)//Halloss instead of instant knockdown + H.apply_effect(400 / (target.mob_size * (target.mob_size * 0.25)), PAIN)//Halloss instead of instant knockdown //Mainly for the benefit of giant monsters like vaurca breeders if(BP_L_HAND, BP_R_HAND) zone = type if(!H.gloves) - H.apply_effect(250/(target.mob_size*(target.mob_size*0.25)), PAIN) - if (!(types & TYPE_SYNTHETIC)) - target.apply_damage(rand(6,14), PAIN, def_zone = zone, used_weapon = src) - target.apply_damage(rand(1,3), BRUTE, def_zone = zone, used_weapon = src) + H.apply_effect(250 / (target.mob_size * (target.mob_size * 0.25)), PAIN) + if(!(types & TYPE_SYNTHETIC)) + target.apply_damage(rand(6 , 14), PAIN, def_zone = zone, used_weapon = src) + target.apply_damage(rand(1 , 3), BRUTE, def_zone = zone, used_weapon = src) playsound(target.loc, 'sound/effects/snap.ogg', 50, 1) layer = MOB_LAYER - 0.2 - armed = 0 + armed = FALSE update_icon() - pulse(0) + pulse(FALSE) - -/obj/item/device/assembly/mousetrap/attack_self(mob/living/user as mob) +/obj/item/device/assembly/mousetrap/attack_self(mob/living/user) if(!armed) - to_chat(user, "You arm [src].") + to_chat(user, SPAN_NOTICE("You arm \the [src].")) else - if(((user.is_clumsy()) || (DUMB in user.mutations)) && prob(50)) - var/which_hand = BP_L_HAND - if(!user.hand) - which_hand = BP_R_HAND - triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") + if(clumsy_check(user)) return - to_chat(user, "You disarm [src].") + to_chat(user, SPAN_NOTICE("You disarm \the [src].")) armed = !armed update_icon() playsound(user.loc, 'sound/weapons/handcuffs.ogg', 30, 1, -3) +/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user) + if(armed && clumsy_check(user)) + return + return ..() -/obj/item/device/assembly/mousetrap/attack_hand(mob/living/user as mob) - if(armed) - if(((user.is_clumsy()) || (DUMB in user.mutations)) && prob(50)) - var/which_hand = BP_L_HAND - if(!user.hand) - which_hand = BP_R_HAND - triggered(user, which_hand) - user.visible_message("[user] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") - return - ..() - +/obj/item/device/assembly/mousetrap/proc/clumsy_check(var/mob/living/user) + if((user.is_clumsy() || (DUMB in user.mutations)) && prob(50)) + var/which_hand = BP_L_HAND + if(!user.hand) + which_hand = BP_R_HAND + triggered(user, which_hand) + user.visible_message(SPAN_WARNING("[user] accidentally sets off \the [src]!"), SPAN_WARNING("You accidentally trigger \the [src]!")) + return TRUE + return FALSE /obj/item/device/assembly/mousetrap/Crossed(AM as mob|obj) if(armed) @@ -98,32 +88,26 @@ else if(istype(AM, /mob/living)) var/mob/living/L = AM triggered(L) - L.visible_message("[L] accidentally steps on [src].", \ - "You accidentally step on [src]") - + L.visible_message(SPAN_WARNING("\The [L] accidentally steps on \the [src]."), SPAN_WARNING("You accidentally step on \the [src].")) ..() -/obj/item/device/assembly/mousetrap/on_found(mob/finder as mob) +/obj/item/device/assembly/mousetrap/on_found(mob/finder) if(armed) - finder.visible_message("[finder] accidentally sets off [src], breaking their fingers.", \ - "You accidentally trigger [src]!") + finder.visible_message(SPAN_WARNING("[finder] accidentally sets off \the [src]!"), SPAN_WARNING("You accidentally trigger \the [src]!")) triggered(finder, finder.hand ? BP_L_HAND : BP_R_HAND) - return 1 //end the search! - return 0 - + return TRUE + return FALSE /obj/item/device/assembly/mousetrap/hitby(A as mob|obj) if(!armed) return ..() - visible_message("[src] is triggered by [A].") + visible_message(SPAN_WARNING("\The [src] is triggered by \the [A].")) triggered(null) - /obj/item/device/assembly/mousetrap/armed icon_state = "mousetraparmed" - armed = 1 - + armed = TRUE /obj/item/device/assembly/mousetrap/verb/hide_under() set src in oview(1) @@ -133,5 +117,5 @@ if(usr.stat) return - layer = TURF_LAYER+0.2 - to_chat(usr, "You hide [src].") + layer = TURF_LAYER + 0.2 + to_chat(usr, SPAN_NOTICE("You hide \the [src].")) \ No newline at end of file diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 774484d9ad8..5ecfa37fcfc 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -3,162 +3,147 @@ desc = "Used for scanning and alerting when someone enters a certain proximity." icon_state = "prox" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 1) matter = list(DEFAULT_WALL_MATERIAL = 800, MATERIAL_GLASS = 200) flags = PROXMOVE wires = WIRE_PULSE - secured = 0 + secured = FALSE - var/scanning = 0 - var/timing = 0 + var/scanning = FALSE + var/timing = FALSE var/time = 10 - var/range = 2 - proc - toggle_scan() +/obj/item/device/assembly/prox_sensor/activate() + . = ..() + if(!.) + return 0//Cooldown check + timing = !timing + update_icon() + return FALSE + +/obj/item/device/assembly/prox_sensor/toggle_secure() + secured = !secured + if(secured) + START_PROCESSING(SSprocessing, src) + else + scanning = FALSE + timing = FALSE + STOP_PROCESSING(SSprocessing, src) + update_icon() + return secured + +/obj/item/device/assembly/prox_sensor/HasProximity(atom/movable/AM as mob|obj) + if(!istype(AM)) + log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).") + return + if(istype(AM, /obj/effect/beam)) + return + if(AM.move_speed < 12) sense() +/obj/item/device/assembly/prox_sensor/proc/sense() + var/turf/mainloc = get_turf(src) + if((!holder && !secured) || !scanning || cooldown) + return FALSE + pulse(FALSE) + if(!holder) + mainloc.audible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") + cooldown = 2 + addtimer(CALLBACK(src, .proc/process_cooldown), 1 SECOND) - activate() - if(!..()) return 0//Cooldown check - timing = !timing - update_icon() - return 0 - - - toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSprocessing, src) - else - scanning = 0 - timing = 0 - STOP_PROCESSING(SSprocessing, src) - update_icon() - return secured - - - HasProximity(atom/movable/AM as mob|obj) - if(!istype(AM)) - log_debug("DEBUG: HasProximity called with [AM] on [src] ([usr]).") - return - if (istype(AM, /obj/effect/beam)) return - if (AM.move_speed < 12) sense() - return - - - sense() +/obj/item/device/assembly/prox_sensor/process() + if(scanning) var/turf/mainloc = get_turf(src) - if((!holder && !secured)||(!scanning)||(cooldown > 0)) return 0 - pulse(0) - if(!holder) - mainloc.visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") - cooldown = 2 - addtimer(CALLBACK(src, .proc/process_cooldown), 10) + for(var/mob/living/A in range(range, mainloc)) + if(A.move_speed < 12) + sense() - - process() - if(scanning) - var/turf/mainloc = get_turf(src) - for(var/mob/living/A in range(range,mainloc)) - if (A.move_speed < 12) - sense() - - if(timing && (time >= 0)) + if(timing) + if(time >= 0) time-- - if(timing && time <= 0) - timing = 0 + if(time <= 0) + timing = FALSE toggle_scan() time = 10 - return + SSvueui.check_uis_for_change(src) - dropped() - spawn(0) - sense() - return - return - - - toggle_scan() - if(!secured) return 0 - scanning = !scanning - update_icon() - return - +/obj/item/device/assembly/prox_sensor/dropped() + spawn(0) + sense() +/obj/item/device/assembly/prox_sensor/proc/toggle_scan() + if(!secured) + return FALSE + scanning = !scanning update_icon() - cut_overlays() - attached_overlays = list() - if(timing) - add_overlay("prox_timing") - attached_overlays += "prox_timing" - if(scanning) - add_overlay("prox_scanning") - attached_overlays += "prox_scanning" - if(holder) - holder.update_icon() - if(holder && istype(holder.loc,/obj/item/grenade/chem_grenade)) + return + +/obj/item/device/assembly/prox_sensor/update_icon() + cut_overlays() + attached_overlays = list() + if(timing) + add_overlay("prox_timing") + attached_overlays += "prox_timing" + if(scanning) + add_overlay("prox_scanning") + attached_overlays += "prox_scanning" + if(holder) + holder.update_icon() + if(istype(holder.loc, /obj/item/grenade/chem_grenade)) var/obj/item/grenade/chem_grenade/grenade = holder.loc grenade.primed(scanning) - return +/obj/item/device/assembly/prox_sensor/Move() + ..() + sense() - Move() - ..() - sense() - return +/obj/item/device/assembly/prox_sensor/interact(mob/user) + if(!secured) + to_chat(user, SPAN_WARNING("\The [src] is unsecured!")) + return FALSE + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + ui = new(user, src, "devices-assembly-proximity", 450, 360, capitalize_first_letters(name)) + ui.open() - 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 ? text("Arming", src) : text("Not Arming", src)), minute, second, src, src, src, src) - dat += text("
Range: - [] +", src, range, src) - dat += "
[scanning?"Armed":"Unarmed"] (Movement sensor active when armed!)" - dat += "

Refresh" - dat += "

Close" - user << browse(dat, "window=prox") - onclose(user, "prox") - return +/obj/item/device/assembly/prox_sensor/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + var/second = time % 60 + var/minute = (time - second) / 60 - Topic(href, href_list) - ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=prox") - onclose(usr, "prox") - return + VUEUI_SET_CHECK(data["timeractive"], timing, ., data) + VUEUI_SET_CHECK(data["minute"], minute, ., data) + VUEUI_SET_CHECK(data["second"], second, ., data) + VUEUI_SET_CHECK(data["scanning"], scanning, ., data) + VUEUI_SET_CHECK(data["range"], range, ., data) - if(href_list["scanning"]) - toggle_scan() +/obj/item/device/assembly/prox_sensor/Topic(href, href_list) + ..() - if(href_list["time"]) - timing = text2num(href_list["time"]) - update_icon() + if(href_list["scanning"]) + toggle_scan() - if(href_list["tp"]) - var/tp = text2num(href_list["tp"]) - time += tp - time = min(max(round(time), 0), 600) + if(href_list["time"]) + timing = !timing + update_icon() - if(href_list["range"]) - var/r = text2num(href_list["range"]) - range += r - range = min(max(range, 1), 5) + if(href_list["tp"]) + var/tp = text2num(href_list["tp"]) + time += tp + time = round(time) + time = clamp(time, 1, 600) - if(href_list["close"]) - usr << browse(null, "window=prox") - return + if(href_list["range"]) + var/r = text2num(href_list["range"]) + range += r + range = clamp(range, 1, 5) - if(usr) - attack_self(usr) - - - return + var/datum/vueui/ui = SSvueui.get_open_ui(usr, src) + ui.check_for_change() \ No newline at end of file diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 64a2ae1dc03..cbe84144c9d 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -4,17 +4,16 @@ icon_state = "shock_kit" var/obj/item/clothing/head/helmet/part1 = null var/obj/item/device/radio/electropack/part2 = null - var/status = 0 + var/status = FALSE w_class = ITEMSIZE_HUGE flags = CONDUCT /obj/item/assembly/shock_kit/Destroy() qdel(part1) qdel(part2) - return ..() -/obj/item/assembly/shock_kit/attackby(obj/item/W as obj, mob/user as mob) +/obj/item/assembly/shock_kit/attackby(obj/item/W, mob/user) if(W.iswrench() && !status) var/turf/T = loc if(ismob(T)) @@ -29,18 +28,17 @@ return if(W.isscrewdriver()) status = !status - to_chat(user, "[src] is now [status ? "secured" : "unsecured"]!") + var/msg = "[src] is now [status ? "secured" : "unsecured"]!" + to_chat(user, SPAN_NOTICE(msg)) add_fingerprint(user) return -/obj/item/assembly/shock_kit/attack_self(mob/user as mob) +/obj/item/assembly/shock_kit/attack_self(mob/user) part1.attack_self(user, status) part2.attack_self(user, status) add_fingerprint(user) - return /obj/item/assembly/shock_kit/receive_signal() if(istype(loc, /obj/structure/bed/chair/e_chair)) var/obj/structure/bed/chair/e_chair/C = loc - C.shock() - return + C.shock() \ No newline at end of file diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 846908be902..7e90e173a30 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -4,12 +4,12 @@ icon_state = "signaller" item_state = "signaler" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 1) matter = list(DEFAULT_WALL_MATERIAL = 1000, MATERIAL_GLASS = 200) wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE - secured = 1 + secured = TRUE var/code = 30 var/frequency = 1457 @@ -18,85 +18,59 @@ var/obj/machinery/machine var/datum/wires/connected var/datum/radio_frequency/radio_connection - var/deadman = 0 + var/deadman = FALSE /obj/item/device/assembly/signaler/Initialize() . = ..() set_frequency(frequency) /obj/item/device/assembly/signaler/activate() - if(cooldown > 0) return 0 + if(cooldown) + return FALSE cooldown = 2 addtimer(CALLBACK(src, .proc/process_cooldown), 10) signal() - return 1 + return TRUE /obj/item/device/assembly/signaler/update_icon() if(holder) holder.update_icon() return -/obj/item/device/assembly/signaler/interact(mob/user as mob, flag1) - var/t1 = "-------" -// if ((src.b_stat && !( flag1 ))) -// t1 = text("-------
\nGreen Wire: []
\nRed Wire: []
\nBlue Wire: []
\n", (src.wires & 4 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 2 ? text("Cut Wire", src) : text("Mend Wire", src)), (src.wires & 1 ? text("Cut Wire", src) : text("Mend Wire", src))) -// else -// t1 = "-------" Speaker: [src.listening ? "Engaged" : "Disengaged"]
- var/dat = {" - +/obj/item/device/assembly/signaler/interact(mob/user, flag1) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + ui = new(user, src, "devices-assembly-signaler", 320, 220, capitalize_first_letters(name)) + ui.open() - Send Signal
- Frequency/Code for signaler:
- Frequency: - - - - - [format_frequency(src.frequency)] - + - +
- - Code: - - - - - [src.code] - + - +
- [t1] -
"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return +/obj/item/device/assembly/signaler/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + VUEUI_SET_CHECK(data["frequency"], format_frequency(frequency), ., data) + VUEUI_SET_CHECK(data["code"], code, ., data) /obj/item/device/assembly/signaler/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=radio") - onclose(usr, "radio") - return - - if (href_list["freq"]) - var/new_frequency = (frequency + text2num(href_list["freq"])) + if(href_list["freq"]) + var/new_frequency = frequency + text2num(href_list["freq"]) if(new_frequency < RADIO_LOW_FREQ || new_frequency > RADIO_HIGH_FREQ) new_frequency = sanitize_frequency(new_frequency, RADIO_LOW_FREQ, RADIO_HIGH_FREQ) set_frequency(new_frequency) if(href_list["code"]) - src.code += text2num(href_list["code"]) - src.code = round(src.code) - src.code = min(100, src.code) - src.code = max(1, src.code) + code += text2num(href_list["code"]) + code = clamp(code, 1, 100) + code = round(code) if(href_list["send"]) spawn( 0 ) signal() - if(usr) - attack_self(usr) - - return - + var/datum/vueui/ui = SSvueui.get_open_ui(usr, src) + ui.check_for_change() /obj/item/device/assembly/signaler/proc/signal() if(!radio_connection) @@ -110,9 +84,8 @@ radio_connection.post_signal(src, signal) return - -/obj/item/device/assembly/signaler/pulse(var/radio = 0) - if(src.connected && src.wires) +/obj/item/device/assembly/signaler/pulse(var/radio = FALSE) + if(connected && wires) connected.Pulse(src) else if(holder) holder.process_activation(src, 1, 0) @@ -120,30 +93,27 @@ machine.do_signaler() else ..(radio) - return 1 - + return TRUE /obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) if(!signal) - return 0 + return FALSE if(within_jamming_range(src)) - return 0 + return FALSE if(signal.encryption != code) - return 0 + return FALSE - if(!(src.wires & WIRE_RADIO_RECEIVE)) - return 0 + if(!(wires & WIRE_RADIO_RECEIVE)) + return FALSE - pulse(1) + pulse(TRUE) if(machine) - machine.visible_message("[icon2html(machine, viewers(get_turf(machine)))] [capitalize_first_letters(src.name)] beeps, \"Beep beep!\"") + machine.audible_message("[icon2html(machine, viewers(get_turf(machine)))] [capitalize_first_letters(src.name)] beeps, \"Beep beep!\"") else if(!holder) - visible_message("[icon2html(src, viewers(get_turf(src)))] [capitalize_first_letters(src.name)] beeps, \"Beep beep!\"") - return - + audible_message("[icon2html(src, viewers(get_turf(src)))] [capitalize_first_letters(src.name)] beeps, \"Beep beep!\"") /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) if(!frequency) @@ -151,7 +121,6 @@ SSradio.remove_object(src, frequency) frequency = new_frequency radio_connection = SSradio.add_object(src, frequency, RADIO_CHAT) - return //Triggers the deadmanswitch if its dropped or moved into ones backpack /obj/item/device/assembly/signaler/dropped(var/mob/user) @@ -178,7 +147,7 @@ if(!ismob(M)) deadman_trigger() else if(prob(20)) - M.visible_message("[M]'s finger twitches a bit over [src]'s deadman switch!") + M.visible_message(SPAN_DANGER("\The [M]'s finger twitches a bit over \the [src]'s deadman switch!")) return /obj/item/device/assembly/signaler/AltClick(mob/user) @@ -190,17 +159,18 @@ /obj/item/device/assembly/signaler/proc/deadman_trigger(var/mob/user) if(deadman) //If its not activated, there is no point in triggering it if(user) - src.visible_message("[user] releases [src]'s deadman switch!") + visible_message(SPAN_DANGER("\The [user] releases \the [src]'s deadman switch!")) else - src.visible_message("[src]'s deadman switch is released!") + visible_message(SPAN_DANGER("\The [src]'s deadman switch is released!")) signal() - deadman = 0 + deadman = FALSE STOP_PROCESSING(SSprocessing, src) /obj/item/device/assembly/signaler/verb/deadman_it() set src in usr set name = "Hold the deadman switch!" set desc = "Sends a signal if dropped or moved into a container." + if(!deadman) deadman_activate(usr) else @@ -208,20 +178,20 @@ /obj/item/device/assembly/signaler/proc/deadman_activate(var/mob/user) - deadman = 1 + deadman = TRUE START_PROCESSING(SSprocessing, src) log_and_message_admins("is threatening to trigger a signaler deadman's switch") - user.visible_message("[user] presses and holds [src]'s deadman switch...") - to_chat(user,"Your are now holding [src]'s deadman switch. Dropping, putting the device away, or being hit will activate the signaller.") - to_chat(user,"To deactivate it, make sure to press the verb again.") + user.visible_message(SPAN_WARNING("[user] presses and holds \the [src]'s deadman switch...")) + to_chat(user, SPAN_WARNING("You are now holding \the [src]'s deadman switch. Dropping, putting the device away, or being hit will activate the signaller.")) + to_chat(user, SPAN_NOTICE("To deactivate it, make sure to press the verb again.")) /obj/item/device/assembly/signaler/proc/deadman_deactivate(var/mob/user) - deadman = 0 + deadman = FALSE STOP_PROCESSING(SSprocessing, src) - user.visible_message("[user] secures [user]'s deadman switch...") + user.visible_message(SPAN_NOTICE("\The [user] secures and releases \the [src]'s deadman switch...")) /obj/item/device/assembly/signaler/Destroy() if(SSradio) SSradio.remove_object(src,frequency) frequency = 0 - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 03fddb5ff8e..11762fafaf9 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -3,107 +3,98 @@ desc = "Used to time things. Works well with contraptions which has to count down. Tick tock." icon_state = "timer" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 1) matter = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 50) wires = WIRE_PULSE + secured = FALSE - secured = 0 - - var/timing = 0 + var/timing = FALSE var/time = 10 - proc - timer_end() +/obj/item/device/assembly/timer/activate() + . = ..() + if(!.) + return FALSE //Cooldown check - activate() - if(!..()) return 0//Cooldown check + timing = !timing + update_icon() + return FALSE - timing = !timing +/obj/item/device/assembly/timer/toggle_secure() + secured = !secured + if(secured) + START_PROCESSING(SSprocessing, src) + else + timing = FALSE + STOP_PROCESSING(SSprocessing, src) + update_icon() + return secured - update_icon() - return 0 +/obj/item/device/assembly/timer/proc/timer_end() + if(!secured) + return FALSE + pulse(FALSE) + if(!holder) + audible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") + cooldown = 2 + addtimer(CALLBACK(src, .proc/process_cooldown), 1 SECOND) - - toggle_secure() - secured = !secured - if(secured) - START_PROCESSING(SSprocessing, src) - else - timing = 0 - STOP_PROCESSING(SSprocessing, src) - update_icon() - return secured - - - timer_end() - if(!secured) return 0 - pulse(0) - if(!holder) - visible_message("[icon2html(src, viewers(get_turf(src)))] *beep* *beep*", "*beep* *beep*") - cooldown = 2 - addtimer(CALLBACK(src, .proc/process_cooldown), 10) - return - - - process() - if(timing && (time > 0)) +/obj/item/device/assembly/timer/process() + if(timing) + if(time > 0) time-- - if(timing && time <= 0) - timing = 0 + if(time <= 0) + timing = FALSE timer_end() time = 10 + + SSvueui.check_uis_for_change(src) + +/obj/item/device/assembly/timer/update_icon() + cut_overlays() + attached_overlays = list() + if(timing) + add_overlay("timer_timing") + attached_overlays += "timer_timing" + if(holder) + holder.update_icon() + +/obj/item/device/assembly/timer/interact(mob/user) + if(!secured) + to_chat(user, SPAN_WARNING("\The [src] is unsecured!")) return + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if(!ui) + ui = new(user, src, "devices-assembly-timer", 320, 220, capitalize_first_letters(name)) + ui.open() - update_icon() - cut_overlays() - attached_overlays = list() - if(timing) - add_overlay("timer_timing") - attached_overlays += "timer_timing" - if(holder) - holder.update_icon() - return +/obj/item/device/assembly/timer/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) + if(!data) + data = list() + var/second = time % 60 + var/minute = (time - second) / 60 - interact(mob/user as mob)//TODO: Have this use the wires - if(!secured) - user.show_message("The [name] is unsecured!") - return 0 - var/second = time % 60 - var/minute = (time - second) / 60 - var/dat = text("Timing Unit\n[] []:[]\n- - + +\n", (timing ? text("Timing", src) : text("Not Timing", src)), minute, second, src, src, src, src) - dat += "

Refresh" - dat += "

Close" - user << browse(dat, "window=timer") - onclose(user, "timer") - return + VUEUI_SET_CHECK(data["timeractive"], timing, ., data) + VUEUI_SET_CHECK(data["minute"], minute, ., data) + VUEUI_SET_CHECK(data["second"], second, ., data) +/obj/item/device/assembly/timer/Topic(href, href_list) + ..() - Topic(href, href_list) - ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) - usr << browse(null, "window=timer") - onclose(usr, "timer") - return + if(href_list["time"]) + timing = !timing + update_icon() - if(href_list["time"]) - timing = text2num(href_list["time"]) - update_icon() + if(href_list["tp"]) + var/tp = text2num(href_list["tp"]) + time += tp + time = round(time) + time = clamp(time, 1, 600) - 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=timer") - return - - if(usr) - attack_self(usr) - - return + var/datum/vueui/ui = SSvueui.get_open_ui(usr, src) + ui.check_for_change() \ No newline at end of file diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 15104fdfb29..f0fe09e3503 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -3,44 +3,42 @@ desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." icon_state = "voice" drop_sound = 'sound/items/drop/component.ogg' - pickup_sound = 'sound/items/pickup/component.ogg' + pickup_sound = 'sound/items/pickup/component.ogg' origin_tech = list(TECH_MAGNET = 1) matter = list(DEFAULT_WALL_MATERIAL = 500, MATERIAL_GLASS = 50) var/listening = FALSE - var/recorded //the activation message + var/recorded //the activation message -/obj/item/device/assembly/voice/New() - ..() +/obj/item/device/assembly/voice/Initialize(mapload, ...) + . = ..() listening_objects += src /obj/item/device/assembly/voice/Destroy() listening_objects -= src return ..() -/obj/item/device/assembly/voice/hear_talk(mob/living/M as mob, msg) +/obj/item/device/assembly/voice/hear_talk(mob/living/M, msg) if(listening) recorded = msg listening = FALSE - var/turf/T = get_turf(src) //otherwise it won't work in hand - T.visible_message("[icon2html(src, viewers(get_turf(T)))] beeps, \"Activation message is '[recorded]'.\"") + var/turf/T = get_turf(src) //otherwise it won't work in hand + T.audible_message("[icon2html(src, viewers(get_turf(T)))] beeps, \"Activation message is '[recorded]'.\"") else if(findtext(msg, recorded)) - pulse(0) + pulse(FALSE) /obj/item/device/assembly/voice/activate() - if(secured) - if(!holder) - listening = !listening - var/turf/T = get_turf(src) - T.visible_message("[icon2html(src, viewers(get_turf(T)))] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") - + if(secured && !holder) + listening = !listening + var/turf/T = get_turf(src) + T.audible_message("[icon2html(src, viewers(get_turf(T)))] beeps, \"[listening ? "Now" : "No longer"] recording input.\"") /obj/item/device/assembly/voice/attack_self(mob/user) - if(!user) return 0 + if(!user) + return FALSE activate() - return 1 - + return TRUE /obj/item/device/assembly/voice/toggle_secure() . = ..() - listening = FALSE + listening = FALSE \ No newline at end of file diff --git a/html/changelogs/geeves-augh_old_code.yml b/html/changelogs/geeves-augh_old_code.yml new file mode 100644 index 00000000000..f2c8b7905ef --- /dev/null +++ b/html/changelogs/geeves-augh_old_code.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "Updated assembly devices code and UIs. That includes signalers, timers, igniters, proximity sensors, infrared emitters, etc." + - bugfix: "Fixes various bugs with infrared emitters, they can now properly be rotated." + - bugfix: "Assemblies now properly disassemble without duplicating." \ No newline at end of file diff --git a/vueui/src/components/view/devices/assembly/infrared.vue b/vueui/src/components/view/devices/assembly/infrared.vue new file mode 100644 index 00000000000..edab489b88b --- /dev/null +++ b/vueui/src/components/view/devices/assembly/infrared.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/vueui/src/components/view/devices/assembly/proximity.vue b/vueui/src/components/view/devices/assembly/proximity.vue new file mode 100644 index 00000000000..7f24bb7a458 --- /dev/null +++ b/vueui/src/components/view/devices/assembly/proximity.vue @@ -0,0 +1,48 @@ + + + + + \ No newline at end of file diff --git a/vueui/src/components/view/devices/assembly/signaler.vue b/vueui/src/components/view/devices/assembly/signaler.vue new file mode 100644 index 00000000000..870d2dd6dd3 --- /dev/null +++ b/vueui/src/components/view/devices/assembly/signaler.vue @@ -0,0 +1,42 @@ + + + + + \ No newline at end of file diff --git a/vueui/src/components/view/devices/assembly/timer.vue b/vueui/src/components/view/devices/assembly/timer.vue new file mode 100644 index 00000000000..a01560c5b7d --- /dev/null +++ b/vueui/src/components/view/devices/assembly/timer.vue @@ -0,0 +1,36 @@ + + + + + \ No newline at end of file