Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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];
Ejemplo n.º 3
0
 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);
 }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
                }
            }
        }
Ejemplo n.º 6
0
 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);
     }
 }
Ejemplo n.º 7
0
 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);
     }
 }