March into Mapness: Meateor (#74070)

This commit is contained in:
Jacquerel
2023-04-01 03:40:29 +01:00
committed by GitHub
parent 17e23fed64
commit 966b8e5fd8
28 changed files with 1785 additions and 96 deletions
@@ -0,0 +1,33 @@
/// Disables AI after a certain amount of time spent with no target, you will have to enable the AI again somewhere else
/datum/ai_planning_subtree/sleep_with_no_target
/// Behaviour to execute when sleeping
var/sleep_behaviour = /datum/ai_behavior/sleep_after_targetless_time
/// Target key to interrogate
var/target_key = BB_BASIC_MOB_CURRENT_TARGET
/datum/ai_planning_subtree/sleep_with_no_target/SelectBehaviors(datum/ai_controller/controller, delta_time)
. = ..()
controller.queue_behavior(sleep_behaviour, BB_BASIC_MOB_CURRENT_TARGET)
/// Disables AI after a certain amount of time spent with no target, you will have to enable the AI again somewhere else
/datum/ai_behavior/sleep_after_targetless_time
/// Turn off AI if we spend this many seconds without a target, don't use the macro because delta_time is already in seconds
var/time_to_wait = 10
/datum/ai_behavior/sleep_after_targetless_time/perform(delta_time, datum/ai_controller/controller, target_key)
var/datum/weakref/weak_target = controller.blackboard[target_key]
var/atom/target = weak_target?.resolve()
finish_action(controller, succeeded = !target, delta_time = delta_time)
/datum/ai_behavior/sleep_after_targetless_time/finish_action(datum/ai_controller/controller, succeeded, delta_time)
. = ..()
if (!succeeded)
controller.blackboard[BB_TARGETLESS_TIME] = 0
return
controller.blackboard[BB_TARGETLESS_TIME] += delta_time
if (controller.blackboard[BB_TARGETLESS_TIME] > time_to_wait)
enter_sleep(controller)
/// Disables AI, override to do additional things or something else
/datum/ai_behavior/sleep_after_targetless_time/proc/enter_sleep(datum/ai_controller/controller)
controller.set_ai_status(AI_STATUS_OFF)
@@ -6,6 +6,8 @@
var/target_key = BB_BASIC_MOB_CURRENT_TARGET
/// Behaviour to perform using ability
var/use_ability_behaviour = /datum/ai_behavior/targeted_mob_ability
/// If true we terminate planning after trying to use the ability.
var/finish_planning = TRUE
/datum/ai_planning_subtree/targeted_mob_ability/SelectBehaviors(datum/ai_controller/controller, delta_time)
if (!ability_key)
@@ -22,4 +24,5 @@
return
controller.queue_behavior(use_ability_behaviour, ability_key, target_key)
return SUBTREE_RETURN_FINISH_PLANNING
if (finish_planning)
return SUBTREE_RETURN_FINISH_PLANNING