NPC refactor (#10122)

Co-authored-by: metalgearsloth <metalgearsloth@gmail.com>
This commit is contained in:
metalgearsloth
2022-09-06 00:28:23 +10:00
committed by GitHub
parent 138e328c04
commit 0286b88388
290 changed files with 13842 additions and 5939 deletions

View File

@@ -0,0 +1,44 @@
using System.Linq;
using System.Threading.Tasks;
using Content.Server.NPC.Components;
using Robust.Shared.Random;
namespace Content.Server.NPC.HTN.PrimitiveTasks.Operators.Test;
public sealed class PickPathfindPointOperator : HTNOperator
{
[Dependency] private readonly IEntityManager _entManager = default!;
[Dependency] private readonly IRobustRandom _random = default!;
public override async Task<(bool Valid, Dictionary<string, object>? Effects)> Plan(NPCBlackboard blackboard)
{
var owner = blackboard.GetValue<EntityUid>(NPCBlackboard.Owner);
// Find all pathfind points on the same grid and choose to move to it.
var xform = _entManager.GetComponent<TransformComponent>(owner);
var gridUid = xform.GridUid;
if (gridUid == null)
return (false, null);
var points = new List<TransformComponent>();
foreach (var (point, pointXform) in _entManager.EntityQuery<NPCPathfindPointComponent, TransformComponent>(true))
{
if (gridUid != pointXform.GridUid)
continue;
points.Add(pointXform);
}
if (points.Count == 0)
return (false, null);
var selected = _random.Pick(points);
return (true, new Dictionary<string, object>()
{
{ NPCBlackboard.MovementTarget, selected.Coordinates }
});
}
}