using Content.Shared.EntityConditions; namespace Content.Shared.Objectives.Systems; /// /// This is an abstract system which is intended to query all entities and return a hashset of valid entities, /// based on a list of expected components and optional filters. /// public abstract partial class EntityTargetSystem : GenericTargetSystem { public HashSet GetEntities(EntityUid? exclude = null, params EntityCondition[] conditions) { var entities = new HashSet(); AddEntities(entities, exclude); return entities; } public abstract void AddEntities(HashSet entities, EntityUid? exclude = null, params EntityCondition[] conditions); } /// public abstract partial class EntityTargetSystem : EntityTargetSystem where T : IComponent { public override void AddEntities(HashSet entities, EntityUid? exclude = null, params EntityCondition[] conditions) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp)) { if (!ValidEntity(uid, exclude, conditions) || !ValidateEntity((uid, comp))) continue; entities.Add(uid); } } protected abstract bool ValidateEntity(Entity entity); } /// public abstract partial class EntityTargetSystem : EntityTargetSystem where T1 : IComponent where T2 : IComponent { public override void AddEntities(HashSet entities, EntityUid? exclude = null, params EntityCondition[] conditions) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp1, out var comp2)) { if (!ValidEntity(uid, exclude, conditions) || !ValidateEntity((uid, comp1, comp2))) continue; entities.Add(uid); } } protected abstract bool ValidateEntity(Entity entity); } /// public abstract partial class EntityTargetSystem : EntityTargetSystem where T1 : IComponent where T2 : IComponent where T3 : IComponent { public override void AddEntities(HashSet entities, EntityUid? exclude = null, params EntityCondition[] conditions) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp1, out var comp2, out var comp3)) { if (!ValidEntity(uid, exclude, conditions)|| !ValidateEntity((uid, comp1, comp2, comp3))) continue; entities.Add(uid); } } protected abstract bool ValidateEntity(Entity entity); } /// public abstract partial class EntityTargetSystem : EntityTargetSystem where T1 : IComponent where T2 : IComponent where T3 : IComponent where T4 : IComponent { public override void AddEntities(HashSet entities, EntityUid? exclude = null, params EntityCondition[] conditions) { var query = EntityQueryEnumerator(); while (query.MoveNext(out var uid, out var comp1, out var comp2, out var comp3, out var comp4)) { if (!ValidEntity(uid, exclude, conditions) || !ValidateEntity((uid, comp1, comp2, comp3, comp4))) continue; entities.Add(uid); } } protected abstract bool ValidateEntity(Entity entity); }