public static unsafe EntityPatchInfo *AppendEntityPatches(EntityPatchInfo *patches, TypeManager.EntityOffsetInfo[] offsets, int baseOffset, int stride)
        {
            EntityPatchInfo *infoPtr;

            if (offsets == null)
            {
                infoPtr = patches;
            }
            else
            {
                int index = 0;
                while (true)
                {
                    if (index >= offsets.Length)
                    {
                        infoPtr = patches + offsets.Length;
                        break;
                    }
                    patches[index] = new EntityPatchInfo {
                        Offset = baseOffset + offsets[index].Offset,
                        Stride = stride
                    };
                    index++;
                }
            }
            return(infoPtr);
        }
Пример #2
0
        public static void PatchEntitiesForPrefab(EntityPatchInfo *scalarPatches, int scalarPatchCount, BufferEntityPatchInfo *bufferPatches, int bufferPatchCount, byte *data, int indexInChunk, int entityCount, SparseEntityRemapInfo *remapping, int remappingCount)
        {
            // Patch scalars (single components) with entity references.
            for (int p = 0; p < scalarPatchCount; p++)
            {
                byte *entityData = data + scalarPatches[p].Offset;
                for (int e = 0; e != entityCount; e++)
                {
                    Entity *entity = (Entity *)(entityData + scalarPatches[p].Stride * (e + indexInChunk));
                    *       entity = RemapEntityForPrefab(remapping + e * remappingCount, remappingCount, *entity);
                }
            }

            // Patch buffers that contain entity references
            for (int p = 0; p < bufferPatchCount; ++p)
            {
                byte *bufferData = data + bufferPatches[p].BufferOffset;

                for (int e = 0; e != entityCount; e++)
                {
                    BufferHeader *header = (BufferHeader *)(bufferData + bufferPatches[p].BufferStride * (e + indexInChunk));

                    byte *elemsBase = BufferHeader.GetElementPointer(header) + bufferPatches[p].ElementOffset;
                    int   elemCount = header->Length;

                    for (int k = 0; k != elemCount; ++k)
                    {
                        Entity *entityPtr = (Entity *)elemsBase;
                        *       entityPtr = RemapEntityForPrefab(remapping + e * remappingCount, remappingCount, *entityPtr);
                        elemsBase += bufferPatches[p].ElementStride;
                    }
                }
            }
        }
        public static unsafe void PatchEntities(EntityPatchInfo *scalarPatches, int scalarPatchCount, BufferEntityPatchInfo *bufferPatches, int bufferPatchCount, byte *data, int count, ref NativeArray <EntityRemapInfo> remapping)
        {
            int index = 0;

            while (true)
            {
                if (index >= scalarPatchCount)
                {
                    int num3 = 0;
                    while (num3 < bufferPatchCount)
                    {
                        byte *numPtr2 = data + bufferPatches[num3].BufferOffset;
                        int   num4    = 0;
                        while (true)
                        {
                            if (num4 == count)
                            {
                                num3++;
                                break;
                            }
                            BufferHeader *header  = (BufferHeader *)numPtr2;
                            byte *        numPtr3 = BufferHeader.GetElementPointer(header) + bufferPatches[num3].ElementOffset;
                            int           length  = header->Length;
                            int           num6    = 0;
                            while (true)
                            {
                                if (num6 == length)
                                {
                                    numPtr2 += bufferPatches[num3].BufferStride;
                                    num4++;
                                    break;
                                }
                                Entity *entityPtr2 = (Entity *)numPtr3;
                                entityPtr2[0] = RemapEntity(ref remapping, entityPtr2[0]);
                                numPtr3      += bufferPatches[num3].ElementStride;
                                num6++;
                            }
                        }
                    }
                    return;
                }
                byte *numPtr = data + scalarPatches[index].Offset;
                int   num2   = 0;
                while (true)
                {
                    if (num2 == count)
                    {
                        index++;
                        break;
                    }
                    Entity *entityPtr = (Entity *)numPtr;
                    entityPtr[0] = RemapEntity(ref remapping, entityPtr[0]);
                    numPtr      += scalarPatches[index].Stride;
                    num2++;
                }
            }
        }
Пример #4
0
        public static EntityPatchInfo *AppendEntityPatches(EntityPatchInfo *patches, EntityOffsetInfo *offsets, int offsetCount, int baseOffset, int stride)
        {
            if (offsets == null)
            {
                return(patches);
            }

            for (int i = 0; i < offsetCount; i++)
            {
                patches[i] = new EntityPatchInfo {
                    Offset = baseOffset + offsets[i].Offset, Stride = stride
                }
            }
            ;
            return(patches + offsetCount);
        }
        public static void PatchEntities(EntityPatchInfo *scalarPatches, int scalarPatchCount,
                                         BufferEntityPatchInfo *bufferPatches, int bufferPatchCount,
                                         byte *chunkBuffer, int entityCount, ref NativeArray <EntityRemapInfo> remapping)
        {
            // Patch scalars (single components) with entity references.
            for (int p = 0; p < scalarPatchCount; p++)
            {
                byte *entityData = chunkBuffer + scalarPatches[p].Offset;
                for (int i = 0; i != entityCount; i++)
                {
                    Entity *entity = (Entity *)entityData;
                    *       entity = RemapEntity(ref remapping, *entity);
                    entityData += scalarPatches[p].Stride;
                }
            }

            // Patch buffers that contain entity references
            for (int p = 0; p < bufferPatchCount; ++p)
            {
                byte *bufferData = chunkBuffer + bufferPatches[p].BufferOffset;

                for (int i = 0; i != entityCount; ++i)
                {
                    BufferHeader *header = (BufferHeader *)bufferData;

                    byte *elemsBase = BufferHeader.GetElementPointer(header) + bufferPatches[p].ElementOffset;
                    int   elemCount = header->Length;

                    for (int k = 0; k != elemCount; ++k)
                    {
                        Entity *entityPtr = (Entity *)elemsBase;
                        *       entityPtr = RemapEntity(ref remapping, *entityPtr);
                        elemsBase += bufferPatches[p].ElementStride;
                    }

                    bufferData += bufferPatches[p].BufferStride;
                }
            }
        }