コード例 #1
0
        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 })));
                }
            }
        }
コード例 #2
0
ファイル: Spawnable.cs プロジェクト: AndreaDev3D/SMLHelper
        /// <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);
        }