/// <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);
                    }
                }
            }
        }
示例#2
0
 /// <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);
             }
         }
     }
 }
示例#3
0
文件: EcsWorld.cs 项目: midgithub/ecs
        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);
                    }
                }
            }
        }