NPCs can open doors (#7909)

This commit is contained in:
metalgearsloth
2022-05-03 18:25:01 +10:00
committed by GitHub
parent 12681a6a38
commit 9b8bfde458
3 changed files with 40 additions and 27 deletions

View File

@@ -30,7 +30,6 @@ namespace Content.Server.AI.Pathfinding
public sealed class PathfindingSystem : EntitySystem
{
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
[Dependency] private readonly AccessReaderSystem _accessReader = default!;
public IReadOnlyDictionary<GridId, Dictionary<Vector2i, PathfindingChunk>> Graph => _graph;
@@ -207,12 +206,11 @@ namespace Content.Server.AI.Pathfinding
SubscribeLocalEvent<MoveEvent>(QueueMoveEvent);
SubscribeLocalEvent<AccessReaderChangeMessage>(QueueAccessChangeMessage);
SubscribeLocalEvent<GridRemovalEvent>(HandleGridRemoval);
SubscribeLocalEvent<GridModifiedEvent>(QueueGridChange);
SubscribeLocalEvent<TileChangedEvent>(QueueTileChange);
// Handle all the base grid changes
// Anything that affects traversal (i.e. collision layer) is handled separately.
}
private void HandleTileUpdate(TileRef tile)
@@ -231,14 +229,6 @@ namespace Content.Server.AI.Pathfinding
}
}
private void QueueGridChange(GridModifiedEvent ev)
{
foreach (var (position, _) in ev.Modified)
{
_tileUpdateQueue.Enqueue(ev.Grid.GetTileRef(position));
}
}
private void QueueTileChange(TileChangedEvent ev)
{
_tileUpdateQueue.Enqueue(ev.NewTile);
@@ -264,8 +254,9 @@ namespace Content.Server.AI.Pathfinding
return;
}
var grid = _mapManager.GetGrid(EntityManager.GetComponent<TransformComponent>(entity).GridID);
var tileRef = grid.GetTileRef(EntityManager.GetComponent<TransformComponent>(entity).Coordinates);
var xform = EntityManager.GetComponent<TransformComponent>(entity);
var grid = _mapManager.GetGrid(xform.GridID);
var tileRef = grid.GetTileRef(xform.Coordinates);
var chunk = GetChunk(tileRef);
var node = chunk.GetNode(tileRef);
@@ -306,9 +297,10 @@ namespace Content.Server.AI.Pathfinding
}
// Memory leak protection until grid parenting confirmed fix / you REALLY need the performance
var gridBounds = _mapManager.GetGrid(EntityManager.GetComponent<TransformComponent>(moveEvent.Sender).GridID).WorldBounds;
var xform = EntityManager.GetComponent<TransformComponent>(moveEvent.Sender);
var gridBounds = _mapManager.GetGrid(xform.GridID).WorldBounds;
if (!gridBounds.Contains(EntityManager.GetComponent<TransformComponent>(moveEvent.Sender).WorldPosition))
if (!gridBounds.Contains(xform.WorldPosition))
{
HandleEntityRemove(moveEvent.Sender);
return;
@@ -321,7 +313,7 @@ namespace Content.Server.AI.Pathfinding
return;
}
var newGridId = moveEvent.NewPosition.GetGridId(_entityManager);
var newGridId = moveEvent.NewPosition.GetGridId(EntityManager);
if (newGridId == GridId.Invalid)
{
HandleEntityRemove(moveEvent.Sender);