public static void Reset()
        {
            _GlobalAssetObjectResolver.DisposeAssetBundles();
            _GlobalAssetObjectResolver = new GlobalAssetObjectResolver();

            foreach (var world in World.AllWorlds)
            {
                var system = world.GetExistingSystem <LiveLinkPlayerAssetRefreshSystem>();
                if (system != null)
                {
                    system._WaitingForAssets.Clear();
                }
            }
        }
Example #2
0
        unsafe public static LiveLinkChangeSet Deserialize(EntityChangeSetSerialization.ResourcePacket resource, GlobalAssetObjectResolver resolver)
        {
            var reader = resource.ChangeSet.AsReader();

            LiveLinkChangeSet changeSet;

            changeSet.Changes = EntityChangeSetSerialization.Deserialize(&reader, resource.GlobalObjectIds, resolver);
            reader.ReadNext(out changeSet.SceneGUID);
            reader.ReadNext(out changeSet.SceneName);
            reader.ReadNext(out changeSet.UnloadAllPreviousEntities);
            reader.ReadNext(out changeSet.FramesToRetainBlobAssets);

            return(changeSet);
        }
Example #3
0
        public static EntityChangeSet Deserialize(UnsafeAppendBuffer.Reader *bufferReader, NativeArray <RuntimeGlobalObjectId> globalObjectIDs, GlobalAssetObjectResolver resolver)
        {
            bufferReader->ReadNext <ComponentTypeHash>(out var typeHashes, Allocator.Persistent);

            for (int i = 0; i != typeHashes.Length; i++)
            {
                var stableTypeHash = typeHashes[i].StableTypeHash;
                var typeIndex      = TypeManager.GetTypeIndexFromStableTypeHash(stableTypeHash);
                if (typeIndex == -1)
                {
                    typeHashes.Dispose();
                    throw new ArgumentException("The LiveLink Patch Type Layout doesn't match the Data Layout of the Components. Please Rebuild the Player.");
                }
            }

            var createdEntityCount   = bufferReader->ReadNext <int>();
            var destroyedEntityCount = bufferReader->ReadNext <int>();

            bufferReader->ReadNext <EntityGuid>(out var entities, Allocator.Persistent);
            bufferReader->ReadNext <FixedString64>(out var names, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponent>(out var addComponents, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponent>(out var removeComponents, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponentDataChange>(out var setComponents, Allocator.Persistent);
            bufferReader->ReadNext <byte>(out var componentData, Allocator.Persistent);
            bufferReader->ReadNext <EntityReferenceChange>(out var entityReferenceChanges, Allocator.Persistent);
            bufferReader->ReadNext <BlobAssetReferenceChange>(out var blobAssetReferenceChanges, Allocator.Persistent);
            bufferReader->ReadNext <LinkedEntityGroupChange>(out var linkedEntityGroupAdditions, Allocator.Persistent);
            bufferReader->ReadNext <LinkedEntityGroupChange>(out var linkedEntityGroupRemovals, Allocator.Persistent);
            bufferReader->ReadNext <BlobAssetChange>(out var createdBlobAssets, Allocator.Persistent);
            bufferReader->ReadNext <ulong>(out var destroyedBlobAssets, Allocator.Persistent);
            bufferReader->ReadNext <byte>(out var blobAssetData, Allocator.Persistent);

            var resolvedObjects = new UnityEngine.Object[globalObjectIDs.Length];

            resolver.ResolveObjects(globalObjectIDs, resolvedObjects);
            var reader = new ManagedObjectBinaryReader(bufferReader, resolvedObjects);

            var setSharedComponents  = ReadSharedComponentDataChanges(bufferReader, reader, typeHashes);
            var setManagedComponents = ReadManagedComponentDataChanges(bufferReader, reader, typeHashes);

            //if (!bufferReader->EndOfBuffer)
            //    throw new Exception("Underflow in EntityChangeSet buffer");

            return(new EntityChangeSet(
                       createdEntityCount,
                       destroyedEntityCount,
                       entities,
                       typeHashes,
                       names,
                       addComponents,
                       removeComponents,
                       setComponents,
                       componentData,
                       entityReferenceChanges,
                       blobAssetReferenceChanges,
                       setManagedComponents,
                       setSharedComponents,
                       linkedEntityGroupAdditions,
                       linkedEntityGroupRemovals,
                       createdBlobAssets,
                       destroyedBlobAssets,
                       blobAssetData));
        }
        public static EntityChangeSet Deserialize(UnsafeAppendBuffer.Reader *bufferReader, NativeArray <RuntimeGlobalObjectId> globalObjectIDs, GlobalAssetObjectResolver resolver)
        {
            bufferReader->ReadNext <ComponentTypeHash>(out var typeHashes, Allocator.Persistent);

            for (int i = 0; i != typeHashes.Length; i++)
            {
                var stableTypeHash = typeHashes[i].StableTypeHash;
                var typeIndex      = TypeManager.GetTypeIndexFromStableTypeHash(stableTypeHash);
                if (typeIndex == -1)
                {
                    typeHashes.Dispose();
                    throw new ArgumentException("The LiveLink Patch Type Layout doesn't match the Data Layout of the Components. Please Rebuild the Player.");
                }
            }

            var createdEntityCount   = bufferReader->ReadNext <int>();
            var destroyedEntityCount = bufferReader->ReadNext <int>();

            bufferReader->ReadNext <EntityGuid>(out var entities, Allocator.Persistent);
            bufferReader->ReadNext <NativeString64>(out var names, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponent>(out var addComponents, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponent>(out var removeComponents, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponentDataChange>(out var setComponents, Allocator.Persistent);
            bufferReader->ReadNext <byte>(out var componentData, Allocator.Persistent);
            bufferReader->ReadNext <EntityReferenceChange>(out var entityReferenceChanges, Allocator.Persistent);
            bufferReader->ReadNext <BlobAssetReferenceChange>(out var blobAssetReferenceChanges, Allocator.Persistent);
            bufferReader->ReadNext <LinkedEntityGroupChange>(out var linkedEntityGroupAdditions, Allocator.Persistent);
            bufferReader->ReadNext <LinkedEntityGroupChange>(out var linkedEntityGroupRemovals, Allocator.Persistent);
            bufferReader->ReadNext <BlobAssetChange>(out var createdBlobAssets, Allocator.Persistent);
            bufferReader->ReadNext <ulong>(out var destroyedBlobAssets, Allocator.Persistent);
            bufferReader->ReadNext <byte>(out var blobAssetData, Allocator.Persistent);
            bufferReader->ReadNext <PackedComponent>(out var setSharedComponentPackedComponents, Allocator.Persistent);


            var resolvedObjects = new UnityEngine.Object[globalObjectIDs.Length];

            resolver.ResolveObjects(globalObjectIDs, resolvedObjects);
            var reader = new PropertiesBinaryReader(bufferReader, resolvedObjects);
            var setSharedComponents = new PackedSharedComponentDataChange[setSharedComponentPackedComponents.Length];

            for (int i = 0; i < setSharedComponentPackedComponents.Length; i++)
            {
                object componentValue;
                if (bufferReader->ReadNext <int>() == 1)
                {
                    var packedTypeIndex = setSharedComponentPackedComponents[i].PackedTypeIndex;
                    var stableTypeHash  = typeHashes[packedTypeIndex].StableTypeHash;
                    var typeIndex       = TypeManager.GetTypeIndexFromStableTypeHash(stableTypeHash);
                    var type            = TypeManager.GetType(typeIndex);
                    componentValue = BoxedProperties.ReadBoxedStruct(type, reader);
                }