diff --git a/code/controllers/Processes/mob.dm b/code/controllers/Processes/mob.dm deleted file mode 100644 index 6b623e77305..00000000000 --- a/code/controllers/Processes/mob.dm +++ /dev/null @@ -1,29 +0,0 @@ -/datum/controller/process/mob - var/tmp/datum/updateQueue/updateQueueInstance - -/datum/controller/process/mob/setup() - name = "mob" - schedule_interval = 20 // every 2 seconds - start_delay = 16 - -/datum/controller/process/mob/started() - ..() - if(!mob_list) - mob_list = list() - -/datum/controller/process/mob/doWork() - for(last_object in mob_list) - var/mob/M = last_object - if(M && !QDELETED(M)) - try - M.Life() - catch(var/exception/e) - catchException(e, M) - SCHECK - else - catchBadType(M) - mob_list -= M - -/datum/controller/process/mob/statProcess() - ..() - stat(null, "[mob_list.len] mobs") \ No newline at end of file diff --git a/code/controllers/subsystems/mobs.dm b/code/controllers/subsystems/mobs.dm new file mode 100644 index 00000000000..fcca3bd9a24 --- /dev/null +++ b/code/controllers/subsystems/mobs.dm @@ -0,0 +1,38 @@ +// +// Mobs Subsystem - Process mob.Life() +// +SUBSYSTEM_DEF(mobs) + name = "Mobs" + priority = 100 + wait = 2 SECONDS + flags = SS_KEEP_TIMING|SS_NO_INIT + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + + var/list/currentrun = list() + +/datum/controller/subsystem/mobs/stat_entry() + ..("P: [global.mob_list.len]") + +/datum/controller/subsystem/mobs/fire(resumed = 0) + if (!resumed) + src.currentrun = mob_list.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + var/times_fired = src.times_fired + while(currentrun.len) + var/mob/M = currentrun[currentrun.len] + currentrun.len-- + + if(QDELETED(M)) + mob_list -= M + else + // Right now mob.Life() is unstable enough I think we need to use a try catch. + // Obviously we should try and get rid of this for performance reasons when we can. + try + M.Life(times_fired) + catch(var/exception/e) + log_runtime(e, M, "Caught by [name] subsystem") + + if (MC_TICK_CHECK) + return diff --git a/vorestation.dme b/vorestation.dme index ec0b53caa51..d796a455fee 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -173,7 +173,6 @@ #include "code\controllers\Processes\inactivity.dm" #include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\machinery.dm" -#include "code\controllers\Processes\mob.dm" #include "code\controllers\Processes\nanoui.dm" #include "code\controllers\Processes\obj.dm" #include "code\controllers\Processes\planet.dm" @@ -188,6 +187,7 @@ #include "code\controllers\ProcessScheduler\core\process.dm" #include "code\controllers\ProcessScheduler\core\processScheduler.dm" #include "code\controllers\subsystems\garbage.dm" +#include "code\controllers\subsystems\mobs.dm" #include "code\controllers\subsystems\transcore_vr.dm" #include "code\datums\ai_law_sets.dm" #include "code\datums\ai_laws.dm"