private void LoadAssets(IAssetsFolder folder, List <IFile> assets, ILocation curLoc) { var pageAssets = assets.Where(a => a.Location.IsInLocation(curLoc, m_Comparison)).ToList(); var children = pageAssets.Where(p => p.Location.GetParent().IsSame(curLoc, m_Comparison)).ToList(); folder.Assets.AddRange(children.Select(a => { var fileName = a.Location.FileName; if (string.IsNullOrEmpty(fileName)) { //file with no extension fileName = a.Location.Segments.Last(); } return(new Asset(fileName, a.Content, a.Id)); })); children.ForEach(a => assets.Remove(a)); children.ForEach(a => pageAssets.Remove(a)); if (pageAssets.Any()) { foreach (var subFolderName in pageAssets.Select( a => GetBaseSegment(a.Location.GetRelative(curLoc))).Distinct(m_Comparer)) { var subFolder = new AssetsFolder(subFolderName); folder.Folders.Add(subFolder); LoadAssets(subFolder, assets, curLoc.Combine(new Location("", "", new string[] { subFolderName }))); } } }
/// <summary> /// Determines thee <see cref="Atlas.Sprite"/> to be used for this spawnable's icon.<para/> /// Default behavior will look for a PNG file named <see cref="IconFileName"/> inside <see cref="AssetsFolder"/>. /// </summary> /// <returns>Returns the <see cref="Atlas.Sprite"/> that will be used in the <see cref="SpriteHandler.RegisterSprite(TechType, Atlas.Sprite)"/> call.</returns> protected virtual Atlas.Sprite GetItemSprite() { // This is for backwards compatibility with mods that were using the "ModName/Assets" format string path = AssetsFolder != modFolderLocation ? IOUtilities.Combine(".", "QMods", AssetsFolder.Trim('/'), IconFileName) : Path.Combine(AssetsFolder, IconFileName); if (File.Exists(path)) { return(ImageUtils.LoadSpriteFromFile(path)); } Logger.Warn($"Sprite for '{PrefabFileName}'{Environment.NewLine}Did not find an image file at '{path}'"); return(SpriteManager.defaultSprite); }