diff --git a/src/EcsAspect.cs b/src/EcsAspect.cs index dc11329..5d5aa29 100644 --- a/src/EcsAspect.cs +++ b/src/EcsAspect.cs @@ -5,7 +5,7 @@ using System.Collections.Generic; namespace DCFApixels.DragonECS { - public abstract class EcsAspect : ITemplateNode + public abstract class EcsAspect : ITemplateNode, IEcsComponentMask { #region Initialization Halpers [ThreadStatic] @@ -302,6 +302,10 @@ namespace DCFApixels.DragonECS } } #endregion + + #region Other + EcsMask IEcsComponentMask.ToMask(EcsWorld world) { return _mask; } + #endregion } #region EcsAspectExtensions diff --git a/src/EcsMask.cs b/src/EcsMask.cs index 4863815..8d135dc 100644 --- a/src/EcsMask.cs +++ b/src/EcsMask.cs @@ -495,10 +495,26 @@ namespace DCFApixels.DragonECS { return a.World.Get().ExceptMask(a, b); } + public static EcsMask operator -(EcsMask a, IEcsComponentMask b) + { + return a.World.Get().ExceptMask(a, b.ToMask(a.World)); + } + public static EcsMask operator -(IEcsComponentMask b, EcsMask a) + { + return a.World.Get().ExceptMask(b.ToMask(a.World), a); + } public static EcsMask operator +(EcsMask a, EcsMask b) { return a.World.Get().CombineMask(a, b); } + public static EcsMask operator +(EcsMask a, IEcsComponentMask b) + { + return a.World.Get().CombineMask(a, b.ToMask(a.World)); + } + public static EcsMask operator +(IEcsComponentMask b, EcsMask a) + { + return a.World.Get().CombineMask(b.ToMask(a.World), a); + } public static implicit operator EcsMask((IEcsComponentMask mask, EcsWorld world) a) { return a.mask.ToMask(a.world); diff --git a/src/Executors/Queries.cs b/src/Executors/Queries.cs index bce01fb..3e028c2 100644 --- a/src/Executors/Queries.cs +++ b/src/Executors/Queries.cs @@ -15,7 +15,7 @@ namespace DCFApixels.DragonECS where TAspect : EcsAspect, new() where TCollection : IEntityStorage { - if(ReferenceEquals(entities, entities.World)) + if (ReferenceEquals(entities, entities.World)) { entities.World.GetQueryCache(out EcsWhereExecutor executor, out aspect); return executor.Execute();