/// <summary> /// Updates all filters for changed component mask. /// </summary> /// <param name="entity">Entity.</param> /// <param name="component">Component.</param> /// <param name="oldMask">Old component state.</param> /// <param name="newMask">New component state.</param> void UpdateFilters(int entity, int component, EcsComponentMask oldMask, EcsComponentMask newMask) { for (var i = _filters.Count - 1; i >= 0; i--) { var filter = _filters[i]; var isNewMaskCompatible = newMask.IsCompatible(filter.IncludeMask, filter.ExcludeMask); if (oldMask.IsCompatible(filter.IncludeMask, filter.ExcludeMask)) { if (!isNewMaskCompatible) { #if DEBUG && !ECS_PERF_TEST if (filter.Entities.IndexOf(entity) == -1) { throw new Exception( string.Format("Something wrong - entity {0} should be in filter {1}, but not exits.", entity, filter)); } #endif filter.Entities.Remove(entity); filter.RaiseOnEntityRemoved(entity, component); } } else { if (isNewMaskCompatible) { filter.Entities.Add(entity); filter.RaiseOnEntityAdded(entity, component); } } } }
/// <summary> /// Updates all filters for changed component mask. /// </summary> /// <param name="entity">Entity.</param> /// <param name="oldMask">Old component state.</param> /// <param name="newMask">New component state.</param> void UpdateFilters(int entity, EcsComponentMask oldMask, EcsComponentMask newMask) { for (var i = _filters.Count - 1; i >= 0; i--) { var isNewMaskCompatible = newMask.IsCompatible(_filters[i].Mask); if (oldMask.IsCompatible(_filters[i].Mask)) { if (!isNewMaskCompatible) { _filters[i].Entities.Remove(entity); } } else { if (isNewMaskCompatible) { _filters[i].Entities.Add(entity); } } } }
void UpdateFilters(int entity, object component, EcsComponentMask oldMask, EcsComponentMask newMask) { for (var i = _filtersCount - 1; i >= 0; i--) { var filter = _filters[i]; var isNewMaskCompatible = newMask.IsCompatible(filter); if (oldMask.IsCompatible(filter)) { if (!isNewMaskCompatible) { #if DEBUG var ii = filter.EntitiesCount - 1; for (; ii >= 0; ii--) { if (filter.Entities[ii] == entity) { break; } } if (ii == -1) { throw new Exception( string.Format("Something wrong - entity {0} should be in filter {1}, but not exits.", entity, filter)); } #endif filter.RaiseOnRemoveEvent(entity, component); } } else { if (isNewMaskCompatible) { filter.RaiseOnAddEvent(entity, component); } } } }