Increase NPC chase persistence (#12850)
This commit is contained in:
@@ -232,7 +232,7 @@ public sealed partial class PathfindingSystem
|
||||
|
||||
private bool IsBodyRelevant(PhysicsComponent body)
|
||||
{
|
||||
if (!body.Hard || !body.CanCollide || body.BodyType != BodyType.Static)
|
||||
if (!body.Hard || body.BodyType != BodyType.Static)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@@ -262,7 +262,8 @@ public sealed partial class PathfindingSystem
|
||||
|
||||
private void OnBodyTypeChange(ref PhysicsBodyTypeChangedEvent ev)
|
||||
{
|
||||
if (IsBodyRelevant(ev.Component) &&
|
||||
if (ev.Component.CanCollide &&
|
||||
IsBodyRelevant(ev.Component) &&
|
||||
TryComp<TransformComponent>(ev.Entity, out var xform) &&
|
||||
xform.GridUid != null)
|
||||
{
|
||||
|
||||
@@ -87,13 +87,20 @@ public sealed partial class NPCCombatSystem
|
||||
return;
|
||||
}
|
||||
|
||||
if (TryComp<NPCSteeringComponent>(component.Owner, out var steering) &&
|
||||
steering.Status == SteeringStatus.NoPath)
|
||||
{
|
||||
component.Status = CombatStatus.TargetUnreachable;
|
||||
return;
|
||||
}
|
||||
|
||||
if (distance > weapon.Range)
|
||||
{
|
||||
component.Status = CombatStatus.TargetOutOfRange;
|
||||
return;
|
||||
}
|
||||
|
||||
var steering = EnsureComp<NPCSteeringComponent>(component.Owner);
|
||||
steering = EnsureComp<NPCSteeringComponent>(component.Owner);
|
||||
steering.Range = MathF.Max(0.2f, weapon.Range - 0.4f);
|
||||
|
||||
// Gets unregistered on component shutdown.
|
||||
|
||||
@@ -243,11 +243,6 @@ namespace Content.Server.NPC.Systems
|
||||
|
||||
var direction = targetMap.Position - ourMap.Position;
|
||||
|
||||
if (steering.Owner == new EntityUid(15315))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// Are we in range
|
||||
if (direction.Length <= arrivalDistance)
|
||||
{
|
||||
@@ -318,6 +313,12 @@ namespace Content.Server.NPC.Systems
|
||||
// TODO: Probably need partial planning support i.e. patch from the last node to where the target moved to.
|
||||
CheckPath(steering, xform, needsPath, distance);
|
||||
|
||||
if (steering.Pathfind && steering.CurrentPath.Count == 0)
|
||||
{
|
||||
SetDirection(mover, steering, Vector2.Zero, false);
|
||||
return;
|
||||
}
|
||||
|
||||
modifierQuery.TryGetComponent(steering.Owner, out var modifier);
|
||||
var moveSpeed = GetSprintSpeed(steering.Owner, modifier);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user