public void SetSharedComponentDataIndex(ArchetypeManager archetypeManager, SharedComponentDataManager sharedComponentDataManager, Entity entity, int typeIndex, int newSharedComponentDataIndex) { var archetype = GetArchetype(entity); var indexInTypeArray = ChunkDataUtility.GetIndexInTypeArray(archetype, typeIndex); var srcChunk = GetComponentChunk(entity); var srcSharedComponentValueArray = srcChunk->SharedComponentValueArray; var sharedComponentOffset = archetype->SharedComponentOffset[indexInTypeArray]; var oldSharedComponentDataIndex = srcSharedComponentValueArray[sharedComponentOffset]; if (newSharedComponentDataIndex == oldSharedComponentDataIndex) { return; } var sharedComponentIndices = stackalloc int[archetype->NumSharedComponents]; var srcSharedComponentDataIndices = srcChunk->SharedComponentValueArray; ArchetypeManager.CopySharedComponentDataIndexArray(sharedComponentIndices, srcSharedComponentDataIndices, archetype->NumSharedComponents); sharedComponentIndices[sharedComponentOffset] = newSharedComponentDataIndex; var newChunk = archetypeManager.GetChunkWithEmptySlots(archetype, sharedComponentIndices); var newChunkIndex = archetypeManager.AllocateIntoChunk(newChunk); IncrementComponentOrderVersion(archetype, srcChunk, sharedComponentDataManager); MoveEntityToChunk(archetypeManager, entity, newChunk, newChunkIndex); }