public void DestroyEntity(ECSEntity entity) { ECSEntityData data = this.entities.GetEntityData(entity); var keys = data.Keys; Type[] types = new Type[keys.Count]; int count = 0; //TODO: improve with Type[] buffer in ECSEntityData foreach (Type type in keys) { types[count++] = type; } for (int i = 0; i < types.Length; i++) { Type type = types[i]; ECSEntityIndex index = data[type]; data.Remove(type); this.components.RemoveComponent(type, index); this.UpdateAllEntitiesWithComponent(index, type); } this.entities.DestroyEntity(entity); }
private ECSEntityIndex GetIndexByEntity <T>(int entity) where T : struct, IECSComponent { ECSEntityData data = this.entities[entity]; Type type = typeof(T); ECSEntityIndex index = data[type]; return(index); }
private void UpdateAllEntitiesWithComponent(ECSEntityIndex indexRemoved, Type type) { for (int i = 0; i < this.entities.Count; i++) { if (this.entities.HasComponent(i, type)) { ECSEntityData data = this.entities[i]; ECSEntityIndex index = data[type]; if (index > indexRemoved) { index--; data[type] = index; } } } }