55 lines
2.0 KiB
C#
55 lines
2.0 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using Leopotam.Ecs;
|
|
|
|
namespace Asset_Cleaner {
|
|
static class EcsUtils {
|
|
public static IEnumerable<(T Group, IEnumerable<int> Indices)> GroupBy1<T, T1, T2>(this EcsFilter<T, T1, T2> f, IEqualityComparer<T> comp)
|
|
where T : class
|
|
where T1 : class
|
|
where T2 : class {
|
|
foreach (var group in Inner().GroupBy(tuple => tuple.Group, comp))
|
|
yield return (group.Key, group.Select(g => g.EcsIndex));
|
|
|
|
IEnumerable<(T Group, int EcsIndex)> Inner() {
|
|
var get1 = f.Get1;
|
|
foreach (var i in f) yield return (get1[i], i);
|
|
}
|
|
}
|
|
|
|
public static EcsFilter<T> Out<T>(this EcsFilter<T> filter, out T[] get1, out EcsEntity[] entities) where T : class {
|
|
get1 = filter.Get1;
|
|
entities = filter.Entities;
|
|
return filter;
|
|
}
|
|
|
|
public static EcsFilter<T1, T2> Out<T1, T2>(this EcsFilter<T1, T2> filter, out T1[] get1, out T2[] get2, out EcsEntity[] entities)
|
|
where T1 : class where T2 : class {
|
|
get1 = filter.Get1;
|
|
get2 = filter.Get2;
|
|
entities = filter.Entities;
|
|
return filter;
|
|
}
|
|
|
|
public static EcsFilter<T1, T2, T3> Out<T1, T2, T3>(this EcsFilter<T1, T2, T3> filter, out T1[] get1, out T2[] get2, out T3[] get3, out EcsEntity[] entities)
|
|
where T1 : class where T2 : class where T3 : class {
|
|
get1 = filter.Get1;
|
|
get2 = filter.Get2;
|
|
get3 = filter.Get3;
|
|
entities = filter.Entities;
|
|
return filter;
|
|
}
|
|
|
|
public static void AllDestroy(this EcsFilter f) {
|
|
var ecsEntities = f.Entities;
|
|
foreach (var i in f)
|
|
ecsEntities[i].Destroy();
|
|
}
|
|
|
|
public static void AllUnset<T>(this EcsFilter f) where T : class {
|
|
var e = f.Entities;
|
|
foreach (var i in f)
|
|
e[i].Unset<T>();
|
|
}
|
|
}
|
|
} |