diff --git a/Source/Vehicles/Components/Vehicles/VehiclePawn/VehiclePawn_Combat.cs b/Source/Vehicles/Components/Vehicles/VehiclePawn/VehiclePawn_Combat.cs
index 80e67c0d..3aefedec 100644
--- a/Source/Vehicles/Components/Vehicles/VehiclePawn/VehiclePawn_Combat.cs
+++ b/Source/Vehicles/Components/Vehicles/VehiclePawn/VehiclePawn_Combat.cs
@@ -69,7 +69,7 @@ public void CheckForCollisions(float moveSpeed)
{
if (Map.thingGrid.ThingAt(cell, ThingCategory.Pawn) is Pawn pawn and not VehiclePawn)
{
- if (pawn.Faction.HostileTo(Faction) || Faction == null ||
+ if (TargetingHelper.IsHostileToVehicleOrFaction(this, pawn) || Faction == null ||
Rand.Chance(VehicleDamager.FriendlyFireChance(this, pawn)))
{
(float pawnDamage, float vehicleDamage) = CalculateImpactDamage(pawn, this, moveSpeed);
diff --git a/Source/Vehicles/Utility/Helpers/TargetingHelper.cs b/Source/Vehicles/Utility/Helpers/TargetingHelper.cs
index a823529c..b34d6a5c 100644
--- a/Source/Vehicles/Utility/Helpers/TargetingHelper.cs
+++ b/Source/Vehicles/Utility/Helpers/TargetingHelper.cs
@@ -36,6 +36,11 @@ public static bool TryGetTarget(this VehicleTurret turret, out LocalTargetInfo t
return false;
}
+ internal static bool IsHostileToVehicleOrFaction(VehiclePawn vehicle, Thing target)
+ {
+ return vehicle.HostileTo(target) || target.HostileTo(vehicle.Faction);
+ }
+
///
/// Best attack target for VehicleTurret
///
@@ -81,7 +86,7 @@ private static IAttackTarget BestAttackTarget(VehicleTurret turret, TargetScanFl
{
return false;
}
- if (!searcherPawn.HostileTo(thing))
+ if (!IsHostileToVehicleOrFaction(searcherPawn, thing))
{
return false;
}
@@ -162,8 +167,14 @@ private static IAttackTarget BestAttackTarget(VehicleTurret turret, TargetScanFl
return true;
};
- List tmpTargets =
- [.. searcherPawn.Map.attackTargetsCache.GetPotentialTargetsFor(searcherPawn)];
+ var attackTargetsCache = searcherPawn.Map.attackTargetsCache;
+ HashSet targetSet = [.. attackTargetsCache.GetPotentialTargetsFor(searcherPawn)];
+ if (searcherPawn.Faction != null)
+ {
+ targetSet.UnionWith(attackTargetsCache.TargetsHostileToFaction(searcherPawn.Faction));
+ }
+ List tmpTargets = [.. targetSet];
+
bool flag = false;
for (int i = 0; i < tmpTargets.Count; i++)
{