priority of base subject constraints

This commit is contained in:
Mikhail 2023-06-05 22:59:34 +08:00
parent 11acff9bac
commit 17680cc295

View File

@ -113,22 +113,35 @@ namespace DCFApixels.DragonECS
private void End(out EcsMask mask) private void End(out EcsMask mask)
{ {
if(_subjects.Count > 0) HashSet<int> maskInc;
HashSet<int> maskExc;
if (_subjects.Count > 0)
{ {
maskInc = new HashSet<int>();
maskExc = new HashSet<int>();
_subjects.Sort((a, b) => a.order - b.order); _subjects.Sort((a, b) => a.order - b.order);
foreach (var item in _subjects) foreach (var item in _subjects)
{ {
EcsMask submask = item.subject.mask; EcsMask submask = item.subject.mask;
_inc.ExceptWith(submask._exc);//удаляю конфликтующие ограничения maskInc.ExceptWith(submask._exc);//удаляю конфликтующие ограничения
_exc.ExceptWith(submask._inc);//удаляю конфликтующие ограничения maskExc.ExceptWith(submask._inc);//удаляю конфликтующие ограничения
_inc.UnionWith(submask._inc); maskInc.UnionWith(submask._inc);
_exc.UnionWith(submask._exc); maskExc.UnionWith(submask._exc);
} }
maskInc.ExceptWith(_exc);//удаляю конфликтующие ограничения
maskExc.ExceptWith(_inc);//удаляю конфликтующие ограничения
maskInc.UnionWith(_inc);
maskExc.UnionWith(_exc);
}
else
{
maskInc = _inc;
maskExc = _exc;
} }
var inc = _inc.ToArray(); var inc = maskInc.ToArray();
Array.Sort(inc); Array.Sort(inc);
var exc = _exc.ToArray(); var exc = maskExc.ToArray();
Array.Sort(exc); Array.Sort(exc);
mask = new EcsMask(_world.Archetype, inc, exc); mask = new EcsMask(_world.Archetype, inc, exc);