示例#1
0
        /// <summary>
        /// Creates a sprite stored at the specified theme directory, to be used for assigning sprites to a theme
        /// </summary>
        /// <param name="themeName">The name of the theme (for path)</param>
        /// <param name="spriteName">The name of the sprite</param>
        /// <param name="spriteType">The sprite type (for import method)</param>
        /// <returns>The sprite found</returns>
        public static Sprite GetSprite(string themeName, string spriteName, SpriteImportType spriteType)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(Application.streamingAssetsPath + "/Themes/" + themeName);

            FileInfo[] files  = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories);
            Sprite     sprite = null;

            foreach (FileInfo file in files)
            {
                if (Path.GetFileNameWithoutExtension(file.Name) == spriteName && !file.Name.Contains("meta"))
                {
                    int size = DetermineSize(spriteName);
                    switch (spriteType)
                    {
                    case SpriteImportType.svg:
                    case SpriteImportType.svggradient:
                        sprite = ImportVector(file, size, spriteType);
                        break;

                    case SpriteImportType.png:
                    default:
                        sprite = ImportRaster(file, size);
                        break;
                    }
                }
            }

            return(sprite);
        }
示例#2
0
        /// <summary>
        /// Creates sprites stored at the specified theme directory, to be used for assigning sprites to a theme
        /// </summary>
        /// <param name="themeName">The name of the theme (for path)</param>
        /// <param name="spriteName">The name of the sprite</param>
        /// <param name="spriteType">The sprite type (for import method)</param>
        /// <returns>The sprites found</returns>
        public static List <Sprite> GetSprites(string themeName, string spriteName, SpriteImportType spriteType)
        {
            DirectoryInfo directoryInfo = new DirectoryInfo(Application.streamingAssetsPath + "/Themes/" + themeName);

            FileInfo[]    files   = directoryInfo.GetFiles("*.*", SearchOption.AllDirectories);
            List <Sprite> sprites = new List <Sprite>();

            foreach (FileInfo file in files)
            {
                if (file.Name.Contains(spriteName) && !file.Name.Contains("meta"))
                {
                    int size = DetermineSize(spriteName);
                    switch (spriteType)
                    {
                    case SpriteImportType.svg:
                    case SpriteImportType.svggradient:
                        sprites.Add(ImportVector(file, size, spriteType));
                        break;

                    case SpriteImportType.png:
                    default:
                        sprites.Add(ImportRaster(file, size));
                        break;
                    }
                }
            }

            return(sprites);
        }
示例#3
0
        /// <summary>
        /// Imports a vector texture
        /// </summary>
        /// <param name="file">The file to import from</param>
        /// <param name="size">The size of the texture</param>
        /// <param name="type"></param>
        /// <returns>The vector texture imported as a Sprite</returns>
        public static Sprite ImportVector(FileInfo file, int size, SpriteImportType type)
        {
            StreamReader reader = null;
            StringReader sr     = null;

            try
            {
                reader = new StreamReader(file.OpenRead());
                sr     = new StringReader(reader.ReadToEnd());
                SVGParser.SceneInfo scene = SVGParser.ImportSVG(sr);

                VectorUtils.TessellationOptions tessOptions = new VectorUtils.TessellationOptions()
                {
                    StepDistance         = 100.0f,
                    MaxCordDeviation     = 0.5f,
                    MaxTanAngleDeviation = 0.1f,
                    SamplingStepSize     = 0.01f
                };

                List <VectorUtils.Geometry> geoms = VectorUtils.TessellateScene(scene.Scene, tessOptions);
                Sprite tempSprite = VectorUtils.BuildSprite(geoms, size, VectorUtils.Alignment.Center, Vector2.zero, 64, false);

                Shader shader = null;
                switch (type)
                {
                case SpriteImportType.svggradient:
                    shader = Shader.Find("Unlit/VectorGradient");
                    break;

                case SpriteImportType.svg:
                default:
                    shader = Shader.Find("Unlit/Vector");
                    break;
                }

                Texture2D tex = VectorUtils.RenderSpriteToTexture2D(tempSprite, size, size, new Material(shader));
                //tex.alphaIsTransparency = true;
                Sprite sprite = Sprite.Create(tex, new Rect(Vector2.zero, new Vector2(tex.width, tex.height)), new Vector2(0.5f, 0.5f), size * 2);

                return(sprite);
            }

            catch (Exception e)
            {
                MonoBehaviour.print(e.Message + "\nFile: " + file.Name + "\n" + e.StackTrace);
            }

            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (sr != null)
                {
                    sr.Close();
                }
            }

            return(null);
        }