public void RegisterAsset(CAsset asset, string basePath, bool bOverride) { lock (m_registryMutex) { if (!m_assetFileMap.ContainsKey(asset.Guid)) { basePath = SanitizeAssetPath(basePath); string assetFileName = basePath + asset.Name + asset.GetFileExtension(); if (!bOverride) { if (FileUtilities.GetNextAvailableAssetFile(assetFileName, m_assetFileMap.ValueToKey, out string foundFileName)) { assetFileName = foundFileName; asset.Name = Path.GetFileNameWithoutExtension(foundFileName); } else { throw new Exception("Couldn't find a valid asset filename"); } } asset.Path = assetFileName; m_assetFileMap.Add(asset.Guid, assetFileName); m_assetMap.Add(asset.Guid, asset); // todo henning defer this until asset is loaded in case it is not loaded yet if (AutoSaveAssets > 0) { Task.Run(() => { string absoluteFilename = ProjectDefinitions.GetAbsolutePath(assetFileName); FileInfo fileInfo = new FileInfo(absoluteFilename); fileInfo.Directory?.Create(); asset.SaveCustomResources(basePath); FileStream fileStream = new FileStream(absoluteFilename, FileMode.Create); CAssetSerializer.Instance.SerializeToStream(asset, fileStream); SaveRegistry(); }); } else { m_unsavedAssets.Add(asset); } } } }
/// <summary> /// Save modifications made to the given asset, only needed if an asset is modified after registration, does not work for non registered assets use RequestRegisterAsset instead /// </summary> /// <param name="assetToSave"></param> public void SaveAsset(CAsset assetToSave) { lock (m_registryMutex) { if (m_assetFileMap.TryGet(assetToSave.Guid, out string assetFilename)) { string absoluteFilename = ProjectDefinitions.GetAbsolutePath(assetFilename); FileInfo fileInfo = new FileInfo(absoluteFilename); string relativeDirectory = ProjectDefinitions.GetRelativePath(fileInfo.DirectoryName) + '/'; assetToSave.SaveCustomResources(relativeDirectory); FileStream fileStream = new FileStream(absoluteFilename, FileMode.Create); CAssetSerializer.Instance.SerializeToStream(assetToSave, fileStream); } else { throw new Exception("Tried to save an asset that is not registered in the registry, make sure to register assets with RequestRegisterAsset"); } } }