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);
}