From f6f0e781577210edb064d7ac381d52dae5f0f0c9 Mon Sep 17 00:00:00 2001 From: variableundefined <40092670+variableundefined@users.noreply.github.com> Date: Thu, 30 Aug 2018 21:57:02 +0800 Subject: [PATCH] Port over NPC Pool to Subsystem --- .../{Processes => subsystem}/npcpool.dm | 38 ++++--------------- .../carbon/human/interactive/interactive.dm | 10 ++--- paradise.dme | 2 +- 3 files changed, 14 insertions(+), 36 deletions(-) rename code/controllers/{Processes => subsystem}/npcpool.dm (74%) diff --git a/code/controllers/Processes/npcpool.dm b/code/controllers/subsystem/npcpool.dm similarity index 74% rename from code/controllers/Processes/npcpool.dm rename to code/controllers/subsystem/npcpool.dm index 945938852b4..8513fbfdaad 100644 --- a/code/controllers/Processes/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -1,6 +1,9 @@ -var/global/datum/controller/process/npcpool/npc_master +SUBSYSTEM_DEF(npcpool) + name = "NPC Pool" + flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND + priority = FIRE_PRIORITY_NPC + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME -/datum/controller/process/npcpool var/list/canBeUsed = list() var/list/canBeUsed_non = list() var/list/needsDelegate = list() @@ -9,36 +12,14 @@ var/global/datum/controller/process/npcpool/npc_master var/list/botPool_l = list() //list of all npcs using the pool var/list/botPool_l_non = list() //list of all non SNPC mobs using the pool -/datum/controller/process/npcpool/setup() - name = "npc pool" - schedule_interval = 100 - start_delay = 17 - log_startup_progress("NPC pool ticker starting up.") - -/datum/controller/process/npcpool/copyStateFrom(var/datum/controller/process/npcpool/target) - canBeUsed = target.canBeUsed - canBeUsed_non = target.canBeUsed_non - needsDelegate = target.needsDelegate - needsAssistant = target.needsAssistant - needsHelp_non = target.needsHelp_non - botPool_l = target.botPool_l - botPool_l_non = target.botPool_l_non - - -DECLARE_GLOBAL_CONTROLLER(npcpool, npc_master) - -/datum/controller/process/npcpool/proc/insertBot(toInsert) +/datum/controller/subsystem/npcpool/proc/insertBot(toInsert) if(istype(toInsert, /mob/living/carbon/human/interactive)) botPool_l |= toInsert -/datum/controller/process/npcpool/proc/removeBot(toRemove) +/datum/controller/subsystem/npcpool/proc/removeBot(toRemove) botPool_l -= toRemove -/datum/controller/process/npcpool/statProcess() - ..() - stat(null, "T [botPool_l.len + botPool_l_non.len] | D [needsDelegate.len] | A [needsAssistant.len + needsHelp_non.len] | U [canBeUsed.len + canBeUsed_non.len]") - -/datum/controller/process/npcpool/doWork() +/datum/controller/subsystem/npcpool/fire() //bot delegation and coordination systems //General checklist/Tasks for delegating a task or coordinating it (for SNPCs) // 1. Bot proximity to task target: if too far, delegate, if close, coordinate @@ -66,7 +47,6 @@ DECLARE_GLOBAL_CONTROLLER(npcpool, npc_master) else canBeUsed |= check - SCHECK if(needsDelegate.len) needsDelegate -= pick(needsDelegate) // cheapo way to make sure stuff doesn't pingpong around in the pool forever. delegation runs seperately to each loop so it will work much smoother @@ -91,7 +71,6 @@ DECLARE_GLOBAL_CONTROLLER(npcpool, npc_master) needsDelegate -= check canBeUsed -= candidate candidate.change_eye_color(255, 0, 0) - SCHECK if(needsAssistant.len) needsAssistant -= pick(needsAssistant) @@ -116,4 +95,3 @@ DECLARE_GLOBAL_CONTROLLER(npcpool, npc_master) needsAssistant -= check canBeUsed -= candidate candidate.change_eye_color(255, 255, 0) - SCHECK diff --git a/code/modules/mob/living/carbon/human/interactive/interactive.dm b/code/modules/mob/living/carbon/human/interactive/interactive.dm index 763a5ef15be..3c56ac3d47f 100644 --- a/code/modules/mob/living/carbon/human/interactive/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive/interactive.dm @@ -142,7 +142,7 @@ doing = 0 inactivity_period = 0 -/client/proc/resetSNPC(mob/living/carbon/human/interactive/T in npc_master.botPool_l) +/client/proc/resetSNPC(mob/living/carbon/human/interactive/T in SSnpcpool.botPool_l) set name = "Reset SNPC" set desc = "Reset the SNPC" set category = "Debug" @@ -153,7 +153,7 @@ if(istype(T)) T.reset() -/client/proc/toggleSNPC(mob/living/carbon/human/interactive/T in npc_master.botPool_l) +/client/proc/toggleSNPC(mob/living/carbon/human/interactive/T in SSnpcpool.botPool_l) set name = "Toggle SNPC Proccessing Mode" set desc = "Toggle SNPC Proccessing Mode" set category = "Debug" @@ -166,7 +166,7 @@ T.forceProcess = 1 to_chat(usr, "[T]'s processing has been switched to [T.alternateProcessing ? "High Profile" : "Low Profile"]") -/client/proc/customiseSNPC(mob/living/carbon/human/interactive/T in npc_master.botPool_l) +/client/proc/customiseSNPC(mob/living/carbon/human/interactive/T in SSnpcpool.botPool_l) set name = "Customize SNPC" set desc = "Customize the SNPC" set category = "Debug" @@ -419,7 +419,7 @@ sync_mind() random() doSetup() - npc_master.insertBot(src) + SSnpcpool.insertBot(src) loadVoice() hear_radio_list += src @@ -434,7 +434,7 @@ /mob/living/carbon/human/interactive/Destroy() hear_radio_list -= src snpc_list -= src - npc_master.removeBot(src) + SSnpcpool.removeBot(src) return ..() /mob/living/carbon/human/interactive/proc/retalTarget(mob/living/target) diff --git a/paradise.dme b/paradise.dme index 7c4deb70dd2..fdd6b4594c2 100644 --- a/paradise.dme +++ b/paradise.dme @@ -196,7 +196,6 @@ #include "code\controllers\Processes\lighting.dm" #include "code\controllers\Processes\nano_mob_hunter.dm" #include "code\controllers\Processes\npcai.dm" -#include "code\controllers\Processes\npcpool.dm" #include "code\controllers\Processes\obj.dm" #include "code\controllers\Processes\shuttles.dm" #include "code\controllers\Processes\ticker.dm" @@ -210,6 +209,7 @@ #include "code\controllers\subsystem\mobs.dm" #include "code\controllers\subsystem\nanoui.dm" #include "code\controllers\subsystem\nightshift.dm" +#include "code\controllers\subsystem\npcpool.dm" #include "code\controllers\subsystem\spacedrift.dm" #include "code\controllers\subsystem\sun.dm" #include "code\controllers\subsystem\throwing.dm"