110 lines
3.2 KiB
C#
110 lines
3.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using EE = System.Collections.Generic.IEnumerable<Gallium.Entity>;
|
|
|
|
namespace Gallium
|
|
{
|
|
public static class EnumerableEntityExtensions
|
|
{
|
|
public static EE ForEachEntity<T1, T2>(
|
|
this EE entities,
|
|
Func<Entity, T1, T2, Entity> lambda)
|
|
{
|
|
return entities
|
|
.Select(
|
|
x => !x.Has<T1>() || !x.Has<T2>()
|
|
? x
|
|
: lambda(x, x.Get<T1>(), x.Get<T2>()));
|
|
}
|
|
|
|
public static EE ForEachEntity<T1, T2, T3>(
|
|
this EE entities,
|
|
Func<Entity, T1, T2, T3, Entity> lambda)
|
|
{
|
|
return entities
|
|
.Select(
|
|
x => !x.Has<T1>() || !x.Has<T2>() || !x.Has<T3>()
|
|
? x
|
|
: lambda(x, x.Get<T1>(), x.Get<T2>(), x.Get<T3>()));
|
|
}
|
|
|
|
public static EE ForEntities<T1, T2>(
|
|
this EE entities,
|
|
Func<EE, EE> lambda)
|
|
{
|
|
List<Entity> list = entities.ToList();
|
|
EE has = lambda(list.HasComponents<T1, T2>());
|
|
EE hasNot = list.NotComponents<T1, T2>();
|
|
|
|
return hasNot.Union(has);
|
|
}
|
|
|
|
public static EE ForEntities<T1, T2, T3>(
|
|
this EE entities,
|
|
Func<EE, EE> lambda)
|
|
{
|
|
List<Entity> list = entities.ToList();
|
|
EE has = lambda(list.HasComponents<T1, T2, T3>());
|
|
EE hasNot = list.NotComponents<T1, T2, T3>();
|
|
|
|
return hasNot.Union(has);
|
|
}
|
|
|
|
public static EE ForEntities<T1, T2, T3, T4>(
|
|
this EE entities,
|
|
Func<EE, EE> lambda)
|
|
{
|
|
List<Entity> list = entities.ToList();
|
|
EE has = lambda(list.HasComponents<T1, T2, T3, T4>());
|
|
EE hasNot = list.NotComponents<T1, T2, T3, T4>();
|
|
|
|
return hasNot.Union(has);
|
|
}
|
|
|
|
public static EE HasComponents<T1, T2>(this EE entities)
|
|
{
|
|
return entities
|
|
.Where(x => x.Has<T1>() && x.Has<T2>());
|
|
}
|
|
|
|
public static EE HasComponents<T1, T2, T3>(this EE entities)
|
|
{
|
|
return entities
|
|
.Where(x => x.Has<T1>() && x.Has<T2>() && x.Has<T3>());
|
|
}
|
|
|
|
public static EE HasComponents<T1, T2, T3, T4>(this EE entities)
|
|
{
|
|
return entities
|
|
.Where(
|
|
x => x.Has<T1>()
|
|
&& x.Has<T2>()
|
|
&& x.Has<T3>()
|
|
&& x.Has<T4>());
|
|
}
|
|
|
|
public static EE NotComponents<T1, T2>(this EE entities)
|
|
{
|
|
return entities
|
|
.Where(x => !x.Has<T1>() || !x.Has<T2>());
|
|
}
|
|
|
|
public static EE NotComponents<T1, T2, T3>(this EE entities)
|
|
{
|
|
return entities
|
|
.Where(x => !x.Has<T1>() || !x.Has<T2>() || !x.Has<T3>());
|
|
}
|
|
|
|
public static EE NotComponents<T1, T2, T3, T4>(this EE entities)
|
|
{
|
|
return entities
|
|
.Where(
|
|
x => !x.Has<T1>()
|
|
|| !x.Has<T2>()
|
|
|| !x.Has<T3>()
|
|
|| !x.Has<T4>());
|
|
}
|
|
}
|
|
}
|