Update GetComponents for IEnumerable (#18395)

This commit is contained in:
metalgearsloth
2023-07-30 03:34:41 +10:00
committed by GitHub
parent 20dd10388c
commit d4a85afb88
5 changed files with 15 additions and 15 deletions

View File

@@ -33,9 +33,8 @@ namespace Content.Server.Administration.Commands
var i = 0; var i = 0;
foreach (var component in components) foreach (var (uid, component) in components)
{ {
var uid = component.Owner;
entityManager.RemoveComponent(uid, component); entityManager.RemoveComponent(uid, component);
i++; i++;
} }

View File

@@ -31,7 +31,7 @@ namespace Content.Server.Administration.Commands
var entityManager = IoCManager.Resolve<IEntityManager>(); var entityManager = IoCManager.Resolve<IEntityManager>();
var entitiesWithComponents = components.Select(c => entityManager.GetAllComponents(c).Select(x => x.Owner)); var entitiesWithComponents = components.Select(c => entityManager.GetAllComponents(c).Select(x => x.Uid));
var entitiesWithAllComponents = entitiesWithComponents.Skip(1).Aggregate(new HashSet<EntityUid>(entitiesWithComponents.First()), (h, e) => { h.IntersectWith(e); return h; }); var entitiesWithAllComponents = entitiesWithComponents.Skip(1).Aggregate(new HashSet<EntityUid>(entitiesWithComponents.First()), (h, e) => { h.IntersectWith(e); return h; });
var count = 0; var count = 0;

View File

@@ -43,7 +43,7 @@ namespace Content.Server.Administration.Commands
var entityManager = IoCManager.Resolve<IEntityManager>(); var entityManager = IoCManager.Resolve<IEntityManager>();
var entityIds = new HashSet<string>(); var entityIds = new HashSet<string>();
var entitiesWithComponents = components.Select(c => entityManager.GetAllComponents(c).Select(x => x.Owner)).ToArray(); var entitiesWithComponents = components.Select(c => entityManager.GetAllComponents(c).Select(x => x.Uid)).ToArray();
var entitiesWithAllComponents = entitiesWithComponents.Skip(1).Aggregate(new HashSet<EntityUid>(entitiesWithComponents.First()), (h, e) => { h.IntersectWith(e); return h; }); var entitiesWithAllComponents = entitiesWithComponents.Skip(1).Aggregate(new HashSet<EntityUid>(entitiesWithComponents.First()), (h, e) => { h.IntersectWith(e); return h; });
foreach (var entity in entitiesWithAllComponents) foreach (var entity in entitiesWithAllComponents)

View File

@@ -13,9 +13,13 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
[Dependency] private readonly SharedTransformSystem _transform = default!; [Dependency] private readonly SharedTransformSystem _transform = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; [Dependency] private readonly SharedAppearanceSystem _appearance = default!;
private EntityQuery<TransformComponent> _xformQuery;
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
_xformQuery = GetEntityQuery<TransformComponent>();
SubscribeLocalEvent<PinpointerComponent, ActivateInWorldEvent>(OnActivate); SubscribeLocalEvent<PinpointerComponent, ActivateInWorldEvent>(OnActivate);
SubscribeLocalEvent<FTLCompletedEvent>(OnLocateTarget); SubscribeLocalEvent<FTLCompletedEvent>(OnLocateTarget);
} }
@@ -71,7 +75,7 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
{ {
if (!EntityManager.ComponentFactory.TryGetRegistration(component.Component, out var reg)) if (!EntityManager.ComponentFactory.TryGetRegistration(component.Component, out var reg))
{ {
Logger.Error($"Unable to find component registration for {component.Component} for pinpointer!"); Log.Error($"Unable to find component registration for {component.Component} for pinpointer!");
DebugTools.Assert(false); DebugTools.Assert(false);
return; return;
} }
@@ -100,10 +104,7 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
/// </summary> /// </summary>
private EntityUid? FindTargetFromComponent(EntityUid uid, Type whitelist, TransformComponent? transform = null) private EntityUid? FindTargetFromComponent(EntityUid uid, Type whitelist, TransformComponent? transform = null)
{ {
var xformQuery = GetEntityQuery<TransformComponent>(); _xformQuery.Resolve(uid, ref transform, false);
if (transform == null)
xformQuery.TryGetComponent(uid, out transform);
if (transform == null) if (transform == null)
return null; return null;
@@ -111,15 +112,15 @@ public sealed class PinpointerSystem : SharedPinpointerSystem
// sort all entities in distance increasing order // sort all entities in distance increasing order
var mapId = transform.MapID; var mapId = transform.MapID;
var l = new SortedList<float, EntityUid>(); var l = new SortedList<float, EntityUid>();
var worldPos = _transform.GetWorldPosition(transform, xformQuery); var worldPos = _transform.GetWorldPosition(transform);
foreach (var comp in EntityManager.GetAllComponents(whitelist)) foreach (var (otherUid, _) in EntityManager.GetAllComponents(whitelist))
{ {
if (!xformQuery.TryGetComponent(comp.Owner, out var compXform) || compXform.MapID != mapId) if (!_xformQuery.TryGetComponent(otherUid, out var compXform) || compXform.MapID != mapId)
continue; continue;
var dist = (_transform.GetWorldPosition(compXform, xformQuery) - worldPos).LengthSquared(); var dist = (_transform.GetWorldPosition(compXform) - worldPos).LengthSquared();
l.TryAdd(dist, comp.Owner); l.TryAdd(dist, otherUid);
} }
// return uid with a smallest distance // return uid with a smallest distance

View File

@@ -138,7 +138,7 @@ public abstract class StationEventSystem<T> : GameRuleSystem<T> where T : Compon
filter ??= _ => true; filter ??= _ => true;
// augh. sorry sloth there's no better API and my goal today isn't adding 50 entitymanager methods :waa: // augh. sorry sloth there's no better API and my goal today isn't adding 50 entitymanager methods :waa:
var stations = EntityManager.GetAllComponents(typeof(StationEventEligibleComponent)).Select(x => x.Owner).Where(filter).ToArray(); var stations = EntityManager.GetAllComponents(typeof(StationEventEligibleComponent)).Select(x => x.Uid).Where(filter).ToArray();
if (stations.Length == 0) if (stations.Length == 0)
{ {