Пример #1
0
        public Texture2D UpdateTexture()
        {
            var color = this.value;
            var path  = Theme.storagePath.GetAssetPath() + "Palettes/@Generated/";

            if (!File.Exists(path))
            {
                File.Create(path);
            }
            var imagePath = path + "Color" + this.name + ".png";
            var image     = default(Texture2D);

            Worker.MainThread(() => {
                image = File.GetAsset <Texture2D>(imagePath);
                if (image.IsNull())
                {
                    image = new Texture2D(1, 1, TextureFormat.RGBA32, false);
                    image.SaveAs(imagePath);
                    ProxyEditor.ImportAsset(imagePath);
                    return;
                }
                image.SetPixel(0, 0, color);
                image.Apply();
            });
            return(image);
        }
Пример #2
0
        public static Type Create <Type>(string path, bool createPath = true) where Type : ScriptableObject
        {
            if (path.IsNull())
            {
                return(default(Type));
            }
            var name    = path.GetPathTerm();
            var useName = typeof(Type).Name == "ScriptableObject";
            var folder  = Application.dataPath + Singleton.storagePath;

            path = folder.GetAssetPath() + path;
            if (createPath)
            {
                File.Create(folder);
            }
            ProxyEditor.ImportAsset(folder.GetAssetPath());
            try{
                ScriptableObject instance = useName ? ScriptableObject.CreateInstance(name) : ScriptableObject.CreateInstance <Type>();
                ProxyEditor.CreateAsset(instance, path);
                ProxyEditor.RefreshAssets();
                return(instance.As <Type>());
            }
            catch { Log.Warning("[Utility] No scriptableObject exists named -- " + name + ".asset"); }
            return(null);
        }
Пример #3
0
        public void Export(string path = null)
        {
            var theme    = Theme.active;
            var savePath = path ?? Theme.storagePath + "Fontsets";
            var saveName = theme.fontset.name + "-Variant";

            path = path.IsEmpty() ? ProxyEditor.SaveFilePanel("Save Theme [Fonts]", savePath.GetAssetPath(), saveName, "unityfontset") : path;
            if (path.Length > 0)
            {
                var file = File.Create(path);
                file.Write(this.Serialize());
                ProxyEditor.ImportAsset(path.GetAssetPath());
                EditorPref.Set <string>("Zios.Theme.Fontset" + Theme.suffix, path.GetFileName());
                Theme.Reset();
            }
        }
Пример #4
0
        public void ApplyTexture(string path, Texture2D texture)
        {
            var empty = false;

            Worker.MainThread(() => empty = texture.IsNull());
            if (empty)
            {
                return;
            }
            var name        = path.GetPathTerm().TrimLeft("#");
            var ignoreAlpha = name.StartsWith("A-");
            var isSplat     = name.StartsWith("!");
            var parts       = name.TrimLeft("!", "A-").Split("-");

            if (isSplat && parts.Length < 2)
            {
                Log.Warning("[ThemePalette] : Improperly formed splat texture -- " + path.GetPathTerm());
                return;
            }
            var colorA = isSplat ? this.ParseColor(parts[0]) : Color.clear;
            var colorB = isSplat ? this.ParseColor(parts[1]) : Color.clear;
            var colorC = isSplat ? this.ParseColor(parts[2]) : Color.clear;

            if (isSplat)
            {
                parts = parts.Skip(3).ToArray();
            }
            name = parts.Join("-");
            bool      changes       = false;
            Texture2D originalImage = null;
            var       originalPath  = path.GetDirectory().GetDirectory() + "/" + name;
            var       pixels        = new Color[0];
            Action    method        = () => {
                originalImage = File.GetAsset <Texture2D>(originalPath, false);
                if (originalImage.IsNull() && !originalPath.ContainsAny("Themes", "@Themes"))
                {
                    originalImage = File.GetAsset <Texture2D>(name, false);
                }
                pixels = texture.GetPixels();
                if (originalImage.IsNull() || pixels.Length != originalImage.GetPixels().Length)
                {
                    Log.Show("[TexturePalette] : Generating source for index/splat -- " + originalPath.GetPathTerm());
                    texture.SaveAs(originalPath);
                    var assetPath = originalPath.GetAssetPath();
                    ProxyEditor.ImportAsset(assetPath);
                    var importer = TextureImporter.GetAtPath(assetPath).As <TextureImporter>();
                    ColorImportSettings.Apply(importer);
                    importer.SaveAndReimport();
                    originalImage = File.GetAsset <Texture2D>(originalPath, false);
                }
                originalPath = originalImage.GetAssetPath();
                if (Theme.debug && originalImage.format != TextureFormat.RGBA32)
                {
                    Log.Show("[ThemePalette] Original image is not an RGBA32 texture -- " + originalPath);
                }
            };

            Worker.MainThread(method);
            if (Theme.debug && pixels.Length > 65536)
            {
                Log.Warning("[ThemePalette] Dynamic image has over 65K pixels. Performance can be affected -- " + name);
            }
            var swapKeys       = this.swap.Keys.ToArray();
            var originalPixels = pixels.Copy();

            for (int index = 0; index < pixels.Length; ++index)
            {
                var pixel = pixels[index];
                if (isSplat)
                {
                    var emptyRed    = pixel.r == 0 || colorA.a == 0;
                    var emptyGreen  = pixel.g == 0 || colorB.a == 0;
                    var emptyBlue   = pixel.b == 0 || colorC.a == 0;
                    var colorAStart = emptyGreen && emptyBlue?colorA.SetAlpha(0) : Color.clear;

                    var colorBStart = emptyRed && emptyBlue?colorB.SetAlpha(0) : Color.clear;

                    var colorCStart = emptyRed && emptyGreen?colorC.SetAlpha(0) : Color.clear;

                    var splatA     = colorAStart.Lerp(colorA, pixel.r);
                    var splatB     = colorBStart.Lerp(colorB, pixel.g);
                    var splatC     = colorCStart.Lerp(colorC, pixel.b);
                    var pixelColor = splatA + splatB + splatC;
                    pixelColor.a *= pixel.a;
                    if (originalPixels[index] != pixelColor)
                    {
                        originalPixels[index] = pixelColor;
                        changes = true;
                    }
                    continue;
                }
                for (int swapIndex = 0; swapIndex < swapKeys.Length; ++swapIndex)
                {
                    var swapColor = swapKeys[swapIndex];
                    if (pixel.Matches(swapColor, false))
                    {
                        var color = this.swap[swapColor].value;
                        color.a = ignoreAlpha ? pixel.a : color.a * pixel.a;
                        if (originalPixels[index] != color)
                        {
                            originalPixels[index] = color;
                            changes = true;
                        }
                    }
                }
            }
            if (changes)
            {
                method = () => {
                    originalImage.SetPixels(originalPixels);
                    originalImage.Apply();
                };
                Worker.MainThread(method);
            }
        }