From 535349dccecbfffb524b66be89f4ee2fd39c61c3 Mon Sep 17 00:00:00 2001 From: Heroman3003 <31296024+Heroman3003@users.noreply.github.com> Date: Thu, 25 Apr 2019 10:21:44 +1000 Subject: [PATCH] Fixes ai priority targeting --- code/modules/ai/ai_holder_targeting.dm | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/code/modules/ai/ai_holder_targeting.dm b/code/modules/ai/ai_holder_targeting.dm index 623b2f0b83..b13d4d6844 100644 --- a/code/modules/ai/ai_holder_targeting.dm +++ b/code/modules/ai/ai_holder_targeting.dm @@ -56,12 +56,8 @@ /datum/ai_holder/proc/pick_target(list/targets) if(target != null) // If we already have a target, but are told to pick again, calculate the lowest distance between all possible, and pick from the lowest distance targets. targets = target_filter_distance(targets) -// for(var/possible_target in targets) -// var/atom/A = possible_target -// var/target_dist = get_dist(holder, target) -// var/possible_target_distance = get_dist(holder, A) -// if(target_dist < possible_target_distance) -// targets -= A + else + targets = target_filter_closest(targets) if(!targets.len) // We found nothing. return @@ -95,6 +91,23 @@ targets -= A return targets +/datum/ai_holder/proc/target_filter_closest(list/targets) + var/lowest_distance = -1 + var/list/sorted_targets = list() + for(var/possible_target in targets) + var/atom/A = possible_target + var/current_distance = get_dist(holder, A) + if(lowest_distance == -1) + lowest_distance = current_distance + sorted_targets += A + else if(current_distance < lowest_distance) + targets.Cut() + lowest_distance = current_distance + sorted_targets += A + else if(current_distance == lowest_distance) + sorted_targets += A + return sorted_targets + /datum/ai_holder/proc/can_attack(atom/movable/the_target) if(!can_see_target(the_target)) return FALSE