Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class ComponentCollection
- {
- private Dictionary<Type, IList> _components = new Dictionary<Type, IList>();
- public void Add<T>(T component) where T : Component
- {
- component.Entity.Components.Add(component);
- GetOrCreateComponentList<T>().Add(component);
- }
- public void Remove<T>(T component) where T : Component
- {
- component.Release();
- GetOrCreateComponentList<T>().Remove(component);
- }
- public void RemoveAll<T>() where T : Component
- {
- var list = GetOrCreateComponentList<T>();
- foreach (var component in list)
- {
- component.Release();
- }
- list.Clear();
- }
- public void RemoveAll(Predicate<Component> Match) {
- foreach (var componentList in _components.Values)
- {
- for (int i = 0; i < componentList.Count; i++)
- {
- var item = componentList[i];
- if (Match.Invoke((Component)item))
- {
- (item as Component).Release();
- componentList.Remove(item);
- i++;
- }
- }
- }
- }
- public List<T> Where<T>(Predicate<T> Match) where T : Component
- {
- List<T> result = new List<T>();
- foreach (var componentList in _components.Values)
- {
- for (int i = 0; i < componentList.Count; i++)
- {
- var item = componentList[i] as T;
- if (Match.Invoke(item))
- {
- result.Add(item);
- i++;
- }
- }
- }
- return result;
- }
- public ComponentList<T> FilterBy<T>() where T : Component
- {
- return new ComponentList<T>(GetOrCreateComponentList<T>());
- }
- private List<T> GetOrCreateComponentList<T>()
- {
- var type = typeof(T);
- List<T> list;
- if (!_components.ContainsKey(type))
- {
- list = new List<T>();
- _components.Add(type, list);
- }
- else
- {
- list = _components[type] as List<T>;
- }
- return list;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement