//this computer displays status and remotely activates multiple shutters / blast doors //todo: lock / electrify specified area doors? might be a bit gamebreaking /obj/machinery/computer/lockdown //for reference /*name = "lockdown control" desc = "Used to control blast doors." icon_state = "lockdown" circuit = "/obj/item/weapon/circuitboard/lockdown" var/connected_doors var/department*/ var/list/displayedNetworks New() ..() connected_doors = new/list() displayedNetworks = new/list() //only load blast doors for map-defined departments for the moment //door networks are hardcoded here. switch(department) if("Engineering") connected_doors.Add("Engineering") //Antiqua Engineering connected_doors.Add("Reactor core") connected_doors.Add("Control Room") connected_doors.Add("Vent Seal") connected_doors.Add("Rig Storage") connected_doors.Add("Fore Port Shutters") connected_doors.Add("Fore Starboard Shutters") connected_doors.Add("Electrical Storage Shutters") connected_doors.Add("Locker Room Shutters") connected_doors.Add("Breakroom Shutters") connected_doors.Add("Observation Shutters") //exodus engineering if("Medbay") //Exodus Medbay connected_doors.Add("Genetics Outer Shutters") connected_doors.Add("Genetics Inner Shutters") connected_doors.Add("Chemistry Outer Shutters") connected_doors.Add("Observation Shutters") connected_doors.Add("Patient Room 1 Shutters") connected_doors.Add("Patient Room 2 Shutters") connected_doors.Add("Patient Room 3 Shutters") for(var/net in connected_doors) connected_doors[net] = new/list() //loop through the world, grabbing all the relevant doors spawn(1) ConnectDoors() proc/ConnectDoors() for(var/list/L in connected_doors) for(var/item in L) L.Remove(item) // for(var/obj/machinery/door/poddoor/D in world) if(D.network in connected_doors) var/list/L = connected_doors[D.network] L.Add(D) attack_ai(mob/user) attack_hand(user) attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return if ( (get_dist(src, user) > 1 ) || (stat & (BROKEN|NOPOWER)) ) if (!istype(user, /mob/living/silicon)) user.machine = null user << browse(null, "window=lockdown") return var/t = "Lockdown Control
" t += "Refresh
" t += "Close
" t += "" var/empty = 1 for(var/curNetId in connected_doors) var/list/L = connected_doors[curNetId] if(!L || L.len == 0) continue empty = 0 t += "" if(curNetId in displayedNetworks) t += "" t += "" t += "" for(var/obj/machinery/door/poddoor/D in connected_doors[curNetId]) t += "" t += "" if(istype(D,/obj/machinery/door/poddoor/shutters)) t += "" else t += "" t += "" t += "" else t += "" t += "
\[-\] " + curNetId + "Open all / Close all
[D.id]Shutter ([D.density ? "Closed" : "Open"])Blast door ([D.density ? "Closed" : "Open"])Toggle
\[+\] " + curNetId + "
" if(empty) t += "No networks connected.
" t += "Refresh
" t += "Close
" user << browse(t, "window=lockdown;size=550x600") onclose(user, "lockdown") Topic(href, href_list) if(..()) return 1 if( href_list["close"] ) usr << browse(null, "window=lockdown") usr.machine = null if( href_list["show_net"] ) displayedNetworks.Add(href_list["show_net"]) updateDialog() if( href_list["hide_net"] ) if(href_list["hide_net"] in displayedNetworks) displayedNetworks.Remove(href_list["hide_net"]) updateDialog() if( href_list["toggle_id"] ) var/idTag = href_list["toggle_id"] for(var/net in connected_doors) for(var/obj/machinery/door/poddoor/D in connected_doors[net]) if(D.id == idTag) if(D.density) D.open() else D.close() break if( href_list["open_net"] ) var/netTag = href_list["open_net"] for(var/obj/machinery/door/poddoor/D in connected_doors[netTag]) if(D.density) //for some reason, there's no var saying whether the door is open or not >.> spawn(0) D.open() if( href_list["close_net"] ) var/netTag = href_list["close_net"] for(var/obj/machinery/door/poddoor/D in connected_doors[netTag]) if(!D.density) spawn(0) D.close() src.updateDialog()