using System;
using System.Collections.Generic;
namespace MfGames.Gallium
{
public static class SelectEntityExtensions
{
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// If true, then entities without all the components are included. Otherwise, they
/// are excluded.
///
/// The type of the first component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
bool includeEntitiesWithoutComponents = true)
{
return entities.SelectEntity(selectWithComponents, includeEntitiesWithoutComponents ? a => a : a => null);
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// If true, then entities without all the components are included. Otherwise, they
/// are excluded.
///
/// The type of the first component.
/// The type of the second component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
bool includeEntitiesWithoutComponents = true)
{
return entities.SelectEntity(selectWithComponents, includeEntitiesWithoutComponents ? a => a : a => null);
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// If true, then entities without all the components are included. Otherwise, they
/// are excluded.
///
/// The type of the first component.
/// The type of the second component.
/// The type of the third component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
bool includeEntitiesWithoutComponents = true)
{
return entities.SelectEntity(selectWithComponents, includeEntitiesWithoutComponents ? a => a : a => null);
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// If true, then entities without all the components are included. Otherwise, they
/// are excluded.
///
/// The type of the first component.
/// The type of the second component.
/// The type of the third component.
/// The type of the fourth component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
bool includeEntitiesWithoutComponents = true)
{
return entities.SelectEntity(selectWithComponents, includeEntitiesWithoutComponents ? a => a : a => null);
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// The optional transformation function for entities that do not have all the
/// components. If returns null,
/// then the entity will not be included.
///
/// The type of the first component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
Func selectWithoutComponents)
{
foreach (Entity entity in entities)
{
Entity? result = entity.TryGet(out T1 value1)
? selectWithComponents?.Invoke(entity, value1)
: selectWithoutComponents?.Invoke(entity);
if (result != null)
{
yield return result;
}
}
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// The optional transformation function for entities that do not have all the
/// components. If returns null,
/// then the entity will not be included.
///
/// The type of the first component.
/// The type of the second component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
Func selectWithoutComponents)
{
foreach (Entity entity in entities)
{
Entity? result = entity.TryGet(out T1 value1) && entity.TryGet(out T2 value2)
? selectWithComponents?.Invoke(entity, value1, value2)
: selectWithoutComponents?.Invoke(entity);
if (result != null)
{
yield return result;
}
}
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// The optional transformation function for entities that do not have all the
/// components. If returns null,
/// then the entity will not be included.
///
/// The type of the first component.
/// The type of the second component.
/// The type of the third component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
Func selectWithoutComponents)
{
foreach (Entity entity in entities)
{
Entity? result =
entity.TryGet(out T1 value1) && entity.TryGet(out T2 value2) && entity.TryGet(out T3 value3)
? selectWithComponents?.Invoke(entity, value1, value2, value3)
: selectWithoutComponents?.Invoke(entity);
if (result != null)
{
yield return result;
}
}
}
///
/// Selects an entity from the given list, filtering on entities with
/// the given components.
///
/// The entities to parse.
///
/// The transformation function for the entity and selected components. If this
/// returns null, then the entity
/// will be filtered out.
///
///
/// The optional transformation function for entities that do not have all the
/// components. If returns null,
/// then the entity will not be included.
///
/// The type of the first component.
/// The type of the second component.
/// The type of the third component.
/// The type of the third component.
/// An enumeration of transformed entities.
public static IEnumerable SelectEntity(
this IEnumerable entities,
Func selectWithComponents,
Func selectWithoutComponents)
{
foreach (Entity entity in entities)
{
Entity? result =
entity.TryGet(out T1 value1)
&& entity.TryGet(out T2 value2)
&& entity.TryGet(out T3 value3)
&& entity.TryGet(out T4 value4)
? selectWithComponents?.Invoke(entity, value1, value2, value3, value4)
: selectWithoutComponents?.Invoke(entity);
if (result != null)
{
yield return result;
}
}
}
}
}