69 lines
2.1 KiB
C#
69 lines
2.1 KiB
C#
|
using System;
|
||
|
using System.Collections.Generic;
|
||
|
using System.Linq;
|
||
|
using EE = System.Collections.Generic.IEnumerable<Gallium.Entity>;
|
||
|
|
||
|
namespace Gallium
|
||
|
{
|
||
|
public static class EnumerableEntityExtensions1
|
||
|
{
|
||
|
public static EE ForEachEntity<T1>(
|
||
|
this EE entities,
|
||
|
Func<Entity, T1, Entity> lambda)
|
||
|
{
|
||
|
return entities
|
||
|
.Select(x => x.Has<T1>() ? lambda(x, x.Get<T1>()) : x);
|
||
|
}
|
||
|
|
||
|
/// <summary>
|
||
|
/// Runs an inner set of operation for entities that have a specific
|
||
|
/// component.
|
||
|
/// </summary>
|
||
|
/// <param name="entities">The input to scan.</param>
|
||
|
/// <param name="lambda">
|
||
|
/// The list operation for the ones that have those
|
||
|
/// components.
|
||
|
/// </param>
|
||
|
/// <typeparam name="T1">The type of the first component.</typeparam>
|
||
|
/// <returns>
|
||
|
/// A combined list of components, with entities without the component
|
||
|
/// coming first and the ones with the component coming last after being
|
||
|
/// processed by the lambda.
|
||
|
/// </returns>
|
||
|
public static EE ForEntities<T1>(
|
||
|
this EE entities,
|
||
|
Func<EE, EE> lambda)
|
||
|
{
|
||
|
List<Entity> list = entities.ToList();
|
||
|
EE has = lambda(list.HasComponents<T1>());
|
||
|
EE hasNot = list.NotComponents<T1>();
|
||
|
|
||
|
return hasNot.Union(has);
|
||
|
}
|
||
|
|
||
|
public static EE HasComponents<T1>(this EE entities)
|
||
|
{
|
||
|
return entities
|
||
|
.Where(x => x.Has<T1>());
|
||
|
}
|
||
|
|
||
|
public static EE NotComponents<T1>(this EE entities)
|
||
|
{
|
||
|
return entities
|
||
|
.Where(x => !x.Has<T1>());
|
||
|
}
|
||
|
|
||
|
public static EE WhereEntities<T1>(
|
||
|
this EE entities,
|
||
|
Func<Entity, T1, bool> lambda,
|
||
|
bool includeWithoutComponent = true)
|
||
|
{
|
||
|
return entities
|
||
|
.Where(
|
||
|
x => x.Has<T1>()
|
||
|
? lambda(x, x.Get<T1>())
|
||
|
: includeWithoutComponent);
|
||
|
}
|
||
|
}
|
||
|
}
|