From 131a3008fdb26f9e59246b61e61ac25c532a27a4 Mon Sep 17 00:00:00 2001 From: Mikhail <99481254+DCFApixels@users.noreply.github.com> Date: Sat, 5 Oct 2024 19:10:27 +0800 Subject: [PATCH] Update EcsMask.cs --- src/EcsMask.cs | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/src/EcsMask.cs b/src/EcsMask.cs index 94b2c8d..5e7e072 100644 --- a/src/EcsMask.cs +++ b/src/EcsMask.cs @@ -495,6 +495,14 @@ namespace DCFApixels.DragonECS { return a.World.Get().ExceptMask(a, b); } + public static EcsMask operator +(EcsMask a, EcsMask b) + { + return a.World.Get().CombineMask(a, b); + } + public static implicit operator EcsMask((IEcsComponentMask mask, EcsWorld world) a) + { + return a.mask.ToMask(a.world); + } #endregion #region OpMaskKey @@ -504,7 +512,7 @@ namespace DCFApixels.DragonECS public readonly int rightMaskID; public readonly int operation; - public const int UNION_OP = 7; + public const int COMBINE_OP = 7; public const int EXCEPT_OP = 32; public OpMaskKey(int leftMaskID, int rightMaskID, int operation) { @@ -573,6 +581,20 @@ namespace DCFApixels.DragonECS #endregion #region GetMask + internal EcsMask CombineMask(EcsMask a, EcsMask b) + { + int operation = OpMaskKey.COMBINE_OP; + if (_opMasks.TryGetValue(new OpMaskKey(a._id, b._id, operation), out EcsMask result) == false) + { + if (a.IsConflictWith(b)) + { + return a.World.Get().BrokenMask; + } + result = New(a.World).Combine(a).Combine(b).Build(); + _opMasks.Add(new OpMaskKey(a._id, b._id, operation), result); + } + return result; + } internal EcsMask ExceptMask(EcsMask a, EcsMask b) { int operation = OpMaskKey.EXCEPT_OP;