Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.72 KB | None | 0 0
  1. public class ComponentCollection
  2. {
  3.     private Dictionary<Type, IList> _components = new Dictionary<Type, IList>();
  4.  
  5.     public void Add<T>(T component) where T : Component
  6.     {
  7.         component.Entity.Components.Add(component);
  8.         GetOrCreateComponentList<T>().Add(component);
  9.     }
  10.    
  11.     public void Remove<T>(T component) where T : Component
  12.     {
  13.         component.Release();
  14.         GetOrCreateComponentList<T>().Remove(component);
  15.     }
  16.  
  17.     public void RemoveAll<T>() where T : Component
  18.     {
  19.         var list = GetOrCreateComponentList<T>();
  20.         foreach (var component in list)
  21.         {
  22.             component.Release();
  23.         }
  24.         list.Clear();
  25.     }
  26.  
  27.     public void RemoveAll(Predicate<Component> Match) {
  28.         foreach (var componentList in _components.Values)
  29.         {
  30.             for (int i = 0; i < componentList.Count; i++)
  31.             {
  32.                 var item = componentList[i];
  33.                 if (Match.Invoke((Component)item))
  34.                 {
  35.                     (item as Component).Release();
  36.                     componentList.Remove(item);
  37.                     i++;
  38.                 }
  39.  
  40.             }
  41.         }
  42.     }
  43.  
  44.     public List<T> Where<T>(Predicate<T> Match) where T : Component
  45.     {
  46.         List<T> result = new List<T>();
  47.  
  48.         foreach (var componentList in _components.Values)
  49.         {
  50.             for (int i = 0; i < componentList.Count; i++)
  51.             {
  52.                 var item = componentList[i] as T;
  53.                 if (Match.Invoke(item))
  54.                 {
  55.                     result.Add(item);
  56.                     i++;
  57.                 }
  58.             }
  59.         }
  60.  
  61.         return result;
  62.     }
  63.  
  64.     public ComponentList<T> FilterBy<T>() where T : Component
  65.     {
  66.         return new ComponentList<T>(GetOrCreateComponentList<T>());
  67.     }
  68.  
  69.     private List<T> GetOrCreateComponentList<T>()
  70.     {
  71.         var type = typeof(T);
  72.         List<T> list;
  73.         if (!_components.ContainsKey(type))
  74.         {
  75.             list = new List<T>();
  76.             _components.Add(type, list);
  77.         }
  78.         else
  79.         {
  80.             list = _components[type] as List<T>;
  81.         }
  82.  
  83.         return list;
  84.     }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement