From 9d7c5dc197a4202af34eed6cea1b078147ef3cd5 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Fri, 15 Aug 2014 20:27:00 -0400 Subject: [PATCH] Gives filters proper names, updates airlocks to use filters Docking ports still don't use filters though, as it would mess with the docking ports that are also airlocks. Docking is infrequent though so it should be fine. --- code/controllers/communications.dm | 27 +++++++++++-------- code/game/machinery/doors/airlock_control.dm | 17 ++++-------- .../airlock_controllers.dm | 1 + .../embedded_controller/airlock_program.dm | 2 +- .../embedded_controller_base.dm | 7 ++--- code/modules/admin/verbs/diagnostics.dm | 15 ++--------- 6 files changed, 29 insertions(+), 40 deletions(-) diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm index fb5cfc65d5..c06180e77a 100644 --- a/code/controllers/communications.dm +++ b/code/controllers/communications.dm @@ -128,15 +128,20 @@ var/const/SUP_FREQ = 1347 #define TRANSMISSION_RADIO 1 /* filters */ -var/const/RADIO_TO_AIRALARM = "1" -var/const/RADIO_FROM_AIRALARM = "2" -var/const/RADIO_CHAT = "3" -var/const/RADIO_ATMOSIA = "4" -var/const/RADIO_NAVBEACONS = "5" -var/const/RADIO_AIRLOCK = "6" -var/const/RADIO_SECBOT = "7" -var/const/RADIO_MULEBOT = "8" -var/const/RADIO_MAGNETS = "9" +//When devices register with the radio controller, they might register under a certain filter. +//Other devices can then choose to send signals to only those devices that belong to a particular filter. +//This is done for performance, so we don't send signals to lots of machines unnecessarily. + +var/const/RADIO_DEFAULT = "radio_default" //all devices not belonging to another filter go here. +var/const/RADIO_TO_AIRALARM = "radio_airalarm" //air alarms +var/const/RADIO_FROM_AIRALARM = "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms +var/const/RADIO_CHAT = "radio_telecoms" +var/const/RADIO_ATMOSIA = "radio_atmos" +var/const/RADIO_NAVBEACONS = "radio_navbeacon" +var/const/RADIO_AIRLOCK = "radio_airlock" +var/const/RADIO_SECBOT = "radio_secbot" +var/const/RADIO_MULEBOT = "radio_mulebot" +var/const/RADIO_MAGNETS = "radio_magnet" var/global/datum/controller/radio/radio_controller @@ -215,7 +220,7 @@ var/global/datum/controller/radio/radio_controller if(start_point.z!=end_point.z || get_dist(start_point, end_point) > range) continue device.receive_signal(signal, TRANSMISSION_RADIO, frequency) - for(var/obj/device in devices["_default"]) + for(var/obj/device in devices[RADIO_DEFAULT]) if(device == source) continue if(range) @@ -251,7 +256,7 @@ var/global/datum/controller/radio/radio_controller /datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) if (!filter) - filter = "_default" + filter = RADIO_DEFAULT //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") var/list/obj/devices_line = devices[filter] if (!devices_line) diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index afd2f72529..e9767e986f 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -88,7 +88,7 @@ obj/machinery/door/airlock/proc/command_completed(var/command) return 1 //Unknown command. Just assume it's completed. -obj/machinery/door/airlock/proc/send_status() +obj/machinery/door/airlock/proc/send_status(var/bumped = 0) if(radio_connection) var/datum/signal/signal = new signal.transmission_method = 1 //radio signal @@ -97,6 +97,9 @@ obj/machinery/door/airlock/proc/send_status() signal.data["door_status"] = density?("closed"):("open") signal.data["lock_status"] = locked?("locked"):("unlocked") + + if (bumped) + signal.data["bumped_with_access"] = 1 radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) @@ -116,17 +119,7 @@ obj/machinery/door/airlock/Bumped(atom/AM) if(istype(AM, /obj/mecha)) var/obj/mecha/mecha = AM if(density && radio_connection && mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access))) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - - signal.data["door_status"] = density?("closed"):("open") - signal.data["lock_status"] = locked?("locked"):("unlocked") - - signal.data["bumped_with_access"] = 1 - - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) + send_status(1) return obj/machinery/door/airlock/proc/set_frequency(new_frequency) diff --git a/code/game/machinery/embedded_controller/airlock_controllers.dm b/code/game/machinery/embedded_controller/airlock_controllers.dm index 4a2a9c5e56..c7891ef69b 100644 --- a/code/game/machinery/embedded_controller/airlock_controllers.dm +++ b/code/game/machinery/embedded_controller/airlock_controllers.dm @@ -1,6 +1,7 @@ //base type for controllers of two-door systems /obj/machinery/embedded_controller/radio/airlock // Setup parameters only + radio_filter = RADIO_AIRLOCK var/tag_exterior_door var/tag_interior_door var/tag_airpump diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 90a2ca5720..24c49f9fa5 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -265,7 +265,7 @@ var/datum/signal/signal = new signal.data["tag"] = tag signal.data["command"] = command - post_signal(signal) + post_signal(signal, RADIO_AIRLOCK) /datum/computer/file/embedded_program/airlock/proc/signalPump(var/tag, var/power, var/direction, var/pressure) var/datum/signal/signal = new diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index a71f4017e3..ec41175380 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -49,6 +49,7 @@ //var/radio_power_use = 50 //power used to xmit signals var/frequency = 1379 + var/radio_filter = null var/datum/radio_frequency/radio_connection unacidable = 1 @@ -64,15 +65,15 @@ else icon_state = "airlock_control_off" -/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal) +/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, var/filter = null) signal.transmission_method = TRANSMISSION_RADIO if(radio_connection) //use_power(radio_power_use) //neat idea, but causes way too much lag. - return radio_connection.post_signal(src, signal) + return radio_connection.post_signal(src, signal, filter) else del(signal) /obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency) radio_controller.remove_object(src, frequency) frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency) \ No newline at end of file + radio_connection = radio_controller.add_object(src, frequency, radio_filter) \ No newline at end of file diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index ac27ba20a2..cbdc5ced9a 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -76,17 +76,6 @@ set category = "Debug" set name = "Radio report" - var/filters = list( - "1" = "RADIO_TO_AIRALARM", - "2" = "RADIO_FROM_AIRALARM", - "3" = "RADIO_CHAT", - "4" = "RADIO_ATMOSIA", - "5" = "RADIO_NAVBEACONS", - "6" = "RADIO_AIRLOCK", - "7" = "RADIO_SECBOT", - "8" = "RADIO_MULEBOT", - "_default" = "NO_FILTER" - ) var/output = "Radio Report
" for (var/fq in radio_controller.frequencies) output += "Freq: [fq]
" @@ -97,9 +86,9 @@ for (var/filter in fqs.devices) var/list/f = fqs.devices[filter] if (!f) - output += "  [filters[filter]]: ERROR
" + output += "  [filter]: ERROR
" continue - output += "  [filters[filter]]: [f.len]
" + output += "  [filter]: [f.len]
" for (var/device in f) if (isobj(device)) output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
"