Skip to content

Commit

Permalink
Tick checks unplanned controllers (tgstation#87506)
Browse files Browse the repository at this point in the history
Shakes fist at random overtime
  • Loading branch information
LemonInTheDark authored Oct 29, 2024
1 parent d9c3997 commit 7f5d9d7
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 4 deletions.
2 changes: 1 addition & 1 deletion code/_globalvars/lists/basic_ai.dm
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ GLOBAL_LIST_INIT(ai_controllers_by_status, list(
GLOBAL_LIST_EMPTY(ai_controllers_by_zlevel)

///basic ai controllers that are currently performing idled behaviors
GLOBAL_LIST_INIT(unplanned_controllers, list(
GLOBAL_LIST_INIT_TYPED(unplanned_controllers, /list/datum/ai_controller, list(
AI_STATUS_ON = list(),
AI_STATUS_IDLE = list(),
))
Expand Down
25 changes: 22 additions & 3 deletions code/controllers/subsystem/unplanned_controllers.dm
Original file line number Diff line number Diff line change
@@ -1,18 +1,37 @@
GLOBAL_LIST_EMPTY(unplanned_controller_subsystems)
/// Handles making mobs perform lightweight "idle" behaviors such as wandering around when they have nothing planned
SUBSYSTEM_DEF(unplanned_controllers)
name = "Unplanned AI Controllers"
flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
flags = SS_POST_FIRE_TIMING|SS_BACKGROUND
priority = FIRE_PRIORITY_UNPLANNED_NPC
init_order = INIT_ORDER_AI_CONTROLLERS
wait = 0.25 SECONDS
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
///what ai status are we interested in
var/target_status = AI_STATUS_ON
var/list/current_run = list()

/datum/controller/subsystem/unplanned_controllers/Initialize()
..()
GLOB.unplanned_controller_subsystems += src
return SS_INIT_SUCCESS

/datum/controller/subsystem/unplanned_controllers/Destroy()
GLOB.unplanned_controller_subsystems -= src
return ..()

/datum/controller/subsystem/unplanned_controllers/stat_entry(msg)
msg = "Planning AIs:[length(GLOB.unplanned_controllers[target_status])]"
return ..()

/datum/controller/subsystem/unplanned_controllers/fire(resumed)
for(var/datum/ai_controller/ai_controller as anything in GLOB.unplanned_controllers[target_status])
ai_controller.idle_behavior.perform_idle_behavior(wait * 0.1, ai_controller)
if(!resumed)
src.current_run = GLOB.unplanned_controllers[target_status].Copy()
var/list/current_run = src.current_run // cache for sonic speed
while(length(current_run))
var/datum/ai_controller/unplanned = current_run[current_run.len]
current_run.len--
if(!QDELETED(unplanned))
unplanned.idle_behavior.perform_idle_behavior(wait * 0.1, unplanned)
if (MC_TICK_CHECK)
return
3 changes: 3 additions & 0 deletions code/datums/ai/_ai_controller.dm
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,9 @@ multiple modular subtrees with behaviors
if(isnull(ai_status) || ai_status == AI_STATUS_OFF)
return
GLOB.unplanned_controllers[ai_status] -= src
for(var/datum/controller/subsystem/unplanned_controllers/potential_holder as anything in GLOB.unplanned_controller_subsystems)
if(potential_holder.target_status == ai_status)
potential_holder.current_run -= src

/datum/ai_controller/proc/modify_cooldown(datum/ai_behavior/behavior, new_cooldown)
behavior_cooldowns[behavior] = new_cooldown
Expand Down

0 comments on commit 7f5d9d7

Please sign in to comment.