diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 77f41cb2eb1..50a814b8de6 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -349,6 +349,51 @@ user.set_machine(src) wires.Interact(user) +/obj/machinery/camera/proc/add_network(var/network_name) + add_networks(list(network_name)) + +/obj/machinery/camera/proc/remove_network(var/network_name) + remove_networks(list(network_name)) + +/obj/machinery/camera/proc/add_networks(var/list/networks) + var/network_added + network_added = 0 + for(var/network_name in networks) + if(!(network_name in src.network)) + network += network_name + network_added = 1 + + if(network_added) + invalidateCameraCache() + +/obj/machinery/camera/proc/remove_networks(var/list/networks) + var/network_removed + network_removed = 0 + for(var/network_name in networks) + if(network_name in src.network) + network -= network_name + network_removed = 1 + + if(network_removed) + invalidateCameraCache() + +/obj/machinery/camera/proc/replace_networks(var/list/networks) + if(networks.len != network.len) + network = networks + invalidateCameraCache() + return + + for(var/new_network in networks) + if(!(new_network in network)) + network = networks + invalidateCameraCache() + return + +/obj/machinery/camera/proc/clear_all_networks() + if(network.len) + network.Cut() + invalidateCameraCache() + /obj/machinery/camera/proc/nano_structure() var/cam[0] cam["name"] = sanitize(c_tag) diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index 19f2216272d..8be7f6ebe52 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -99,7 +99,7 @@ C.auto_turn() - C.network = uniquelist(tempnetwork) + C.replace_networks(uniquelist(tempnetwork)) tempnetwork = difflist(C.network,restricted_camera_networks) if(!tempnetwork.len)//Camera isn't on any open network - remove its chunk from AI visibility. cameranet.removeCamera(C) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 9bc40c779d8..a9b040f6471 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -37,7 +37,7 @@ R.icon_state = "[R.ckey]-Standard" del(R.module) R.module = null - R.camera.network.Remove(list("Engineering","Medical","MINE")) + R.camera.remove_networks(list("Engineering","Medical","MINE")) R.updatename("Default") R.status_flags |= CANPUSH R.updateicon() diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 73bd2348aa5..2be4060de28 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -64,10 +64,9 @@ /datum/alarm_handler/proc/on_alarm_change(var/datum/alarm/alarm, var/was_raised) for(var/obj/machinery/camera/C in alarm.cameras()) if(was_raised) - C.network.Add(category) - invalidateCameraCache() + C.add_network(category) else - C.network.Remove(category) + C.remove_network(category) notify_listeners(alarm, was_raised) /datum/alarm_handler/proc/get_alarm_severity_for_origin(var/atom/origin) diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm index 8d73a40e68c..b7db5da5913 100644 --- a/code/modules/clothing/spacesuits/spacesuits.dm +++ b/code/modules/clothing/spacesuits/spacesuits.dm @@ -32,7 +32,7 @@ icon_action_button = "[icon_state]" camera = new /obj/machinery/camera(src) - camera.network = camera_networks + camera.replace_networks(camera_networks) cameranet.removeCamera(camera) camera.c_tag = user.name user << "\blue User scanned as [camera.c_tag]. Camera activated." diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index bda08125e7b..c1bfd9e0096 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -31,7 +31,7 @@ add_language("Drone Talk", 1) if(camera && "Robots" in camera.network) - camera.network.Add("Engineering") + camera.add_network("Engineering") //They are unable to be upgraded, so let's give them a bit of a better battery. cell.maxcharge = 10000 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 667f57f953f..d5ff0f1c094 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -125,7 +125,7 @@ var/list/robot_verbs_default = list( if(!scrambledcodes && !camera) camera = new /obj/machinery/camera(src) camera.c_tag = real_name - camera.network = list("SS13","Robots") + camera.replace_networks(list("SS13","Robots")) if(wires.IsIndexCut(BORG_WIRE_CAMERA)) camera.status = 0 @@ -275,7 +275,7 @@ var/list/robot_verbs_default = list( module = new /obj/item/weapon/robot_module/miner(src) module.channels = list("Supply" = 1) if(camera && "Robots" in camera.network) - camera.network.Add("MINE") + camera.add_network("MINE") module_sprites["Basic"] = "Miner_old" module_sprites["Advanced Droid"] = "droid-miner" module_sprites["Treadhead"] = "Miner" @@ -285,7 +285,7 @@ var/list/robot_verbs_default = list( module = new /obj/item/weapon/robot_module/crisis(src) module.channels = list("Medical" = 1) if(camera && "Robots" in camera.network) - camera.network.Add("Medical") + camera.add_network("Medical") module_sprites["Basic"] = "Medbot" module_sprites["Standard"] = "surgeon" module_sprites["Advanced Droid"] = "droid-medical" @@ -296,7 +296,7 @@ var/list/robot_verbs_default = list( module = new /obj/item/weapon/robot_module/surgeon(src) module.channels = list("Medical" = 1) if(camera && "Robots" in camera.network) - camera.network.Add("Medical") + camera.add_network("Medical") module_sprites["Basic"] = "Medbot" module_sprites["Standard"] = "surgeon" @@ -318,7 +318,7 @@ var/list/robot_verbs_default = list( module = new /obj/item/weapon/robot_module/engineering(src) module.channels = list("Engineering" = 1) if(camera && "Robots" in camera.network) - camera.network.Add("Engineering") + camera.add_network("Engineering") module_sprites["Basic"] = "Engineering" module_sprites["Antique"] = "engineerrobot" module_sprites["Landmate"] = "landmate" @@ -329,7 +329,7 @@ var/list/robot_verbs_default = list( module = new /obj/item/weapon/robot_module/construction(src) module.channels = list("Engineering" = 1) if(camera && "Robots" in camera.network) - camera.network.Add("Engineering") + camera.add_network("Engineering") module_sprites["Basic"] = "Engineering" module_sprites["Antique"] = "engineerrobot" module_sprites["Landmate"] = "landmate" @@ -1142,7 +1142,7 @@ var/list/robot_verbs_default = list( scrambledcodes = 1 //Disconnect it's camera so it's not so easily tracked. if(src.camera) - src.camera.network = list() + src.camera.clear_all_networks() cameranet.removeCamera(src.camera) diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm index 89cfe60b659..ab4f7b2269e 100644 --- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm @@ -194,7 +194,7 @@ radio = new /obj/item/device/radio/borg(src) camera = new /obj/machinery/camera(src) camera.c_tag = "Spiderbot-[real_name]" - camera.network = list("SS13") + camera.replace_networks(list("SS13")) ..()