mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-12 10:42:37 +00:00
* Targeting Datums Renamed (and global) (#79513) ## About The Pull Request [Implements the backend required to make targeting datums global](6901ead12e) It's inconsistent with the rest of basic ai for these to have a high degree of state, plus like, such a waste yaknow? [Implements GET_TARGETING_STRATEGY](d79c29134d) Regexes used: new.*(/datum/targetting_datum[^,(]*)\(*\)* -> GET_TARGETING_STRATEGY($1) Renamed all instances of targetting to targeting (also targetting datum -> targeting strategy) I've used GET_TARGETING_STRATEGY at the source where the keys are actually used, rather then in the listing. This works out just fine. ## Why It's Good For The Game Not a misspelled name through the whole codebase, very slightly less memory load for basically no downside (slight cpu cost maybe but not a significant one. --------- Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com> * Targeting Datums Renamed (and global) * Update dogs.dm * Modular * Modular * Modular * Merge skew? * Revert "Merge skew?" This reverts commit 0889389ab5cb5c56655f1860d9173ba87efe9a22. --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
30 lines
1.1 KiB
Plaintext
30 lines
1.1 KiB
Plaintext
/**
|
|
* Find mobs who are holding the bb configurable object type
|
|
*
|
|
* This is an extension of basic targeting behaviour, that allows you to
|
|
* only target the mob if they have a specific item in their hand.
|
|
*
|
|
*/
|
|
/datum/targeting_strategy/basic/holding_object
|
|
/// BB key that holds the target typepath to use
|
|
var/target_item_key = BB_TARGET_HELD_ITEM
|
|
|
|
///Returns true or false depending on if the target can be attacked by the mob
|
|
/datum/targeting_strategy/basic/holding_object/can_attack(mob/living/living_mob, atom/target, vision_range)
|
|
var/datum/ai_controller/controller = living_mob.ai_controller
|
|
var/object_type_path = controller.blackboard[target_item_key]
|
|
|
|
if (object_type_path == null)
|
|
return FALSE // no op
|
|
if(!ismob(target))
|
|
return FALSE // no hands no problems
|
|
|
|
// Look at me, type casting like a grown up
|
|
var/mob/targetmob = target
|
|
// Check if our parent behaviour agrees we can attack this target (we ignore faction by default)
|
|
var/can_attack = ..()
|
|
if(can_attack && targetmob.is_holding_item_of_type(object_type_path))
|
|
return TRUE // they have the item
|
|
// No valid target
|
|
return FALSE
|