Fixes camera network changes not always being reflected in camera consoles.

Cameras with altered networks would not necessarily show up on camera consoles, primarily affecting cameras joining/leaving alarm zones.
This commit is contained in:
PsiOmega
2015-02-25 19:45:48 +01:00
parent 51b722485a
commit 4dca85b17c
8 changed files with 59 additions and 15 deletions

View File

@@ -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)

View File

@@ -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)

View File

@@ -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()

View File

@@ -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)

View File

@@ -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."

View File

@@ -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

View File

@@ -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)

View File

@@ -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"))
..()