SUBSYSTEM_DEF(machines) name = "Machines" init_order = INIT_ORDER_MACHINES flags = SS_KEEP_TIMING wait = 2 SECONDS var/list/processing = list() var/list/currentrun = list() ///List of all powernets on the server. var/list/datum/powernet/powernets = list() /datum/controller/subsystem/machines/Initialize() makepowernets() fire() return SS_INIT_SUCCESS /datum/controller/subsystem/machines/proc/makepowernets() for(var/datum/powernet/power_network as anything in powernets) qdel(power_network) powernets.Cut() for(var/obj/structure/cable/power_cable as anything in GLOB.cable_list) if(!power_cable.powernet) var/datum/powernet/new_powernet = new() new_powernet.add_cable(power_cable) propagate_network(power_cable, power_cable.powernet) /datum/controller/subsystem/machines/stat_entry(msg) msg = "M:[length(processing)]|PN:[length(powernets)]" return ..() /datum/controller/subsystem/machines/fire(resumed = FALSE) if (!resumed) for(var/datum/powernet/powernet as anything in powernets) powernet.reset() //reset the power state. src.currentrun = processing.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun while(currentrun.len) var/obj/machinery/thing = currentrun[currentrun.len] currentrun.len-- if(QDELETED(thing) || thing.process(wait * 0.1) == PROCESS_KILL) processing -= thing thing.datum_flags &= ~DF_ISPROCESSING if (MC_TICK_CHECK) return /datum/controller/subsystem/machines/proc/setup_template_powernets(list/cables) var/obj/structure/cable/PC for(var/A in 1 to cables.len) PC = cables[A] if(!PC.powernet) var/datum/powernet/NewPN = new() NewPN.add_cable(PC) propagate_network(PC,PC.powernet) /datum/controller/subsystem/machines/Recover() if (istype(SSmachines.processing)) processing = SSmachines.processing if (istype(SSmachines.powernets)) powernets = SSmachines.powernets