public void Setup() { entities = new Entity[30]; var entityTypeChunk = new EntityTypeChunk(null, EntityTypes.Type1); chunks.Add(entityTypeChunk); for (int i = 0; i < 10; i++) { entities[i] = chunks[0].AddEntity(new Entity(), null); entities[i].GetComponent <Component2>().Value = i; } entityTypeChunk = new EntityTypeChunk(null, EntityTypes.Type2); chunks.Add(entityTypeChunk); for (int i = 0; i < 10; i++) { entities[i + 10] = chunks[1].AddEntity(new Entity(), null); entities[i + 10].GetComponent <Component2>().Value = i + 10; } entityTypeChunk = new EntityTypeChunk(null, EntityTypes.Type3); chunks.Add(entityTypeChunk); for (int i = 0; i < 10; i++) { entities[i + 20] = chunks[2].AddEntity(new Entity(), null); entities[i + 20].GetComponent <Component2>().Value = i + 20; } }
public void RemoveEntity() { var component1Type = ComponentType.Create <Component1>(); var component2Type = ComponentType.Create <Component2>(); EntityTypeChunk chunk = new EntityTypeChunk(null, EntityTypes.Type1); ArrayList <Entity> entities = new ArrayList <Entity>(5); ArrayList <int> values = new ArrayList <int>(5); for (int k = 0; k < 5; k++) { entities.Add(chunk.AddEntity(new Entity(), null)); var component1Data = Data <Component1>(chunk.ComponentDatas[component1Type.TypeIndex]); var component2Data = Data <Component2>(chunk.ComponentDatas[component2Type.TypeIndex]); component1Data[k] = new Component1(); component1Data[k].Value = k; component2Data[k].Value = k; values.Add(k); } chunk.RemoveEntity(entities[0], null); entities.UnorderedRemoveAt(0); values.UnorderedRemoveAt(0); Assert.AreEqual(4, chunk.EntityCount); for (int k = 0; k < chunk.EntityCount; k++) { Assert.AreEqual(entities[k], chunk.EntityData[k]); Assert.AreEqual(k, entities[k].IndexInChunk); ref var component1 = ref Data <Component1>(chunk.ComponentDatas[component1Type.TypeIndex])[k]; Assert.AreEqual(values[k], component1.Value); ref var component2 = ref Data <Component2>(chunk.ComponentDatas[component2Type.TypeIndex])[k];
private bool IsSuitable(EntityTypeChunk chunk) { for (var i = 0; i < IncludeTypes.Length; i++) { var t = IncludeTypes[i].TypeId; if (t == 0) { continue; } if (chunk.EntityType.ComponentTypes.All(type => type.TypeId != t)) { return(false); } } for (var i = 0; i < ExcludeTypes.Length; i++) { var t = ExcludeTypes[i].TypeId; if (t == 0) { continue; } if (chunk.EntityType.ComponentTypes.Any(type => type.TypeId == t)) { return(false); } } return(true); }
public void Construct() { var component1Type = ComponentType.Create <Component1>(); var component2Type = ComponentType.Create <Component2>(); EntityTypeChunk chunk = new EntityTypeChunk(null, EntityTypes.Type1); Assert.AreEqual(EntityTypes.Type1, chunk.EntityType); Assert.AreEqual(0, chunk.EntityCount); Assert.NotNull(chunk.ComponentDatas); Assert.AreEqual(ComponentTypeManager.TypeCount, chunk.ComponentDatas.Length); Assert.NotNull(chunk.ComponentDatas[0]); Assert.IsInstanceOf(typeof(ComponentData <Component1>), chunk.ComponentDatas[component1Type.TypeIndex]); Assert.IsInstanceOf(typeof(ComponentData <Component2>), chunk.ComponentDatas[component2Type.TypeIndex]); Assert.AreEqual(chunk.ComponentDatas[0], chunk.EntityData); }
public void CreateEntity() { EntityTypeChunk chunk = new EntityTypeChunk(null, EntityTypes.Type1); for (int k = 0; k < 10; k++) { var entity = chunk.AddEntity(new Entity(), null); Assert.AreEqual(k, entity.IndexInChunk); Assert.AreEqual(entity, chunk.EntityData[k]); Assert.AreEqual(k + 1, chunk.EntityCount); Assert.AreEqual(chunk.EntityCount, chunk.EntityData.Count); for (int i = 0; i < EntityTypes.Type1.ComponentTypes.Length; i++) { Assert.AreEqual(chunk.EntityCount, chunk.ComponentDatas[EntityTypes.Type1.ComponentTypes[i].TypeIndex].Count); } } }
private void OnEntityRemoving(EntityTypeChunk movingTo, Entity entity) { if (movingTo != null) { for (int i = 0; i < Chunks.Count; i++) { if (ReferenceEquals(Chunks.Buffer[i], movingTo)) { return; } } } for (int i = 0; i < addedListeners.Count; i++) { removingListeners[i].EntityRemoving(entity); } }
private void OnEntityAdded(EntityTypeChunk movedFrom, Entity entity) { if (movedFrom != null) { for (int i = 0; i < Chunks.Count; i++) { if (ReferenceEquals(Chunks.Buffer[i], movedFrom)) { return; } } } for (int i = 0; i < addedListeners.Count; i++) { addedListeners[i].EntityAdded(entity); } }