Example #1
0
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (effect == null)
            {
                effect = this.target as SpriteColorRampMask;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            effect.palettes[0] = (SpriteColorRampPalettes)EditorGUILayout.EnumPopup(@"Palette 1 (Red)", effect.palettes[0]);

            effect.palettes[1] = (SpriteColorRampPalettes)EditorGUILayout.EnumPopup(@"Palette 2 (Green)", effect.palettes[1]);

            effect.palettes[2] = (SpriteColorRampPalettes)EditorGUILayout.EnumPopup(@"Palette 3 (Blue)", effect.palettes[2]);

            effect.strength = SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(effect.strength * 100.0f), 0, 100, 100) * 0.01f;

            effect.gammaCorrect = SpriteColorFXEditorHelper.SliderWithReset(@"Gamma", SpriteColorFXEditorHelper.TooltipGamma, effect.gammaCorrect, 0.5f, 3.0f, 1.2f);

            effect.uvScroll = SpriteColorFXEditorHelper.SliderWithReset(@"UV Scroll", SpriteColorFXEditorHelper.TooltipUVScroll, effect.uvScroll, 0.0f, 1.0f, 0.0f);

            EditorGUIUtility.fieldWidth = 60.0f;

            SpriteColorFXEditorHelper.MinMaxSliderWithReset(@"Luminance range", SpriteColorFXEditorHelper.TooltipLuminanceRange, ref effect.luminanceRangeMin, ref effect.luminanceRangeMax, 0.0f, 1.0f, 0.0f, 1.0f);

            effect.invertLum = SpriteColorFXEditorHelper.ToogleWithReset(@"Invert luminance", SpriteColorFXEditorHelper.TooltipInvertLuminance, effect.invertLum, false);

            effect.textureMask = EditorGUILayout.ObjectField(new GUIContent(@"Mask (RGBA)", SpriteColorFXEditorHelper.TooltipTextureMask), effect.textureMask, typeof(Texture2D), false) as Texture2D;
        }
Example #2
0
        /// <summary>
        /// Vector2 field with reset button.
        /// </summary>
        public static Vector2 Vector2WithReset(string label, string tooltip, Vector2 value, Vector2 defaultValue)
        {
            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.LabelField(new GUIContent(label, tooltip));

                float oldLabelWidth = EditorGUIUtility.labelWidth;

                EditorGUIUtility.labelWidth = 20.0f;

                value.x = EditorGUILayout.FloatField("X", value.x);

                value.y = EditorGUILayout.FloatField("Y", value.y);

                EditorGUIUtility.labelWidth = oldLabelWidth;

                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, string.Format("Reset to '{0}'", defaultValue), @"Icons/ic_cached") == true)
                {
                    value = defaultValue;
                }
            }
            EditorGUILayout.EndHorizontal();

            return(value);
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (effect == null)
            {
                effect = this.target as SpriteColorDissolve;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            effect.dissolveAmount = SpriteColorFXEditorHelper.SliderWithReset(@"Amount", SpriteColorFXEditorHelper.TooltipNoiseAmount, effect.dissolveAmount * 100.0f, 0.0f, 100.0f, 0.0f) * 0.01f;

            DissolveShaderType newShaderType = (DissolveShaderType)EditorGUILayout.EnumPopup(new GUIContent(@"Shader", @"Texture type"), effect.shaderType);

            if (newShaderType != effect.shaderType)
            {
                effect.SetShaderType(newShaderType);
            }

            if (effect.shaderType != DissolveShaderType.Normal)
            {
                SpriteColorHelper.PixelOp newPixelOp = (SpriteColorHelper.PixelOp)EditorGUILayout.EnumPopup(new GUIContent(@"Blend mode", @"Blend modes"), effect.pixelOp);
                if (newPixelOp != effect.pixelOp)
                {
                    effect.SetPixelOp(newPixelOp);
                }
            }

            DissolveTextureType newTextureType = (DissolveTextureType)EditorGUILayout.EnumPopup(@"Dissolve type", effect.dissolveTextureType);

            if (newTextureType != effect.dissolveTextureType)
            {
                effect.SetTextureType(newTextureType);
            }

            if (effect.dissolveTextureType == DissolveTextureType.Custom)
            {
                effect.dissolveTexture = EditorGUILayout.ObjectField(@"Dissolve texture", effect.dissolveTexture, typeof(Texture), false) as Texture;
            }

            effect.dissolveUVScale = SpriteColorFXEditorHelper.SliderWithReset(@"Dissolve UV scale", SpriteColorFXEditorHelper.TooltipNoiseAmount, effect.dissolveUVScale, 0.1f, 5.0f, 1.0f);

            effect.dissolveInverse = EditorGUILayout.Toggle(new GUIContent(@"Invert", SpriteColorFXEditorHelper.TooltipNoiseAmount), effect.dissolveInverse);

            if (effect.shaderType != DissolveShaderType.Normal)
            {
                effect.dissolveBorderWitdh = SpriteColorFXEditorHelper.SliderWithReset(@"Border witdh", SpriteColorFXEditorHelper.TooltipNoiseAmount, effect.dissolveBorderWitdh * 500.0f, 0.0f, 100.0f, 50.0f) * 0.002f;
            }

            if (effect.shaderType == DissolveShaderType.BorderColor)
            {
                effect.dissolveBorderColor = SpriteColorFXEditorHelper.ColorWithReset(@"Border color", SpriteColorFXEditorHelper.TooltipNoiseAmount, effect.dissolveBorderColor, Color.grey);
            }
            else if (effect.shaderType == DissolveShaderType.BorderTexture)
            {
                effect.borderTexture = EditorGUILayout.ObjectField(@"Border texture", effect.borderTexture, typeof(Texture), false) as Texture;
                effect.borderUVScale = SpriteColorFXEditorHelper.SliderWithReset(@"Border UV scale", SpriteColorFXEditorHelper.TooltipNoiseAmount, effect.borderUVScale, 0.1f, 5.0f, 1.0f);
            }
        }
        private void UVParamsInspectorGUI(ref Vector4 uvParams, ref float angle)
        {
            EditorGUI.indentLevel++;

            uvParams.x = SpriteColorFXEditorHelper.SliderWithReset(@"U coord scale", @"U texture coordinate scale", uvParams.x, -5f, 5f, 1f);
            uvParams.y = SpriteColorFXEditorHelper.SliderWithReset(@"V coord scale", @"V texture coordinate scale", uvParams.y, -5f, 5f, 1f);
            uvParams.z = SpriteColorFXEditorHelper.SliderWithReset(@"U coord vel", @"U texture coordinate velocity", uvParams.z, -2f, 2f, 0f);
            uvParams.w = SpriteColorFXEditorHelper.SliderWithReset(@"V coord vel", @"V texture coordinate velocity", uvParams.w, -2f, 2f, 0f);
            angle      = SpriteColorFXEditorHelper.SliderWithReset(@"UV angle", @"UV rotation angle", angle, 0f, 360f, 0f);

            EditorGUI.indentLevel--;
        }
Example #5
0
        /// <summary>
        /// Toogle with a reset button.
        /// </summary>
        public static bool ToogleWithReset(string label, string tooltip, bool value, bool defaultValue)
        {
            EditorGUILayout.BeginHorizontal();
            {
                value = EditorGUILayout.Toggle(new GUIContent(label, tooltip), value);

                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, string.Format("Reset to '{0}.'", defaultValue), @"Icons/ic_cached") == true)
                {
                    value = defaultValue;
                }
            }
            EditorGUILayout.EndHorizontal();

            return(value);
        }
Example #6
0
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (effect == null)
            {
                effect = this.target as SpriteColorGlass;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            effect.strength = SpriteColorFXEditorHelper.SliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, effect.strength * 100.0f, 0.0f, 100.0f, 100.0f) * 0.01f;

            effect.distortion = SpriteColorFXEditorHelper.SliderWithReset(@"Distortion", SpriteColorFXEditorHelper.TooltipDistortion, effect.distortion, 0.0f, 10.0f, 1.0f);

            effect.refraction = SpriteColorFXEditorHelper.SliderWithReset(@"Refraction", SpriteColorFXEditorHelper.TooltipRefraction, effect.refraction, 0.0f, 10.0f, 0.0f);
        }
Example #7
0
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (baseTarget == null)
            {
                baseTarget = this.target as SpriteColorShiftRadial;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            baseTarget.strength = SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(baseTarget.strength * 100.0f), 0, 100, 0) * 0.01f;

            baseTarget.noiseAmount = SpriteColorFXEditorHelper.SliderWithReset(@"Noise amount", SpriteColorFXEditorHelper.TooltipNoiseAmount, baseTarget.noiseAmount * 100.0f, 0.0f, 100.0f, 0.0f) * 0.01f;

            baseTarget.noiseSpeed = SpriteColorFXEditorHelper.SliderWithReset(@"Noise speed", SpriteColorFXEditorHelper.TooltipNoiseSpeed, baseTarget.noiseSpeed * 100.0f, 0.0f, 100.0f, 0.0f) * 0.01f;
        }
Example #8
0
        /// <summary>
        /// A slider with a reset button.
        /// </summary>
        public static int IntSliderWithReset(string label, string tooltip, int value, int minValue, int maxValue, int defaultValue)
        {
            EditorGUILayout.BeginHorizontal();
            {
                value = EditorGUILayout.IntSlider(new GUIContent(label, tooltip), value, minValue, maxValue);

                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, string.Format("Reset to '{0}'", defaultValue), @"Icons/ic_cached") == true)
                {
                    value = defaultValue;
                }
            }
            EditorGUILayout.EndHorizontal();

            return(value);
        }
Example #9
0
        /// <summary>
        /// A slider with a reset button.
        /// </summary>
        public static void MinMaxSliderWithReset(string label, string tooltip, ref float min, ref float max, float minLimit, float maxLimit, float defaultMinValue, float defaultMaxValue)
        {
            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.MinMaxSlider(new GUIContent(label, tooltip), ref min, ref max, minLimit, maxLimit);

                EditorGUILayout.LabelField(string.Format("{0:0.00}-{1:0.00}", min, max), GUI.skin.textField, GUILayout.Width(60.0f));

                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, string.Format("Reset to ({0}..{1}).", defaultMinValue, defaultMaxValue), @"Icons/ic_cached") == true)
                {
                    min = defaultMinValue;
                    max = defaultMaxValue;
                }
            }
            EditorGUILayout.EndHorizontal();
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (baseTarget == null)
            {
                baseTarget = base.target as SpriteColorBlend;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            baseTarget.strength = (float)SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(baseTarget.strength * 100.0f), 0, 100, 100) * 0.01f;

            SpriteColorHelper.PixelOp newPixelOp = (SpriteColorHelper.PixelOp)EditorGUILayout.EnumPopup(new GUIContent(@"Blend mode", @"Blend modes"), baseTarget.pixelOp);
            if (newPixelOp != baseTarget.pixelOp)
            {
                baseTarget.SetPixelOp(newPixelOp);
            }
        }
Example #11
0
        /// <summary>
        /// Vector2 field with reset button.
        /// </summary>
        public static Color ColorWithReset(string label, string tooltip, Color value, Color defaultValue)
        {
            EditorGUILayout.BeginHorizontal();
            {
                EditorGUILayout.LabelField(new GUIContent(label, tooltip));

                value = EditorGUILayout.ColorField(value);

                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, string.Format("Reset to '{0}'", defaultValue), @"Icons/ic_cached") == true)
                {
                    value = defaultValue;
                }
            }
            EditorGUILayout.EndHorizontal();

            return(value);
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (effect == null)
            {
                effect = this.target as SpriteColorInstagram;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            effect.Filter = (SpriteColorInstagram.Filters)EditorGUILayout.EnumPopup(@"Filter", effect.Filter);

            effect.strength = SpriteColorFXEditorHelper.SliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, effect.strength * 100.0f, 0.0f, 100.0f, 0.0f) * 0.01f;

            effect.contrast = SpriteColorFXEditorHelper.SliderWithReset(@"Contrast", @"Contrast [0.0 - 10.0]", effect.contrast, 0.0f, 10.0f, 1.0f);

            effect.gamma = SpriteColorFXEditorHelper.SliderWithReset(@"Gamma", @"Gamma [0.001 - 10.0]", effect.gamma, 0.001f, 10.0f, 1.0f);

            effect.filmContrast = EditorGUILayout.Toggle(@"Film contrast", effect.filmContrast);
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (baseTarget == null)
            {
                baseTarget = this.target as SpriteColorShiftLinear;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            baseTarget.redShift = SpriteColorFXEditorHelper.Vector2WithReset(@"Red offset", SpriteColorFXEditorHelper.TooltipRedOffset, baseTarget.redShift, Vector2.zero);

            baseTarget.greenShift = SpriteColorFXEditorHelper.Vector2WithReset(@"Green offset", SpriteColorFXEditorHelper.TooltipGreenOffset, baseTarget.greenShift, Vector2.zero);

            baseTarget.blueShift = SpriteColorFXEditorHelper.Vector2WithReset(@"Blue offset", SpriteColorFXEditorHelper.TooltipBlueOffset, baseTarget.blueShift, Vector2.zero);

            baseTarget.noiseAmount = SpriteColorFXEditorHelper.SliderWithReset(@"Noise amount", SpriteColorFXEditorHelper.TooltipNoiseAmount, baseTarget.noiseAmount * 100.0f, 0.0f, 100.0f, 0.0f) * 0.01f;

            baseTarget.noiseSpeed = SpriteColorFXEditorHelper.SliderWithReset(@"Noise speed", SpriteColorFXEditorHelper.TooltipNoiseSpeed, baseTarget.noiseSpeed * 100.0f, 0.0f, 100.0f, 0.0f) * 0.01f;
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (effect == null)
            {
                effect = this.target as SpriteColorRamp;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            effect.palette = (SpriteColorRampPalettes)EditorGUILayout.EnumPopup(@"Palette", effect.palette);

            effect.strength = SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(effect.strength * 100.0f), 0, 100, 100) * 0.01f;

            effect.gammaCorrect = SpriteColorFXEditorHelper.SliderWithReset(@"Gamma", SpriteColorFXEditorHelper.TooltipGamma, effect.gammaCorrect, 0.5f, 3.0f, 1.2f);

            effect.uvScroll = SpriteColorFXEditorHelper.SliderWithReset(@"UV Scroll", SpriteColorFXEditorHelper.TooltipUVScroll, effect.uvScroll, 0.0f, 1.0f, 0.0f);

            EditorGUIUtility.fieldWidth = 60.0f;

            SpriteColorFXEditorHelper.MinMaxSliderWithReset(@"Luminance range", SpriteColorFXEditorHelper.TooltipLuminanceRange, ref effect.luminanceRangeMin, ref effect.luminanceRangeMax, 0.0f, 1.0f, 0.0f, 1.0f);

            effect.invertLum = SpriteColorFXEditorHelper.ToogleWithReset(@"Invert luminance", SpriteColorFXEditorHelper.TooltipInvertLuminance, effect.invertLum, false);
        }
Example #15
0
        private void OnGUI()
        {
            EditorGUIUtility.LookLikeControls();

            EditorGUILayout.BeginVertical();
            {
                EditorGUIUtility.LookLikeControls(24.0f, 50.0f);

                // Colors
                EditorGUILayout.BeginVertical(GUI.skin.box);
                {
                    if (presets.Count > 0)
                    {
                        scroll = EditorGUILayout.BeginScrollView(scroll, GUI.skin.box);

                        int presetToDelete = -1;
                        int moveUp         = -1;
                        int moveDown       = -1;
                        int insertUp       = -1;

                        for (int i = 0; i < presets.Count; ++i)
                        {
                            GUI.backgroundColor = (i % 2 == 0) ? Color.white * 0.1f : Color.white * 0.2f;

                            EditorGUILayout.BeginHorizontal(SpriteColorFXEditorHelper.StyleScrollRow);
                            {
                                GUI.backgroundColor = Color.white;

                                EditorGUILayout.LabelField((i + 1).ToString("0000"), GUILayout.Width(32.0f));

                                EditorGUILayout.Space();

                                string newName = EditorGUILayout.TextField(presets[i].name, GUILayout.MinWidth(128.0f));
                                if (newName != presets[i].name)
                                {
                                    presets[i].name = newName;

                                    assetChanged = true;
                                }

                                EditorGUILayout.Space();

                                for (int j = 0; j < presets[i].colors.Length; ++j)
                                {
                                    Color newColor = EditorGUILayout.ColorField("#" + (j + 1), presets[i].colors[j]);
                                    if (newColor != presets[i].colors[j])
                                    {
                                        presets[i].colors[j] = newColor;

                                        assetChanged = true;
                                    }

                                    GUILayout.Space(5.0f);
                                }

                                EditorGUILayout.Space();

                                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, SpriteColorFXEditorHelper.TooltipInsertPallete, @"Icons/ic_playlist_add") == true)
                                {
                                    insertUp = i;
                                }

                                EditorGUILayout.Space();

                                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, SpriteColorFXEditorHelper.TooltipMoveUp, @"Icons/ic_keyboard_arrow_up") == true)
                                {
                                    moveUp = i;
                                }

                                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, SpriteColorFXEditorHelper.TooltipMoveDown, @"Icons/ic_keyboard_arrow_down") == true)
                                {
                                    moveDown = i;
                                }

                                EditorGUILayout.Space();

                                if (SpriteColorFXEditorHelper.ButtonImage(string.Empty, SpriteColorFXEditorHelper.TooltipRemove, @"Icons/ic_clear") == true)
                                {
                                    presetToDelete = i;
                                }
                            }
                            EditorGUILayout.EndHorizontal();
                        }

                        if (presetToDelete != -1)
                        {
                            assetChanged = true;

                            presets.RemoveAt(presetToDelete);
                        }

                        if (insertUp != -1)
                        {
                            assetChanged = true;

                            presets.Insert(insertUp, new SpriteColorRampPreset.ColorPreset());
                        }

                        if (moveUp > 0)
                        {
                            assetChanged = true;

                            SpriteColorRampPreset.ColorPreset colorPreset = presets[moveUp];

                            presets.RemoveAt(moveUp);
                            presets.Insert(moveUp - 1, colorPreset);
                        }

                        if (moveDown != -1 && moveDown < (presets.Count - 1))
                        {
                            assetChanged = true;

                            SpriteColorRampPreset.ColorPreset colorPreset = presets[moveDown];

                            presets.RemoveAt(moveDown);
                            presets.Insert(moveDown + 1, colorPreset);
                        }

                        EditorGUILayout.EndScrollView();
                    }

                    GUILayout.FlexibleSpace();

                    EditorGUILayout.BeginHorizontal();
                    {
                        if (string.IsNullOrEmpty(assetFile) == true)
                        {
                            EditorGUILayout.Space();
                        }
                        else
                        {
                            if (assetChanged == true)
                            {
                                EditorGUILayout.LabelField(string.Format("*'{0}'*", assetFile));
                            }
                            else
                            {
                                GUI.enabled = false;

                                EditorGUILayout.LabelField(string.Format("'{0}'", assetFile));

                                GUI.enabled = true;
                            }
                        }

/* Planned for upcoming updates.
 *          if (GUILayout.Button("Adobe Color CC") == true)
 *            AddPaletteFromAdobeColorCC();
 */

/* Planned for upcoming updates.
 *          if (GUILayout.Button("COLOURlovers") == true)
 *            AddPaletteFromCOLOURlovers();
 */

/* Planned for upcoming updates.
 *          if (GUILayout.Button("Add pallete from image") == true)
 *            AddPaletteFromImage();
 */
                        if (GUILayout.Button(@"Add pallete", GUILayout.Width(75.0f)) == true)
                        {
                            presets.Add(new SpriteColorRampPreset.ColorPreset());

                            assetChanged = true;
                        }

                        if (GUILayout.Button(@"Clear all", GUILayout.Width(75.0f)) == true && presets.Count > 0)
                        {
                            if (EditorUtility.DisplayDialog(@"Clear all palletes.", @"Delete all palettes?", @"Ok", @"Cancel") == true)
                            {
                                presets.Clear();

                                assetChanged = true;
                            }
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
                EditorGUILayout.EndVertical();

                EditorGUIUtility.LookLikeControls(128.0f, 50.0f);

                // Buttons
                EditorGUILayout.BeginHorizontal(GUI.skin.box);
                {
                    EditorGUILayout.BeginVertical();
                    {
                        bool option = EditorGUILayout.Toggle(new GUIContent(@"Interpolate colors", SpriteColorFXEditorHelper.TooltipInterpolateColors), interpolateColors);
                        if (option != interpolateColors)
                        {
                            interpolateColors = option;

                            assetChanged = true;
                        }

                        option = EditorGUILayout.Toggle(new GUIContent(@"Sort by luminance", SpriteColorFXEditorHelper.TooltipSortByLuminance), sortColorsByLuminance);
                        if (option != sortColorsByLuminance)
                        {
                            sortColorsByLuminance = option;

                            assetChanged = true;
                        }
                    }
                    EditorGUILayout.EndVertical();

                    GUILayout.FlexibleSpace();

                    EditorGUILayout.BeginVertical();
                    {
                        if (GUILayout.Button("Load", GUILayout.Width(75.0f)) == true)
                        {
                            string filePath = EditorUtility.OpenFilePanel(@"Load asset", Application.dataPath + "/" + Path.GetDirectoryName(assetFile), "asset");
                            if (string.IsNullOrEmpty(filePath) == false)
                            {
                                LoadAsset(filePath);
                            }
                        }

                        if (GUILayout.Button("Save", GUILayout.Width(75.0f)) == true)
                        {
                            string filePath = EditorUtility.SaveFilePanel(@"Save asset", Application.dataPath + "/" + Path.GetDirectoryName(assetFile), Path.GetFileNameWithoutExtension(assetFile), "asset");
                            if (string.IsNullOrEmpty(filePath) == false)
                            {
                                SaveAsset(filePath);
                            }
                        }
                    }
                    EditorGUILayout.EndVertical();

                    EditorGUILayout.BeginHorizontal();
                    {
                        if (GUILayout.Button(new GUIContent(@"Apply", SpriteColorFXEditorHelper.TooltipApply), GUILayout.ExpandHeight(true), GUILayout.Width(75.0f)) == true)
                        {
                            Process();
                        }
                    }
                    EditorGUILayout.EndHorizontal();
                }
                EditorGUILayout.EndHorizontal();
            }
            EditorGUILayout.EndVertical();
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (effect == null)
            {
                effect = this.target as SpriteColorOutline;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            effect.Mode = (SpriteColorOutline.OutlineMode)EditorGUILayout.EnumPopup(new GUIContent(@"Mode", @"Outline mode"), effect.Mode);

            effect.GrowthMode = (SpriteColorOutline.OutlineGrowthMode)EditorGUILayout.EnumPopup(new GUIContent(@"Growth mode", @"outline growth mode"), effect.GrowthMode);

            if (effect.GrowthMode == SpriteColorOutline.OutlineGrowthMode.Proportional)
            {
                effect.outlineSize = SpriteColorFXEditorHelper.SliderWithReset(@"Size (%)", @"Outline width", effect.outlineSize * (100.0f / 0.03f), 0.0f, 100.0f, 25.0f) * (0.03f / 100.0f);
            }
            else
            {
                effect.outlineSize = (int)SpriteColorFXEditorHelper.SliderWithReset(@"Size (px)", @"Outline width", effect.outlineSize, 0.0f, 50.0f, 5.0f);
            }

            if (effect.Mode == SpriteColorOutline.OutlineMode.Normal)
            {
                effect.outlineColor = EditorGUILayout.ColorField(@"Color", effect.outlineColor);
            }
            else if (effect.Mode == SpriteColorOutline.OutlineMode.Gradient)
            {
                effect.Direction = (SpriteColorOutline.GradientDirection)EditorGUILayout.EnumPopup(new GUIContent(@"Direction", @"Gradient direction"), effect.Direction);

                effect.outlineColor = EditorGUILayout.ColorField(@"Color #1", effect.outlineColor);

                effect.outlineColor2 = EditorGUILayout.ColorField(@"Color #2", effect.outlineColor2);

                effect.gradientScale = SpriteColorFXEditorHelper.SliderWithReset(@"Scale", @"Gradient scale", effect.gradientScale, -10.0f, 10.0f, 1.0f);

                effect.gradientOffset = SpriteColorFXEditorHelper.SliderWithReset(@"Offset", @"Gradient offset", effect.gradientOffset, 0.0f, 5.0f, 0.0f);
            }
            else
            {
                effect.outlineColor = EditorGUILayout.ColorField(@"Color", effect.outlineColor);

                effect.outlineTexture = EditorGUILayout.ObjectField(@"Outline texture", effect.outlineTexture, typeof(Texture), false) as Texture;

                effect.outlineTextureUVParams.x = SpriteColorFXEditorHelper.SliderWithReset(@"U coord scale", @"U texture coordinate scale", effect.outlineTextureUVParams.x, -5.0f, 5.0f, 1.0f);
                effect.outlineTextureUVParams.y = SpriteColorFXEditorHelper.SliderWithReset(@"V coord scale", @"V texture coordinate scale", effect.outlineTextureUVParams.y, -5.0f, 5.0f, 1.0f);
                effect.outlineTextureUVParams.z = SpriteColorFXEditorHelper.SliderWithReset(@"U coord vel", @"U texture coordinate velocity", effect.outlineTextureUVParams.z, -2.0f, 2.0f, 0.0f);
                effect.outlineTextureUVParams.w = SpriteColorFXEditorHelper.SliderWithReset(@"V coord vel", @"V texture coordinate velocity", effect.outlineTextureUVParams.w, -2.0f, 2.0f, 0.0f);
                effect.outlineTextureUVAngle    = SpriteColorFXEditorHelper.SliderWithReset(@"UV angle", @"UV rotation angle", effect.outlineTextureUVAngle, 0.0f, 360.0f, 0.0f);
            }

            bool foldout = EditorGUILayout.Foldout(advancedSettingsFoldout, @"Advanced settings");

            if (foldout != advancedSettingsFoldout)
            {
                advancedSettingsFoldout = foldout;

                PlayerPrefs.SetInt(@"SpriteColorFX.advancedSettingsFoldout", advancedSettingsFoldout == true ? 1 : 0);
            }

            if (advancedSettingsFoldout == true)
            {
                EditorGUI.indentLevel++;

                effect.alphaThreshold = SpriteColorFXEditorHelper.SliderWithReset(@"Alpha Threshold", @"Alpha Threshold", effect.alphaThreshold, 0.0f, 1.0f, 0.1f);

                bool enableOverlap = EditorGUILayout.Toggle(@"Overlap", effect.overlap);
                if (enableOverlap != effect.overlap)
                {
                    effect.SetOverlap(enableOverlap);
                }

                Texture customMask = EditorGUILayout.ObjectField(@"Custom mask", effect.customMask, typeof(Texture), false) as Texture;
                if (customMask != effect.customMask)
                {
                    effect.SetCustomMask(customMask);
                }

                EditorGUI.indentLevel--;
            }
        }
        /// <summary>
        /// Inspector.
        /// </summary>
        protected override void Inspector()
        {
            if (baseTarget == null)
            {
                baseTarget = base.target as SpriteColorMasks3;
            }

            EditorGUIUtility.fieldWidth = 40.0f;

            baseTarget.strength = (float)SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(baseTarget.strength * 100.0f), 0, 100, 100) * 0.01f;

            SpriteColorHelper.PixelOp newPixelOp = (SpriteColorHelper.PixelOp)EditorGUILayout.EnumPopup(new GUIContent(@"Blend mode", @"Blend modes"), baseTarget.pixelOp);
            if (newPixelOp != baseTarget.pixelOp)
            {
                baseTarget.SetPixelOp(newPixelOp);
            }

            EditorGUILayout.LabelField(@"#1 mask (red)");
            {
                EditorGUI.indentLevel++;

                baseTarget.strengthMaskRed = (float)SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(baseTarget.strengthMaskRed * 100f), 0, 100, 100) * 0.01f;

                baseTarget.colorMaskRed = EditorGUILayout.ColorField(@"Color", baseTarget.colorMaskRed);

                baseTarget.textureMaskRed = (EditorGUILayout.ObjectField(new GUIContent(@"Texture (RGB)", SpriteColorFXEditorHelper.TooltipTextureMask), baseTarget.textureMaskRed, typeof(Texture2D), false, GUILayout.Height(54.0f)) as Texture2D);
                if (baseTarget.textureMaskRed != null)
                {
                    EditorGUILayout.LabelField(@"UV params");

                    UVParamsInspectorGUI(ref baseTarget.textureMaskRedUVParams, ref baseTarget.textureMaskRedUVAngle);
                }

                EditorGUI.indentLevel--;
            }

            EditorGUILayout.LabelField(@"#2 mask (green)");
            {
                EditorGUI.indentLevel++;

                baseTarget.strengthMaskGreen = (float)SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(baseTarget.strengthMaskGreen * 100f), 0, 100, 100) * 0.01f;

                baseTarget.colorMaskGreen = EditorGUILayout.ColorField(@"Color", baseTarget.colorMaskGreen);

                baseTarget.textureMaskGreen = (EditorGUILayout.ObjectField(new GUIContent(@"Texture (RGB)", SpriteColorFXEditorHelper.TooltipTextureMask), baseTarget.textureMaskGreen, typeof(Texture2D), false, GUILayout.Height(54.0f)) as Texture2D);
                if (baseTarget.textureMaskGreen != null)
                {
                    EditorGUILayout.LabelField(@"UV params");

                    UVParamsInspectorGUI(ref baseTarget.textureMaskGreenUVParams, ref baseTarget.textureMaskGreenUVAngle);
                }

                EditorGUI.indentLevel--;
            }

            EditorGUILayout.LabelField(@"#3 mask (blue)");
            {
                EditorGUI.indentLevel++;

                baseTarget.strengthMaskBlue = (float)SpriteColorFXEditorHelper.IntSliderWithReset(@"Strength", SpriteColorFXEditorHelper.TooltipStrength, Mathf.RoundToInt(baseTarget.strengthMaskBlue * 100f), 0, 100, 100) * 0.01f;

                baseTarget.colorMaskBlue = EditorGUILayout.ColorField(@"Color", baseTarget.colorMaskBlue);

                baseTarget.textureMaskBlue = (EditorGUILayout.ObjectField(new GUIContent(@"Texture (RGB)", SpriteColorFXEditorHelper.TooltipTextureMask), baseTarget.textureMaskBlue, typeof(Texture2D), false, GUILayout.Height(54.0f)) as Texture2D);
                if (baseTarget.textureMaskBlue != null)
                {
                    EditorGUILayout.LabelField(@"UV params");

                    UVParamsInspectorGUI(ref baseTarget.textureMaskBlueUVParams, ref baseTarget.textureMaskBlueUVAngle);
                }

                EditorGUI.indentLevel--;
            }

            EditorGUILayout.Separator();

            baseTarget.textureMask = (EditorGUILayout.ObjectField(new GUIContent(@"Mask #1 (RGB)", SpriteColorFXEditorHelper.TooltipTextureMask), this.baseTarget.textureMask, typeof(Texture2D), false, GUILayout.Height(54.0f)) as Texture2D);
        }
        /// <summary>
        /// OnInspectorGUI.
        /// </summary>
        public override void OnInspectorGUI()
        {
            if (baseTarget == null)
            {
                baseTarget = this.target as SpriteColorBase;
            }

            EditorGUIUtility.LookLikeControls();

            EditorGUI.indentLevel = 0;

            EditorGUIUtility.labelWidth = 125.0f;

            EditorGUILayout.BeginVertical();
            {
                EditorGUILayout.Separator();

                /////////////////////////////////////////////////
                // Lit.
                /////////////////////////////////////////////////

                baseTarget.LightMode = (LightMode)EditorGUILayout.EnumPopup(@"Lighting mode", baseTarget.LightMode);
                if (baseTarget.LightMode == LightMode.BumpLit)
                {
                    EditorGUI.indentLevel++;

                    baseTarget.shininess = SpriteColorFXEditorHelper.SliderWithReset(@"Shininess", @"", baseTarget.shininess, 0.03f, 1.0f, 0.078125f);

                    baseTarget.specularColor = EditorGUILayout.ColorField(@"Specular color", baseTarget.specularColor);

                    baseTarget.normalTex = EditorGUILayout.ObjectField(@"Bump texture", baseTarget.normalTex, typeof(Texture), false) as Texture;

                    baseTarget.bumpIntensity = SpriteColorFXEditorHelper.SliderWithReset(@"Bump intensity", @"", baseTarget.bumpIntensity, 0.0f, 5.0f, 1.0f);

                    bumpFactorFoldout = EditorGUILayout.Foldout(bumpFactorFoldout, @"Invert channels");
                    if (bumpFactorFoldout == true)
                    {
                        EditorGUI.indentLevel++;

                        baseTarget.invertRedNormalChannel = EditorGUILayout.Toggle(@"Red", baseTarget.invertRedNormalChannel);

                        baseTarget.invertGreenNormalChannel = EditorGUILayout.Toggle(@"Green", baseTarget.invertGreenNormalChannel);

                        EditorGUI.indentLevel--;
                    }

                    EditorGUI.indentLevel--;

                    EditorGUILayout.Separator();
                }

                /////////////////////////////////////////////////
                // Common.
                /////////////////////////////////////////////////

                Inspector();

                EditorGUILayout.Separator();

                /////////////////////////////////////////////////
                // Misc.
                /////////////////////////////////////////////////

                EditorGUILayout.BeginHorizontal();
                {
                    if (GUILayout.Button(new GUIContent("[web]", "Open website"), GUI.skin.label) == true)
                    {
                        Application.OpenURL(SpriteColorFXEditorHelper.DocumentationURL);
                    }

                    GUILayout.FlexibleSpace();

                    if (GUILayout.Button("Reset ALL") == true)
                    {
                        ResetDefaultValues();
                    }
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.Separator();

                if (string.IsNullOrEmpty(Warnings) == false)
                {
                    EditorGUILayout.HelpBox(Warnings, MessageType.Warning);

                    EditorGUILayout.Separator();
                }

                if (string.IsNullOrEmpty(Errors) == false)
                {
                    EditorGUILayout.HelpBox(Errors, MessageType.Error);

                    EditorGUILayout.Separator();
                }

                if (string.IsNullOrEmpty(Help) == false)
                {
                    EditorGUILayout.HelpBox(Help, MessageType.Info);
                }
            }
            EditorGUILayout.EndVertical();

            Warnings = Errors = string.Empty;

            if (GUI.changed == true)
            {
                EditorUtility.SetDirty(target);
            }

            EditorGUIUtility.LookLikeControls();

            EditorGUI.indentLevel = 0;

            EditorGUIUtility.labelWidth = 125.0f;
        }