public void DomainReloadTests_ReInitAddressablesFlagIsSetCorrectly_WhenExitingPlaymode() { #if !UNITY_2020_2_OR_NEWER Assert.Ignore($"Skipping Domain Reload test {nameof(DomainReloadTests_ReInitAddressablesFlagIsSetCorrectly_WhenExitingPlaymode)}, Domain Reload tests supported from 2020.2+"); #else Assert.True(Application.isPlaying); Addressables.ResolveInternalId("DummyString"); //just need this so m_Addressables property gets called Assert.IsFalse(Addressables.reinitializeAddressables); #endif }
/// <summary> /// Construct a new ResourceLocationMap object with a list of locations. /// </summary> /// <param name="id">The locator id.</param> /// <param name="locations">The list of locations to initialize with.</param> public ResourceLocationMap(string id, IList <ResourceLocationData> locations) { LocatorId = id; if (locations == null) { return; } Locations = new Dictionary <object, IList <IResourceLocation> >(locations.Count * 2); var locMap = new Dictionary <string, ResourceLocationBase>(); var dataMap = new Dictionary <string, ResourceLocationData>(); //create and collect locations for (int i = 0; i < locations.Count; i++) { var rlData = locations[i]; if (rlData.Keys == null || rlData.Keys.Length < 1) { Addressables.LogErrorFormat("Address with id '{0}' does not have any valid keys, skipping...", rlData.InternalId); continue; } if (locMap.ContainsKey(rlData.Keys[0])) { Addressables.LogErrorFormat("Duplicate address '{0}' with id '{1}' found, skipping...", rlData.Keys[0], rlData.InternalId); continue; } var loc = new ResourceLocationBase(rlData.Keys[0], Addressables.ResolveInternalId(rlData.InternalId), rlData.Provider, rlData.ResourceType); loc.Data = rlData.Data; locMap.Add(rlData.Keys[0], loc); dataMap.Add(rlData.Keys[0], rlData); } //fix up dependencies between them foreach (var kvp in locMap) { var data = dataMap[kvp.Key]; if (data.Dependencies != null) { foreach (var d in data.Dependencies) { kvp.Value.Dependencies.Add(locMap[d]); } kvp.Value.ComputeDependencyHash(); } } foreach (KeyValuePair <string, ResourceLocationBase> kvp in locMap) { ResourceLocationData rlData = dataMap[kvp.Key]; foreach (var k in rlData.Keys) { Add(k, kvp.Value); } } }
public void DomainReloadTests_ReInitAddressablesFlagIsSetCorrectly_WhenExitingPlaymode() { bool savedState = EditorSettings.enterPlayModeOptionsEnabled; EditorSettings.enterPlayModeOptionsEnabled = true; Addressables.reinitializeAddressables = true; EditorApplication.isPlaying = true; Addressables.ResolveInternalId("DummyString"); //just need this so m_Addressables property gets called Assert.IsFalse(Addressables.reinitializeAddressables); EditorApplication.isPlaying = false; Assert.IsTrue(Addressables.reinitializeAddressables); EditorSettings.enterPlayModeOptionsEnabled = savedState; }
/// <summary> /// Sets properties of the Caching system. /// </summary> /// <param name="id">The id of thei object.</param> /// <param name="dataStr">The JSON serialized CacheInitializationData object.</param> /// <returns>True if the initialization succeeded.</returns> public bool Initialize(string id, string dataStr) { #if ENABLE_CACHING var data = JsonUtility.FromJson <CacheInitializationData>(dataStr); if (data != null) { Caching.compressionEnabled = data.CompressionEnabled; var activeCache = Caching.currentCacheForWriting; if (!string.IsNullOrEmpty(data.CacheDirectoryOverride)) { var dir = Addressables.ResolveInternalId(data.CacheDirectoryOverride); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } activeCache = Caching.GetCacheByPath(dir); if (!activeCache.valid) { activeCache = Caching.AddCache(dir); } Caching.currentCacheForWriting = activeCache; } if (data.LimitCacheSize) { activeCache.maximumAvailableStorageSpace = data.MaximumCacheSize; } else { activeCache.maximumAvailableStorageSpace = long.MaxValue; } #pragma warning disable 618 activeCache.expirationDelay = data.ExpirationDelay; #pragma warning restore 618 } #endif //ENABLE_CACHING return(true); }
/// <summary> /// Create IResourceLocator object /// </summary> /// <param name="providerSuffix">If specified, this value will be appeneded to all provider ids. This is used when loading additional catalogs that need to have unique providers.</param> /// <returns>ResourceLocationMap, which implements the IResourceLocator interface.</returns> public ResourceLocationMap CreateLocator(string providerSuffix = null) { var bucketData = Convert.FromBase64String(m_BucketDataString); int bucketCount = BitConverter.ToInt32(bucketData, 0); var buckets = new Bucket[bucketCount]; int bi = 4; for (int i = 0; i < bucketCount; i++) { var index = SerializationUtilities.ReadInt32FromByteArray(bucketData, bi); bi += 4; var entryCount = SerializationUtilities.ReadInt32FromByteArray(bucketData, bi); bi += 4; var entryArray = new int[entryCount]; for (int c = 0; c < entryCount; c++) { entryArray[c] = SerializationUtilities.ReadInt32FromByteArray(bucketData, bi); bi += 4; } buckets[i] = new Bucket { entries = entryArray, dataOffset = index }; } if (!string.IsNullOrEmpty(providerSuffix)) { for (int i = 0; i < m_ProviderIds.Length; i++) { if (!m_ProviderIds[i].EndsWith(providerSuffix)) { m_ProviderIds[i] = m_ProviderIds[i] + providerSuffix; } } } var extraData = Convert.FromBase64String(m_ExtraDataString); var keyData = Convert.FromBase64String(m_KeyDataString); var keyCount = BitConverter.ToInt32(keyData, 0); var keys = new object[keyCount]; for (int i = 0; i < buckets.Length; i++) { keys[i] = SerializationUtilities.ReadObjectFromByteArray(keyData, buckets[i].dataOffset); } var locator = new ResourceLocationMap(m_LocatorId, buckets.Length); var entryData = Convert.FromBase64String(m_EntryDataString); int count = SerializationUtilities.ReadInt32FromByteArray(entryData, 0); List <IResourceLocation> locations = new List <IResourceLocation>(count); for (int i = 0; i < count; i++) { var index = k_ByteSize + i * k_ByteSize * k_EntryDataItemPerEntry; var internalId = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += k_ByteSize; var providerIndex = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += k_ByteSize; var dependency = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += k_ByteSize; var depHash = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += k_ByteSize; var dataIndex = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += k_ByteSize; var primaryKey = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += k_ByteSize; var resourceType = SerializationUtilities.ReadInt32FromByteArray(entryData, index); object data = dataIndex < 0 ? null : SerializationUtilities.ReadObjectFromByteArray(extraData, dataIndex); locations.Add(new CompactLocation(locator, Addressables.ResolveInternalId(m_InternalIds[internalId]), m_ProviderIds[providerIndex], dependency < 0 ? null : keys[dependency], data, depHash, m_Keys[primaryKey], m_resourceTypes[resourceType].Value)); } for (int i = 0; i < buckets.Length; i++) { var bucket = buckets[i]; var key = keys[i]; var locs = new List <IResourceLocation>(bucket.entries.Length); foreach (var index in bucket.entries) { locs.Add(locations[index]); } locator.Add(key, locs); } return(locator); }
/// <summary> /// Create IResourceLocator object /// </summary> /// <param name="providerSuffix">If specified, this value will be appeneded to all provider ids. This is used when loading additional catalogs that need to have unique providers.</param> /// <returns>ResourceLocationMap, which implements the IResourceLocator interface.</returns> public ResourceLocationMap CreateLocator(string providerSuffix = null) { var bucketData = Convert.FromBase64String(m_BucketDataString); int bucketCount = BitConverter.ToInt32(bucketData, 0); var buckets = new Bucket[bucketCount]; int bi = 4; for (int i = 0; i < bucketCount; i++) { var index = SerializationUtilities.ReadInt32FromByteArray(bucketData, bi); bi += 4; var entryCount = SerializationUtilities.ReadInt32FromByteArray(bucketData, bi); bi += 4; var entryArray = new int[entryCount]; for (int c = 0; c < entryCount; c++) { entryArray[c] = SerializationUtilities.ReadInt32FromByteArray(bucketData, bi); bi += 4; } buckets[i] = new Bucket { entries = entryArray, dataOffset = index }; } if (!string.IsNullOrEmpty(providerSuffix)) { for (int i = 0; i < m_ProviderIds.Length; i++) { if (!m_ProviderIds[i].EndsWith(providerSuffix, StringComparison.Ordinal)) { m_ProviderIds[i] = m_ProviderIds[i] + providerSuffix; } } } var extraData = Convert.FromBase64String(m_ExtraDataString); var keyData = Convert.FromBase64String(m_KeyDataString); var keyCount = BitConverter.ToInt32(keyData, 0); var keys = new object[keyCount]; for (int i = 0; i < buckets.Length; i++) { keys[i] = SerializationUtilities.ReadObjectFromByteArray(keyData, buckets[i].dataOffset); } var locator = new ResourceLocationMap(m_LocatorId, buckets.Length); var entryData = Convert.FromBase64String(m_EntryDataString); int count = SerializationUtilities.ReadInt32FromByteArray(entryData, 0); var locations = new IResourceLocation[count]; for (int i = 0; i < count; i++) { var index = kBytesPerInt32 + i * (kBytesPerInt32 * k_EntryDataItemPerEntry); var internalId = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; var providerIndex = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; var dependencyKeyIndex = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; var depHash = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; var dataIndex = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; var primaryKey = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; var resourceType = SerializationUtilities.ReadInt32FromByteArray(entryData, index); index += kBytesPerInt32; EnumLocalResourceMode allowMode = (EnumLocalResourceMode)SerializationUtilities.ReadInt32FromByteArray(entryData, index); object data = dataIndex < 0 ? null : SerializationUtilities.ReadObjectFromByteArray(extraData, dataIndex); locations[i] = new CompactLocation(locator, Addressables.ResolveInternalId(ExpandInternalId(m_InternalIdPrefixes, m_InternalIds[internalId])), m_ProviderIds[providerIndex], dependencyKeyIndex < 0 ? null : keys[dependencyKeyIndex], data, depHash, keys[primaryKey].ToString(), m_resourceTypes[resourceType].Value, allowMode); } for (int i = 0; i < buckets.Length; i++) { var bucket = buckets[i]; var key = keys[i]; var locs = new IResourceLocation[bucket.entries.Length]; for (int b = 0; b < bucket.entries.Length; b++) { locs[b] = locations[bucket.entries[b]]; } locator.Add(key, locs); } return(locator); }