2 using System.Collections.Generic;
13 protected readonly
Group _group;
14 protected readonly Func<Entity, IComponent, T> _getKey;
24 public virtual void Activate() {
26 _group.OnEntityRemoved += onEntityRemoved;
29 public virtual void Deactivate() {
30 _group.OnEntityAdded -= onEntityAdded;
31 _group.OnEntityRemoved -= onEntityRemoved;
35 protected void indexEntities(
Group group) {
37 for (
int i = 0; i < entities.Length; i++) {
38 addEntity(entities[i], null);
42 protected void onEntityAdded(
44 addEntity(entity, component);
47 protected void onEntityRemoved(
49 removeEntity(entity, component);
54 protected abstract void removeEntity(
58 protected abstract void clear();
67 readonly Dictionary<T, Entity> _index;
71 Func<Entity, IComponent, T> getKey
72 ) : base(group, getKey) {
73 _index =
new Dictionary<T, Entity>();
80 IEqualityComparer<T> comparer) : base(group, getKey) {
81 _index =
new Dictionary<T, Entity>(comparer);
85 public override void Activate() {
87 indexEntities(_group);
90 public bool HasEntity(T key) {
91 return _index.ContainsKey(key);
94 public Entity GetEntity(T key) {
95 var entity = TryGetEntity(key);
98 "Entity for key '" + key +
"' doesn't exist!",
99 "You should check if an entity with that key exists " +
107 public Entity TryGetEntity(T key) {
109 _index.TryGetValue(key, out entity);
113 protected override void clear() {
114 foreach(var entity
in _index.Values) {
121 protected override void addEntity(
123 var key = _getKey(entity, component);
124 if(_index.ContainsKey(key)) {
126 "Entity for key '" + key +
"' already exists!",
127 "Only one entity for a primary key is allowed.");
130 _index.Add(key, entity);
134 protected override void removeEntity(
136 _index.Remove(_getKey(entity, component));
143 readonly Dictionary<T, HashSet<Entity>> _index;
146 base(group, getKey) {
147 _index =
new Dictionary<T, HashSet<Entity>>();
153 Func<Entity, IComponent, T> getKey,
154 IEqualityComparer<T> comparer) : base(group, getKey) {
155 _index =
new Dictionary<T, HashSet<Entity>>(comparer);
159 public override void Activate() {
161 indexEntities(_group);
164 public HashSet<Entity> GetEntities(T key) {
165 HashSet<Entity> entities;
166 if(!_index.TryGetValue(key, out entities)) {
168 _index.Add(key, entities);
174 protected override void clear() {
175 foreach(var entities
in _index.Values) {
176 foreach(var entity
in entities) {
177 entity.Release(
this);
185 GetEntities(_getKey(entity, component)).Add(entity);
189 protected override void removeEntity(
191 GetEntities(_getKey(entity, component)).Remove(entity);
198 base(message, hint) {
void Release(object owner)
Entity [] GetEntities()
Returns all entities which are currently in this group.
GroupChanged OnEntityAdded
Occurs when an entity gets added.
Base exception used by Entitas.
Entity Retain(object owner)