public Runtime PrepareToExecuteOnEntitiesIn(ref ArchetypeChunk chunk) { return(new Runtime() { _objects = chunk.GetComponentObjects(_type, _entityManager) }); }
protected override void OnUpdate() { var boxChunks = boxGroup.CreateArchetypeChunkArray(Allocator.TempJob); var sphereChuncks = sphereGroup.CreateArchetypeChunkArray(Allocator.TempJob); var capsuleChunks = capsuleGroup.CreateArchetypeChunkArray(Allocator.TempJob); for (int i = 0, length = boxChunks.Length; i < length; ++i) { ArchetypeChunk boxChunk = boxChunks[i]; var tempEntity = boxChunk.GetNativeArray(GetArchetypeChunkEntityType()); NativeArray <Entity> entities = new NativeArray <Entity>(tempEntity.Length, Allocator.TempJob); tempEntity.CopyTo(entities); UpdateBoxColliders(entities, boxChunk.GetComponentObjects(GetArchetypeChunkComponentType <BoxCollider>(true), EntityManager)); entities.Dispose(); } for (int i = 0, length = sphereChuncks.Length; i < length; ++i) { ArchetypeChunk sphereChunk = sphereChuncks[i]; var tempEntity = sphereChunk.GetNativeArray(GetArchetypeChunkEntityType()); NativeArray <Entity> entities = new NativeArray <Entity>(tempEntity.Length, Allocator.TempJob); tempEntity.CopyTo(entities); UpdateSphereColliders(entities, sphereChunk.GetComponentObjects(GetArchetypeChunkComponentType <SphereCollider>(true), EntityManager)); entities.Dispose(); } for (int i = 0, length = capsuleChunks.Length; i < length; ++i) { ArchetypeChunk capsuleChunk = capsuleChunks[i]; var tempEntity = capsuleChunk.GetNativeArray(GetArchetypeChunkEntityType()); NativeArray <Entity> entities = new NativeArray <Entity>(tempEntity.Length, Allocator.TempJob); tempEntity.CopyTo(entities); UpdateCapsuleColliders(entities, capsuleChunk.GetComponentObjects(GetArchetypeChunkComponentType <CapsuleCollider>(true), EntityManager)); entities.Dispose(); } boxChunks.Dispose(); sphereChuncks.Dispose(); capsuleChunks.Dispose(); var colliderChunks = colliderGroup.CreateArchetypeChunkArray(Allocator.TempJob); for (int i = 0, length = colliderChunks.Length; i < length; ++i) { ArchetypeChunk colliderChunk = colliderChunks[i]; var tempEntity = colliderChunk.GetNativeArray(GetArchetypeChunkEntityType()); NativeArray <Entity> entities = new NativeArray <Entity>(tempEntity.Length, Allocator.TempJob); tempEntity.CopyTo(entities); for (int j = 0, entityCount = entities.Length; j < entityCount; ++j) { ColliderComponentData colliderInfo = new ColliderComponentData(); Entity entity = entities[j]; if (GetComponentDataFromEntity <BoxColliderComponentData>(true).Exists(entity)) { colliderInfo.Volume |= E_CollisionVolume.BOX; } if (GetComponentDataFromEntity <SphereColliderComponentData>(true).Exists(entity)) { colliderInfo.Volume |= E_CollisionVolume.SPHERE; } if (GetComponentDataFromEntity <CapsuleColliderComponentData>(true).Exists(entity)) { colliderInfo.Volume |= E_CollisionVolume.CAPSULE; } Utils.Utils.AddOrSetComponent(entity, colliderInfo, GetComponentDataFromEntity <ColliderComponentData>(true), EntityManager); EntityManager.RemoveComponent <DirtyColliderComponentData>(entity); } entities.Dispose(); } if (World.GetExistingManager <PreCollisionSystem>() != null) { World.GetExistingManager <PreCollisionSystem>().HasChanged = true; } if (colliderChunks.IsCreated) { colliderChunks.Dispose(); } }