diff --git a/code/controllers/Processes/Shuttle.dm b/code/controllers/Processes/Shuttle.dm new file mode 100644 index 0000000000..a10586d76d --- /dev/null +++ b/code/controllers/Processes/Shuttle.dm @@ -0,0 +1,9 @@ +/datum/controller/process/Shuttle/setup() + name = "shuttle controller" + schedule_interval = 20 // every 2 seconds + + if(!shuttle_controller) + shuttle_controller = new + +/datum/controller/process/Shuttle/doWork() + shuttle_controller.process() diff --git a/code/controllers/Processes/air.dm b/code/controllers/Processes/air.dm new file mode 100644 index 0000000000..d8ca38844a --- /dev/null +++ b/code/controllers/Processes/air.dm @@ -0,0 +1,22 @@ +/datum/controller/process/air/setup() + name = "air" + schedule_interval = 20 // every 2 seconds + + if(!air_master) + air_master = new + air_master.Setup() + +/datum/controller/process/air/doWork() + if(!air_processing_killed) + if(!air_master.Tick()) //Runtimed. + air_master.failed_ticks++ + + if(air_master.failed_ticks > 5) + world << "RUNTIMES IN ATMOS TICKER. Killing air simulation!" + world.log << "### ZAS SHUTDOWN" + + message_admins("ZASALERT: Shutting down! status: [air_master.tick_progress]") + log_admin("ZASALERT: Shutting down! status: [air_master.tick_progress]") + + air_processing_killed = TRUE + air_master.failed_ticks = 0 diff --git a/code/controllers/Processes/disease.dm b/code/controllers/Processes/disease.dm new file mode 100644 index 0000000000..a8d840097e --- /dev/null +++ b/code/controllers/Processes/disease.dm @@ -0,0 +1,11 @@ +/datum/controller/process/disease + var/tmp/datum/updateQueue/updateQueueInstance + +/datum/controller/process/disease/setup() + name = "disease" + schedule_interval = 20 // every 2 seconds + updateQueueInstance = new + +/datum/controller/process/disease/doWork() + updateQueueInstance.init(active_diseases, "process") + updateQueueInstance.Run() diff --git a/code/controllers/Processes/emergencyShuttle.dm b/code/controllers/Processes/emergencyShuttle.dm new file mode 100644 index 0000000000..e7289311b9 --- /dev/null +++ b/code/controllers/Processes/emergencyShuttle.dm @@ -0,0 +1,9 @@ +/datum/controller/process/emergencyShuttle/setup() + name = "emergency shuttle" + schedule_interval = 20 // every 2 seconds + + if(!emergency_shuttle) + emergency_shuttle = new + +/datum/controller/process/emergencyShuttle/doWork() + emergency_shuttle.process() diff --git a/code/controllers/Processes/event.dm b/code/controllers/Processes/event.dm new file mode 100644 index 0000000000..72bc01613d --- /dev/null +++ b/code/controllers/Processes/event.dm @@ -0,0 +1,6 @@ +/datum/controller/process/event/setup() + name = "event controller" + schedule_interval = 20 // every 2 seconds + +/datum/controller/process/event/doWork() + event_manager.process() \ No newline at end of file diff --git a/code/controllers/Processes/inactivity.dm b/code/controllers/Processes/inactivity.dm new file mode 100644 index 0000000000..b610502d19 --- /dev/null +++ b/code/controllers/Processes/inactivity.dm @@ -0,0 +1,16 @@ +/datum/controller/process/inactivity/setup() + name = "inactivity" + schedule_interval = INACTIVITY_KICK + +/datum/controller/process/inactivity/doWork() + if(config.kick_inactive) + for(var/client/C in clients) + if(C.is_afk(INACTIVITY_KICK)) + if(!istype(C.mob, /mob/dead)) + log_access("AFK: [key_name(C)]") + C << "You have been inactive for more than 10 minutes and have been disconnected." + del(C) + + scheck() + +#undef INACTIVITY_KICK diff --git a/code/controllers/Processes/lighting.dm b/code/controllers/Processes/lighting.dm new file mode 100644 index 0000000000..9399fe0253 --- /dev/null +++ b/code/controllers/Processes/lighting.dm @@ -0,0 +1,26 @@ +/datum/controller/process/lighting/setup() + name = "lighting" + schedule_interval = 5 // every .5 second + lighting_controller.initializeLighting() + +/datum/controller/process/lighting/doWork() + lighting_controller.lights_workload_max = \ + max(lighting_controller.lights_workload_max, lighting_controller.lights.len) + + for(var/datum/light_source/L in lighting_controller.lights) + if(L && L.check()) + lighting_controller.lights.Remove(L) + + scheck() + + lighting_controller.changed_turfs_workload_max = \ + max(lighting_controller.changed_turfs_workload_max, lighting_controller.changed_turfs.len) + + for(var/turf/T in lighting_controller.changed_turfs) + if(T && T.lighting_changed) + T.shift_to_subarea() + + scheck() + + if(lighting_controller.changed_turfs && lighting_controller.changed_turfs.len) + lighting_controller.changed_turfs.len = 0 // reset the changed list diff --git a/code/controllers/Processes/machinery.dm b/code/controllers/Processes/machinery.dm new file mode 100644 index 0000000000..52274a519a --- /dev/null +++ b/code/controllers/Processes/machinery.dm @@ -0,0 +1,34 @@ +/datum/controller/process/machinery/setup() + name = "machinery" + schedule_interval = 20 // every 2 seconds + +/datum/controller/process/machinery/doWork() + //#ifdef PROFILE_MACHINES + //machine_profiling.len = 0 + //#endif + + for(var/obj/machinery/M in machines) + if(M && !M.gcDestroyed) + #ifdef PROFILE_MACHINES + var/time_start = world.timeofday + #endif + + if(M.process() == PROCESS_KILL) + //M.inMachineList = 0 We don't use this debugging function + machines.Remove(M) + continue + + if(M && M.use_power) + M.auto_use_power() + + #ifdef PROFILE_MACHINES + var/time_end = world.timeofday + + if(!(M.type in machine_profiling)) + machine_profiling[M.type] = 0 + + machine_profiling[M.type] += (time_end - time_start) + #endif + + scheck() + diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm new file mode 100644 index 0000000000..b3765b0cf9 --- /dev/null +++ b/code/controllers/Processes/mob.dm @@ -0,0 +1,20 @@ +/datum/controller/process/mob + var/tmp/datum/updateQueue/updateQueueInstance + +/datum/controller/process/mob/setup() + name = "mob" + schedule_interval = 20 // every 2 seconds + updateQueueInstance = new + +/datum/controller/process/mob/started() + ..() + if(!updateQueueInstance) + if(!mob_list) + mob_list = list() + else if(mob_list.len) + updateQueueInstance = new + +/datum/controller/process/mob/doWork() + if(updateQueueInstance) + updateQueueInstance.init(mob_list, "Life") + updateQueueInstance.Run() diff --git a/code/controllers/Processes/nanoui.dm b/code/controllers/Processes/nanoui.dm new file mode 100644 index 0000000000..c8396bcab8 --- /dev/null +++ b/code/controllers/Processes/nanoui.dm @@ -0,0 +1,11 @@ +/datum/controller/process/nanoui + var/tmp/datum/updateQueue/updateQueueInstance + +/datum/controller/process/nanoui/setup() + name = "nanoui" + schedule_interval = 20 // every 2 seconds + updateQueueInstance = new + +/datum/controller/process/nanoui/doWork() + updateQueueInstance.init(nanomanager.processing_uis, "process") + updateQueueInstance.Run() diff --git a/code/controllers/Processes/obj.dm b/code/controllers/Processes/obj.dm new file mode 100644 index 0000000000..15ad98dd3d --- /dev/null +++ b/code/controllers/Processes/obj.dm @@ -0,0 +1,21 @@ +var/global/list/object_profiling = list() +/datum/controller/process/obj + var/tmp/datum/updateQueue/updateQueueInstance + +/datum/controller/process/obj/setup() + name = "obj" + schedule_interval = 20 // every 2 seconds + updateQueueInstance = new + +/datum/controller/process/obj/started() + ..() + if(!updateQueueInstance) + if(!processing_objects) + processing_objects = list() + else if(processing_objects.len) + updateQueueInstance = new + +/datum/controller/process/obj/doWork() + if(updateQueueInstance) + updateQueueInstance.init(processing_objects, "process") + updateQueueInstance.Run() diff --git a/code/controllers/Processes/pipenet.dm b/code/controllers/Processes/pipenet.dm new file mode 100644 index 0000000000..56a068f54c --- /dev/null +++ b/code/controllers/Processes/pipenet.dm @@ -0,0 +1,12 @@ +/datum/controller/process/pipenet/setup() + name = "pipenet" + schedule_interval = 20 // every 2 seconds + +/datum/controller/process/pipenet/doWork() + for(var/datum/pipe_network/pipeNetwork in pipe_networks) + if(istype(pipeNetwork) && !pipeNetwork.disposed) + pipeNetwork.process() + scheck() + continue + + pipe_networks.Remove(pipeNetwork) diff --git a/code/controllers/Processes/powernet.dm b/code/controllers/Processes/powernet.dm new file mode 100644 index 0000000000..1edf194915 --- /dev/null +++ b/code/controllers/Processes/powernet.dm @@ -0,0 +1,12 @@ +/datum/controller/process/powernet/setup() + name = "powernet" + schedule_interval = 20 // every 2 seconds + +/datum/controller/process/powernet/doWork() + for(var/datum/powernet/powerNetwork in powernets) + if(istype(powerNetwork) && !powerNetwork.disposed) + powerNetwork.reset() + scheck() + continue + + powernets.Remove(powerNetwork) diff --git a/code/controllers/Processes/sun.dm b/code/controllers/Processes/sun.dm new file mode 100644 index 0000000000..f09806cef5 --- /dev/null +++ b/code/controllers/Processes/sun.dm @@ -0,0 +1,7 @@ +/datum/controller/process/sun/setup() + name = "sun" + schedule_interval = 20 // every second + sun = new + +/datum/controller/process/sun/doWork() + sun.calc_position() diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm new file mode 100644 index 0000000000..891a511ec6 --- /dev/null +++ b/code/controllers/Processes/supply.dm @@ -0,0 +1,6 @@ +/datum/controller/process/supply/setup() + name = "supply controller" + schedule_interval = 300 // every 30 seconds + +/datum/controller/process/supply/doWork() + supply_controller.process() \ No newline at end of file diff --git a/code/controllers/Processes/ticker.dm b/code/controllers/Processes/ticker.dm new file mode 100644 index 0000000000..b7c45ba91a --- /dev/null +++ b/code/controllers/Processes/ticker.dm @@ -0,0 +1,35 @@ +var/global/datum/controller/process/ticker/tickerProcess + +/datum/controller/process/ticker + var/lastTickerTimeDuration + var/lastTickerTime + +/datum/controller/process/ticker/setup() + name = "ticker" + schedule_interval = 20 // every 2 seconds + + lastTickerTime = world.timeofday + + if(!ticker) + ticker = new + + tickerProcess = src + + spawn(0) + if(ticker) + ticker.pregame() + +/datum/controller/process/ticker/doWork() + var/currentTime = world.timeofday + + if(currentTime < lastTickerTime) // check for midnight rollover + lastTickerTimeDuration = (currentTime - (lastTickerTime - TICKS_IN_DAY)) / TICKS_IN_SECOND + else + lastTickerTimeDuration = (currentTime - lastTickerTime) / TICKS_IN_SECOND + + lastTickerTime = currentTime + + ticker.process() + +/datum/controller/process/ticker/proc/getLastTickerTimeDuration() + return lastTickerTimeDuration diff --git a/code/controllers/Processes/vote.dm b/code/controllers/Processes/vote.dm new file mode 100644 index 0000000000..5df5ce6979 --- /dev/null +++ b/code/controllers/Processes/vote.dm @@ -0,0 +1,6 @@ +/datum/controller/process/vote/setup() + name = "vote" + schedule_interval = 10 // every second + +/datum/controller/process/vote/doWork() + vote.process()