예제 #1
0
 public void SetComponent <T0>(Entity entity, T0 component) where T0 : IComponent
 {
     for (int i = 0; i < chunks.Count; i++)
     {
         ref EntityChunk chunk = ref chunks[i];
         for (int e = 0; e < chunk.Count; e++)
         {
             Entity currEntity = chunk.GetEntity(e);
             if (currEntity.id == entity.id)
             {
                 chunk.SetComponent(e, component);
                 chunk.UpdateVersion(version);
                 return;
             }
         }
     }
예제 #2
0
        private static void PerformChunkIteration(EntityWorld world, IQueryChunkIterator chunkIterator, EntityQuery query, bool checkVersion, uint version)
        {
            StructArray <EntityChunk> chunks = world.EntityManager.GetChunks();
            bool generalWrite = query.IsGeneralWrite();

            for (int i = 0; i < chunks.Count; i++)
            {
                ref EntityChunk chunk = ref chunks[i];
                if (query.Matches(chunk.Archetype))
                {
                    if (checkVersion && !chunk.HasChanged(version))
                    {
                        continue;
                    }

                    chunkIterator.Iteration(ref chunk);

                    if (generalWrite || query.NeedsUpdate(ref chunk))
                    {
                        chunk.UpdateVersion(world.EntityManager.Version);
                    }
                }
            }