mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 05:27:01 +01:00
Ports deer to basic mobs and adds some behaviors (#29270)
* ports deer to basic mobs and adds some behaviors * update updatepaths script number * whitespace * Apply suggestions from code review Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Signed-off-by: warriorstar-orion <orion@snowfrost.garden> --------- Signed-off-by: warriorstar-orion <orion@snowfrost.garden> Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
This commit is contained in:
co-authored by
PollardTheDragon
parent
9cabc380b4
commit
dfacf83e18
@@ -0,0 +1,24 @@
|
||||
/datum/ai_behavior/emote_on_target
|
||||
behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH
|
||||
|
||||
/datum/ai_behavior/emote_on_target/setup(datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/hunt_target = controller.blackboard[target_key]
|
||||
if(isnull(hunt_target))
|
||||
return FALSE
|
||||
set_movement_target(controller, hunt_target)
|
||||
|
||||
/datum/ai_behavior/emote_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, list/emote_list)
|
||||
var/atom/target = controller.blackboard[target_key]
|
||||
if(!length(emote_list) || isnull(target))
|
||||
return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY
|
||||
run_emote(controller.pawn, target, emote_list)
|
||||
return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY
|
||||
|
||||
/datum/ai_behavior/emote_on_target/finish_action(datum/ai_controller/controller, succeeded, target_key)
|
||||
. = ..()
|
||||
if(succeeded)
|
||||
controller.clear_blackboard_key(target_key)
|
||||
|
||||
/datum/ai_behavior/emote_on_target/proc/run_emote(mob/living/living_pawn, atom/target, list/emote_list)
|
||||
living_pawn.custom_emote(EMOTE_VISIBLE, "[pick(emote_list)] [target]")
|
||||
@@ -0,0 +1,26 @@
|
||||
/// Makes a mob simply stop and stare at a movable... yea...
|
||||
/datum/ai_behavior/stop_and_stare
|
||||
behavior_flags = AI_BEHAVIOR_MOVE_AND_PERFORM
|
||||
|
||||
/datum/ai_behavior/stop_and_stare/setup(datum/ai_controller/controller, target_key)
|
||||
. = ..()
|
||||
var/atom/movable/target = controller.blackboard[target_key]
|
||||
return ismovable(target) && isturf(target.loc) && ismob(controller.pawn)
|
||||
|
||||
/datum/ai_behavior/stop_and_stare/get_cooldown(datum/ai_controller/cooldown_for)
|
||||
return cooldown_for.blackboard[BB_STATIONARY_COOLDOWN]
|
||||
|
||||
/datum/ai_behavior/stop_and_stare/perform(seconds_per_tick, datum/ai_controller/controller, target_key)
|
||||
var/atom/movable/target = controller.blackboard[target_key]
|
||||
if(!ismovable(target) || !isturf(target.loc)) // just to make sure that nothing funky happened between setup and perform
|
||||
return AI_BEHAVIOR_DELAY
|
||||
|
||||
var/mob/pawn_mob = controller.pawn
|
||||
var/turf/pawn_turf = get_turf(pawn_mob)
|
||||
|
||||
pawn_mob.face_atom(target)
|
||||
set_movement_target(controller, pawn_turf, /datum/ai_movement/complete_stop)
|
||||
|
||||
if(controller.blackboard[BB_STATIONARY_MOVE_TO_TARGET])
|
||||
addtimer(CALLBACK(src, PROC_REF(set_movement_target), controller, target, initial(controller.ai_movement)), (controller.blackboard[BB_STATIONARY_SECONDS] + 1 SECONDS))
|
||||
return AI_BEHAVIOR_DELAY
|
||||
Reference in New Issue
Block a user