summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Editor
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-04-07 21:33:14 +0800
committerchai <chaifix@163.com>2021-04-07 21:33:14 +0800
commitc47b92e92cf33ae8bf2f38929e137294397e4735 (patch)
treec67ae3419eaf15e84f1679186e107f598de33978 /Assets/Scripts/Editor
Diffstat (limited to 'Assets/Scripts/Editor')
-rw-r--r--Assets/Scripts/Editor/ImportSampleMenu.cs75
-rw-r--r--Assets/Scripts/Editor/ImportSampleMenu.cs.meta11
-rw-r--r--Assets/Scripts/Editor/MaterialDirtyScope.cs33
-rw-r--r--Assets/Scripts/Editor/MaterialDirtyScope.cs.meta11
-rw-r--r--Assets/Scripts/Editor/UIDissolveEditor.cs121
-rw-r--r--Assets/Scripts/Editor/UIDissolveEditor.cs.meta12
-rw-r--r--Assets/Scripts/Editor/UIEffect-Editor.asmdef16
-rw-r--r--Assets/Scripts/Editor/UIEffect-Editor.asmdef.meta7
-rw-r--r--Assets/Scripts/Editor/UIEffectEditor.cs114
-rw-r--r--Assets/Scripts/Editor/UIEffectEditor.cs.meta12
-rw-r--r--Assets/Scripts/Editor/UIGradientEditor.cs140
-rw-r--r--Assets/Scripts/Editor/UIGradientEditor.cs.meta12
-rw-r--r--Assets/Scripts/Editor/UIHsvModifierEditor.cs53
-rw-r--r--Assets/Scripts/Editor/UIHsvModifierEditor.cs.meta12
-rw-r--r--Assets/Scripts/Editor/UIShadowEditor.cs62
-rw-r--r--Assets/Scripts/Editor/UIShadowEditor.cs.meta12
-rw-r--r--Assets/Scripts/Editor/UIShinyEditor.cs102
-rw-r--r--Assets/Scripts/Editor/UIShinyEditor.cs.meta12
-rw-r--r--Assets/Scripts/Editor/UITransitionEffectEditor.cs115
-rw-r--r--Assets/Scripts/Editor/UITransitionEffectEditor.cs.meta12
20 files changed, 944 insertions, 0 deletions
diff --git a/Assets/Scripts/Editor/ImportSampleMenu.cs b/Assets/Scripts/Editor/ImportSampleMenu.cs
new file mode 100644
index 0000000..c53fc9b
--- /dev/null
+++ b/Assets/Scripts/Editor/ImportSampleMenu.cs
@@ -0,0 +1,75 @@
+#if !UNITY_2019_1_OR_NEWER
+using System.IO;
+using System.Linq;
+using System.Text.RegularExpressions;
+using UnityEditor;
+
+namespace Coffee.UIEffects
+{
+ public static class ImportSampleMenu
+ {
+ private const string jsonGuid = "546af75b6221c4768be79d67c9cea1fb";
+
+ [MenuItem("Assets/Samples/UIEffect/Import Demo")]
+ private static void ImportDemo()
+ {
+ ImportSample(jsonGuid, "Demo");
+ }
+
+ private static void ImportSample(string jsonGuid, string sampleName)
+ {
+ var jsonPath = AssetDatabase.GUIDToAssetPath(jsonGuid);
+ var json = File.ReadAllText(jsonPath);
+ var version = Regex.Match(json, "\"version\"\\s*:\\s*\"([^\"]+)\"").Groups[1].Value;
+ var displayName = Regex.Match(json, "\"displayName\"\\s*:\\s*\"([^\"]+)\"").Groups[1].Value;
+ var src = string.Format("{0}/Samples~/{1}", Path.GetDirectoryName(jsonPath), sampleName);
+ var srcAlt = string.Format("{0}/Samples/{1}", Path.GetDirectoryName(jsonPath), sampleName);
+ var dst = string.Format("Assets/Samples/{0}/{1}/{2}", displayName, version, sampleName);
+ var previousPath = GetPreviousSamplePath(displayName, sampleName);
+
+ // Remove the previous sample directory.
+ if (!string.IsNullOrEmpty(previousPath))
+ {
+ var msg = "A different version of the sample is already imported at\n\n"
+ + previousPath
+ + "\n\nIt will be deleted when you update. Are you sure you want to continue?";
+ if (!EditorUtility.DisplayDialog("Sample Importer", msg, "OK", "Cancel"))
+ return;
+
+ FileUtil.DeleteFileOrDirectory(previousPath);
+
+ var metaFile = previousPath + ".meta";
+ if (File.Exists(metaFile))
+ FileUtil.DeleteFileOrDirectory(metaFile);
+ }
+
+ if (!Directory.Exists(dst))
+ FileUtil.DeleteFileOrDirectory(dst);
+
+ var dstDir = Path.GetDirectoryName(dst);
+ if (!Directory.Exists(dstDir))
+ Directory.CreateDirectory(dstDir);
+
+ if (Directory.Exists(src))
+ FileUtil.CopyFileOrDirectory(src, dst);
+ else if (Directory.Exists(srcAlt))
+ FileUtil.CopyFileOrDirectory(srcAlt, dst);
+ else
+ throw new DirectoryNotFoundException(src);
+
+ AssetDatabase.Refresh(ImportAssetOptions.ImportRecursive);
+ }
+
+ private static string GetPreviousSamplePath(string displayName, string sampleName)
+ {
+ var sampleRoot = string.Format("Assets/Samples/{0}", displayName);
+ var sampleRootInfo = new DirectoryInfo(sampleRoot);
+ if (!sampleRootInfo.Exists) return null;
+
+ return sampleRootInfo.GetDirectories()
+ .Select(versionDir => Path.Combine(versionDir.ToString(), sampleName))
+ .FirstOrDefault(Directory.Exists);
+ }
+ }
+}
+#endif
diff --git a/Assets/Scripts/Editor/ImportSampleMenu.cs.meta b/Assets/Scripts/Editor/ImportSampleMenu.cs.meta
new file mode 100644
index 0000000..5057915
--- /dev/null
+++ b/Assets/Scripts/Editor/ImportSampleMenu.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f1d002a431e7c4b1ca5db78469cb0d1c
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/MaterialDirtyScope.cs b/Assets/Scripts/Editor/MaterialDirtyScope.cs
new file mode 100644
index 0000000..435e66e
--- /dev/null
+++ b/Assets/Scripts/Editor/MaterialDirtyScope.cs
@@ -0,0 +1,33 @@
+using System.Linq;
+using UnityEditor;
+using UnityEngine;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// Changes in this scope cause the graphic's material to be dirty.
+ /// When you change a property, it marks the material as dirty.
+ /// </summary>
+ internal class MaterialDirtyScope : EditorGUI.ChangeCheckScope
+ {
+ readonly Object[] targets;
+
+ public MaterialDirtyScope(Object[] targets)
+ {
+ this.targets = targets;
+ }
+
+ protected override void CloseScope()
+ {
+ if (changed)
+ {
+ foreach (var effect in targets.OfType<BaseMaterialEffect>())
+ {
+ effect.SetMaterialDirty();
+ }
+ }
+
+ base.CloseScope();
+ }
+ }
+}
diff --git a/Assets/Scripts/Editor/MaterialDirtyScope.cs.meta b/Assets/Scripts/Editor/MaterialDirtyScope.cs.meta
new file mode 100644
index 0000000..c0c5053
--- /dev/null
+++ b/Assets/Scripts/Editor/MaterialDirtyScope.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 16857cac7da564347876420ef55a734a
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIDissolveEditor.cs b/Assets/Scripts/Editor/UIDissolveEditor.cs
new file mode 100644
index 0000000..29c2782
--- /dev/null
+++ b/Assets/Scripts/Editor/UIDissolveEditor.cs
@@ -0,0 +1,121 @@
+using UnityEditor;
+using UnityEditorInternal;
+using UnityEngine;
+using System.Linq;
+using System.Collections.Generic;
+using UnityEngine.UI;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIEffect editor.
+ /// </summary>
+ [CustomEditor(typeof(UIDissolve))]
+ [CanEditMultipleObjects]
+ public class UIDissolveEditor : Editor
+ {
+ SerializedProperty _spEffectFactor;
+ SerializedProperty _spWidth;
+ SerializedProperty _spColor;
+ SerializedProperty _spSoftness;
+ SerializedProperty _spColorMode;
+ SerializedProperty _spTransitionTexture;
+ SerializedProperty _spEffectArea;
+ SerializedProperty _spKeepAspectRatio;
+ SerializedProperty _spReverse;
+ SerializedProperty _spPlay;
+ SerializedProperty _spLoop;
+ SerializedProperty _spLoopDelay;
+ SerializedProperty _spDuration;
+ SerializedProperty _spInitialPlayDelay;
+ SerializedProperty _spUpdateMode;
+
+ //################################
+ // Public/Protected Members.
+ //################################
+ /// <summary>
+ /// This function is called when the object becomes enabled and active.
+ /// </summary>
+ protected void OnEnable()
+ {
+ _spEffectFactor = serializedObject.FindProperty("m_EffectFactor");
+ _spEffectArea = serializedObject.FindProperty("m_EffectArea");
+ _spKeepAspectRatio = serializedObject.FindProperty("m_KeepAspectRatio");
+ _spWidth = serializedObject.FindProperty("m_Width");
+ _spColor = serializedObject.FindProperty("m_Color");
+ _spSoftness = serializedObject.FindProperty("m_Softness");
+ _spColorMode = serializedObject.FindProperty("m_ColorMode");
+ _spTransitionTexture = serializedObject.FindProperty("m_TransitionTexture");
+ _spKeepAspectRatio = serializedObject.FindProperty("m_KeepAspectRatio");
+ _spReverse = serializedObject.FindProperty("m_Reverse");
+ var player = serializedObject.FindProperty("m_Player");
+ _spPlay = player.FindPropertyRelative("play");
+ _spDuration = player.FindPropertyRelative("duration");
+ _spInitialPlayDelay = player.FindPropertyRelative("initialPlayDelay");
+ _spLoop = player.FindPropertyRelative("loop");
+ _spLoopDelay = player.FindPropertyRelative("loopDelay");
+ _spUpdateMode = player.FindPropertyRelative("updateMode");
+ }
+
+ /// <summary>
+ /// Implement this function to make a custom inspector.
+ /// </summary>
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ //================
+ // Effect setting.
+ //================
+ EditorGUILayout.PropertyField(_spEffectFactor);
+ EditorGUILayout.PropertyField(_spWidth);
+ EditorGUILayout.PropertyField(_spSoftness);
+ EditorGUILayout.PropertyField(_spColor);
+
+ using (new MaterialDirtyScope(targets))
+ {
+ EditorGUILayout.PropertyField(_spColorMode);
+ EditorGUILayout.PropertyField(_spTransitionTexture);
+ }
+
+
+ //================
+ // Advanced option.
+ //================
+ EditorGUILayout.PropertyField(_spEffectArea);
+ EditorGUILayout.PropertyField(_spKeepAspectRatio);
+
+
+ //================
+ // Effect player.
+ //================
+ EditorGUILayout.PropertyField(_spPlay);
+ EditorGUILayout.PropertyField(_spDuration);
+ EditorGUILayout.PropertyField(_spInitialPlayDelay);
+ EditorGUILayout.PropertyField(_spLoop);
+ EditorGUILayout.PropertyField(_spLoopDelay);
+ EditorGUILayout.PropertyField(_spUpdateMode);
+ EditorGUILayout.PropertyField(_spReverse);
+
+
+ // Debug.
+ using (new EditorGUI.DisabledGroupScope(!Application.isPlaying))
+ using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox))
+ {
+ GUILayout.Label("Debug");
+
+ if (GUILayout.Button("Play", "ButtonLeft"))
+ {
+ (target as UIDissolve).Play();
+ }
+
+ if (GUILayout.Button("Stop", "ButtonRight"))
+ {
+ (target as UIDissolve).Stop();
+ }
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+} \ No newline at end of file
diff --git a/Assets/Scripts/Editor/UIDissolveEditor.cs.meta b/Assets/Scripts/Editor/UIDissolveEditor.cs.meta
new file mode 100644
index 0000000..edf071c
--- /dev/null
+++ b/Assets/Scripts/Editor/UIDissolveEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f7f7349a5d61649b69946853317db047
+timeCreated: 1538806040
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIEffect-Editor.asmdef b/Assets/Scripts/Editor/UIEffect-Editor.asmdef
new file mode 100644
index 0000000..56826a0
--- /dev/null
+++ b/Assets/Scripts/Editor/UIEffect-Editor.asmdef
@@ -0,0 +1,16 @@
+{
+ "name": "UIEffect-Editor",
+ "references": [
+ "UIEffect"
+ ],
+ "optionalUnityReferences": [],
+ "includePlatforms": [
+ "Editor"
+ ],
+ "excludePlatforms": [],
+ "allowUnsafeCode": false,
+ "overrideReferences": false,
+ "precompiledReferences": [],
+ "autoReferenced": false,
+ "defineConstraints": []
+} \ No newline at end of file
diff --git a/Assets/Scripts/Editor/UIEffect-Editor.asmdef.meta b/Assets/Scripts/Editor/UIEffect-Editor.asmdef.meta
new file mode 100644
index 0000000..a459a69
--- /dev/null
+++ b/Assets/Scripts/Editor/UIEffect-Editor.asmdef.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 4a03bd468489b4da08c028255886b30d
+AssemblyDefinitionImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIEffectEditor.cs b/Assets/Scripts/Editor/UIEffectEditor.cs
new file mode 100644
index 0000000..028ee73
--- /dev/null
+++ b/Assets/Scripts/Editor/UIEffectEditor.cs
@@ -0,0 +1,114 @@
+using UnityEditor;
+using UnityEditorInternal;
+using UnityEngine;
+using System.Linq;
+using System;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIEffect editor.
+ /// </summary>
+ [CustomEditor(typeof(UIEffect))]
+ [CanEditMultipleObjects]
+ public class UIEffectEditor : Editor
+ {
+ SerializedProperty _spEffectMode;
+ SerializedProperty _spEffectFactor;
+ SerializedProperty _spColorMode;
+ SerializedProperty _spColorFactor;
+ SerializedProperty _spBlurMode;
+ SerializedProperty _spBlurFactor;
+ SerializedProperty _spAdvancedBlur;
+
+ protected void OnEnable()
+ {
+ _spEffectMode = serializedObject.FindProperty("m_EffectMode");
+ _spEffectFactor = serializedObject.FindProperty("m_EffectFactor");
+ _spColorMode = serializedObject.FindProperty("m_ColorMode");
+ _spColorFactor = serializedObject.FindProperty("m_ColorFactor");
+ _spBlurMode = serializedObject.FindProperty("m_BlurMode");
+ _spBlurFactor = serializedObject.FindProperty("m_BlurFactor");
+ _spAdvancedBlur = serializedObject.FindProperty("m_AdvancedBlur");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ //================
+ // Effect setting.
+ //================
+ using (new MaterialDirtyScope(targets))
+ EditorGUILayout.PropertyField(_spEffectMode);
+
+ // When effect is enable, show parameters.
+ if (_spEffectMode.intValue != (int) EffectMode.None)
+ {
+ EditorGUI.indentLevel++;
+ EditorGUILayout.PropertyField(_spEffectFactor);
+ EditorGUI.indentLevel--;
+ }
+
+
+ //================
+ // Color setting.
+ //================
+ using (new MaterialDirtyScope(targets))
+ EditorGUILayout.PropertyField(_spColorMode);
+
+ // When color is enable, show parameters.
+ {
+ EditorGUI.indentLevel++;
+ EditorGUILayout.PropertyField(_spColorFactor);
+ EditorGUI.indentLevel--;
+ }
+
+
+ //================
+ // Blur setting.
+ //================
+ using (new MaterialDirtyScope(targets))
+ EditorGUILayout.PropertyField(_spBlurMode);
+
+ // When blur is enable, show parameters.
+ if (_spBlurMode.intValue != (int) BlurMode.None)
+ {
+ EditorGUI.indentLevel++;
+ EditorGUILayout.PropertyField(_spBlurFactor);
+
+ // When you change a property, it marks the material as dirty.
+ using (new MaterialDirtyScope(targets))
+ EditorGUILayout.PropertyField(_spAdvancedBlur);
+ EditorGUI.indentLevel--;
+
+ // Advanced blur requires uv2 channel.
+ if (_spAdvancedBlur.boolValue)
+ {
+ ShowCanvasChannelsWarning();
+ }
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+
+ void ShowCanvasChannelsWarning()
+ {
+ var effect = target as UIEffect;
+ if (effect == null || !effect.graphic) return;
+
+ var channel = effect.uvMaskChannel;
+ var canvas = effect.graphic.canvas;
+ if (canvas == null || (canvas.additionalShaderChannels & channel) == channel) return;
+
+ EditorGUILayout.BeginHorizontal();
+ {
+ var msg = string.Format("Enable '{0}' of Canvas.additionalShaderChannels to use 'UIEffect'.", channel);
+ EditorGUILayout.HelpBox(msg, MessageType.Warning);
+ if (GUILayout.Button("Fix"))
+ {
+ canvas.additionalShaderChannels |= channel;
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+ }
+ }
+}
diff --git a/Assets/Scripts/Editor/UIEffectEditor.cs.meta b/Assets/Scripts/Editor/UIEffectEditor.cs.meta
new file mode 100644
index 0000000..02aa24f
--- /dev/null
+++ b/Assets/Scripts/Editor/UIEffectEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 4f7e9f2ce1cb543ca88606769affbe24
+timeCreated: 1487152293
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIGradientEditor.cs b/Assets/Scripts/Editor/UIGradientEditor.cs
new file mode 100644
index 0000000..493c51d
--- /dev/null
+++ b/Assets/Scripts/Editor/UIGradientEditor.cs
@@ -0,0 +1,140 @@
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIEffect editor.
+ /// </summary>
+ [CustomEditor(typeof(UIGradient))]
+ [CanEditMultipleObjects]
+ public class UIGradientEditor : Editor
+ {
+ private static readonly GUIContent k_TextVerticalOffset = new GUIContent("Vertical Offset");
+ private static readonly GUIContent k_TextHorizontalOffset = new GUIContent("Horizontal Offset");
+ private static readonly GUIContent k_TextOffset = new GUIContent("Offset");
+ private static readonly GUIContent k_TextLeft = new GUIContent("Left");
+ private static readonly GUIContent k_TextRight = new GUIContent("Right");
+ private static readonly GUIContent k_TextTop = new GUIContent("Top");
+ private static readonly GUIContent k_TextBottom = new GUIContent("Bottom");
+ private static readonly GUIContent k_TextColor1 = new GUIContent("Color 1");
+ private static readonly GUIContent k_TextColor2 = new GUIContent("Color 2");
+ private static readonly GUIContent k_TextDiagonalColor = new GUIContent("Diagonal Color");
+
+ SerializedProperty _spDirection;
+ SerializedProperty _spColor1;
+ SerializedProperty _spColor2;
+ SerializedProperty _spColor3;
+ SerializedProperty _spColor4;
+ SerializedProperty _spRotation;
+ SerializedProperty _spOffset1;
+ SerializedProperty _spOffset2;
+ SerializedProperty _spIgnoreAspectRatio;
+ SerializedProperty _spGradientStyle;
+ SerializedProperty _spColorSpace;
+
+ //################################
+ // Public/Protected Members.
+ //################################
+ /// <summary>
+ /// This function is called when the object becomes enabled and active.
+ /// </summary>
+ protected void OnEnable()
+ {
+ _spIgnoreAspectRatio = serializedObject.FindProperty("m_IgnoreAspectRatio");
+ _spDirection = serializedObject.FindProperty("m_Direction");
+ _spColor1 = serializedObject.FindProperty("m_Color1");
+ _spColor2 = serializedObject.FindProperty("m_Color2");
+ _spColor3 = serializedObject.FindProperty("m_Color3");
+ _spColor4 = serializedObject.FindProperty("m_Color4");
+ _spRotation = serializedObject.FindProperty("m_Rotation");
+ _spOffset1 = serializedObject.FindProperty("m_Offset1");
+ _spOffset2 = serializedObject.FindProperty("m_Offset2");
+ _spGradientStyle = serializedObject.FindProperty("m_GradientStyle");
+ _spColorSpace = serializedObject.FindProperty("m_ColorSpace");
+ }
+
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ //================
+ // Direction.
+ //================
+ EditorGUILayout.PropertyField(_spDirection);
+
+
+ //================
+ // Color.
+ //================
+ switch ((UIGradient.Direction) _spDirection.intValue)
+ {
+ case UIGradient.Direction.Horizontal:
+ EditorGUILayout.PropertyField(_spColor1, k_TextLeft);
+ EditorGUILayout.PropertyField(_spColor2, k_TextRight);
+ break;
+ case UIGradient.Direction.Vertical:
+ EditorGUILayout.PropertyField(_spColor1, k_TextTop);
+ EditorGUILayout.PropertyField(_spColor2, k_TextBottom);
+ break;
+ case UIGradient.Direction.Angle:
+ EditorGUILayout.PropertyField(_spColor1, k_TextColor1);
+ EditorGUILayout.PropertyField(_spColor2, k_TextColor2);
+ break;
+ case UIGradient.Direction.Diagonal:
+ Rect r = EditorGUILayout.GetControlRect(false, 34);
+
+ r = EditorGUI.PrefixLabel(r, k_TextDiagonalColor);
+ float w = r.width / 2;
+
+ EditorGUI.PropertyField(new Rect(r.x, r.y, w, 16), _spColor3, GUIContent.none);
+ EditorGUI.PropertyField(new Rect(r.x + w, r.y, w, 16), _spColor4, GUIContent.none);
+ EditorGUI.PropertyField(new Rect(r.x, r.y + 18, w, 16), _spColor1, GUIContent.none);
+ EditorGUI.PropertyField(new Rect(r.x + w, r.y + 18, w, 16), _spColor2, GUIContent.none);
+ break;
+ }
+
+
+ //================
+ // Angle.
+ //================
+ if ((int) UIGradient.Direction.Angle <= _spDirection.intValue)
+ {
+ EditorGUILayout.PropertyField(_spRotation);
+ }
+
+
+ //================
+ // Offset.
+ //================
+ if ((int) UIGradient.Direction.Diagonal == _spDirection.intValue)
+ {
+ EditorGUILayout.PropertyField(_spOffset1, k_TextVerticalOffset);
+ EditorGUILayout.PropertyField(_spOffset2, k_TextHorizontalOffset);
+ }
+ else
+ {
+ EditorGUILayout.PropertyField(_spOffset1, k_TextOffset);
+ }
+
+
+ //================
+ // Advanced options.
+ //================
+ EditorGUILayout.Space();
+ EditorGUILayout.LabelField("Advanced Options", EditorStyles.boldLabel);
+ EditorGUI.indentLevel++;
+ {
+ //if ((target as UIGradient).targetGraphic is Text)
+ EditorGUILayout.PropertyField(_spGradientStyle);
+
+ EditorGUILayout.PropertyField(_spColorSpace);
+ EditorGUILayout.PropertyField(_spIgnoreAspectRatio);
+ }
+ EditorGUI.indentLevel--;
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+} \ No newline at end of file
diff --git a/Assets/Scripts/Editor/UIGradientEditor.cs.meta b/Assets/Scripts/Editor/UIGradientEditor.cs.meta
new file mode 100644
index 0000000..5070c14
--- /dev/null
+++ b/Assets/Scripts/Editor/UIGradientEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: c28dcc885fbba4a5187a6a1aa5fb1b3b
+timeCreated: 1515895646
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIHsvModifierEditor.cs b/Assets/Scripts/Editor/UIHsvModifierEditor.cs
new file mode 100644
index 0000000..6d54a55
--- /dev/null
+++ b/Assets/Scripts/Editor/UIHsvModifierEditor.cs
@@ -0,0 +1,53 @@
+using UnityEditor;
+using UnityEditorInternal;
+using UnityEngine;
+using System.Linq;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIEffect editor.
+ /// </summary>
+ [CustomEditor(typeof(UIHsvModifier))]
+ [CanEditMultipleObjects]
+ public class UIHsvModifierEditor : Editor
+ {
+ SerializedProperty _spTargetColor;
+ SerializedProperty _spRange;
+ SerializedProperty _spHue;
+ SerializedProperty _spSaturation;
+ SerializedProperty _spValue;
+
+ /// <summary>
+ /// This function is called when the object becomes enabled and active.
+ /// </summary>
+ protected void OnEnable()
+ {
+ _spTargetColor = serializedObject.FindProperty("m_TargetColor");
+ _spRange = serializedObject.FindProperty("m_Range");
+ _spHue = serializedObject.FindProperty("m_Hue");
+ _spSaturation = serializedObject.FindProperty("m_Saturation");
+ _spValue = serializedObject.FindProperty("m_Value");
+ }
+
+
+ /// <summary>
+ /// Implement this function to make a custom inspector.
+ /// </summary>
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ //================
+ // Effect setting.
+ //================
+ EditorGUILayout.PropertyField(_spTargetColor);
+ EditorGUILayout.PropertyField(_spRange);
+ EditorGUILayout.PropertyField(_spHue);
+ EditorGUILayout.PropertyField(_spSaturation);
+ EditorGUILayout.PropertyField(_spValue);
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Assets/Scripts/Editor/UIHsvModifierEditor.cs.meta b/Assets/Scripts/Editor/UIHsvModifierEditor.cs.meta
new file mode 100644
index 0000000..87f1694
--- /dev/null
+++ b/Assets/Scripts/Editor/UIHsvModifierEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: f002ba0ac474d487b936bc046dda56b4
+timeCreated: 1538806052
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIShadowEditor.cs b/Assets/Scripts/Editor/UIShadowEditor.cs
new file mode 100644
index 0000000..64f01d6
--- /dev/null
+++ b/Assets/Scripts/Editor/UIShadowEditor.cs
@@ -0,0 +1,62 @@
+using UnityEditor;
+using UnityEditorInternal;
+using UnityEngine;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIShadow editor.
+ /// </summary>
+ [CustomEditor(typeof(UIShadow))]
+ [CanEditMultipleObjects]
+ public class UIShadowEditor : Editor
+ {
+ UIEffect uiEffect;
+ SerializedProperty _spStyle;
+ SerializedProperty _spEffectDistance;
+ SerializedProperty _spEffectColor;
+ SerializedProperty _spUseGraphicAlpha;
+ SerializedProperty _spBlurFactor;
+
+ void OnEnable()
+ {
+ uiEffect = (target as UIShadow).GetComponent<UIEffect>();
+ _spStyle = serializedObject.FindProperty("m_Style");
+ _spEffectDistance = serializedObject.FindProperty("m_EffectDistance");
+ _spEffectColor = serializedObject.FindProperty("m_EffectColor");
+ _spUseGraphicAlpha = serializedObject.FindProperty("m_UseGraphicAlpha");
+ _spBlurFactor = serializedObject.FindProperty("m_BlurFactor");
+ }
+
+ /// <summary>
+ /// Implement this function to make a custom inspector.
+ /// </summary>
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ //================
+ // Shadow setting.
+ //================
+ EditorGUILayout.PropertyField(_spStyle);
+
+ // When shadow is enable, show parameters.
+ if (_spStyle.intValue != (int) ShadowStyle.None)
+ {
+ EditorGUI.indentLevel++;
+ EditorGUILayout.PropertyField(_spEffectDistance);
+ EditorGUILayout.PropertyField(_spEffectColor);
+ EditorGUILayout.PropertyField(_spUseGraphicAlpha);
+
+ if (uiEffect && uiEffect.blurMode != BlurMode.None)
+ {
+ EditorGUILayout.PropertyField(_spBlurFactor);
+ }
+
+ EditorGUI.indentLevel--;
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Assets/Scripts/Editor/UIShadowEditor.cs.meta b/Assets/Scripts/Editor/UIShadowEditor.cs.meta
new file mode 100644
index 0000000..bc6a832
--- /dev/null
+++ b/Assets/Scripts/Editor/UIShadowEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 6e76e7f628f09af449321b4776123f13
+timeCreated: 1487152293
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UIShinyEditor.cs b/Assets/Scripts/Editor/UIShinyEditor.cs
new file mode 100644
index 0000000..e77432a
--- /dev/null
+++ b/Assets/Scripts/Editor/UIShinyEditor.cs
@@ -0,0 +1,102 @@
+using UnityEditor;
+using UnityEditorInternal;
+using UnityEngine;
+using System.Linq;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIEffect editor.
+ /// </summary>
+ [CustomEditor(typeof(UIShiny))]
+ [CanEditMultipleObjects]
+ public class UIShinyEditor : Editor
+ {
+ SerializedProperty _spEffectFactor;
+ SerializedProperty _spWidth;
+ SerializedProperty _spRotation;
+ SerializedProperty _spSoftness;
+ SerializedProperty _spBrightness;
+ SerializedProperty _spGloss;
+ SerializedProperty _spEffectArea;
+ SerializedProperty _spPlay;
+ SerializedProperty _spLoop;
+ SerializedProperty _spLoopDelay;
+ SerializedProperty _spDuration;
+ SerializedProperty _spInitialPlayDelay;
+ SerializedProperty _spUpdateMode;
+
+ /// <summary>
+ /// This function is called when the object becomes enabled and active.
+ /// </summary>
+ protected void OnEnable()
+ {
+ _spEffectFactor = serializedObject.FindProperty("m_EffectFactor");
+ _spEffectArea = serializedObject.FindProperty("m_EffectArea");
+ _spWidth = serializedObject.FindProperty("m_Width");
+ _spRotation = serializedObject.FindProperty("m_Rotation");
+ _spSoftness = serializedObject.FindProperty("m_Softness");
+ _spBrightness = serializedObject.FindProperty("m_Brightness");
+ _spGloss = serializedObject.FindProperty("m_Gloss");
+ var player = serializedObject.FindProperty("m_Player");
+ _spPlay = player.FindPropertyRelative("play");
+ _spDuration = player.FindPropertyRelative("duration");
+ _spInitialPlayDelay = player.FindPropertyRelative("initialPlayDelay");
+ _spLoop = player.FindPropertyRelative("loop");
+ _spLoopDelay = player.FindPropertyRelative("loopDelay");
+ _spUpdateMode = player.FindPropertyRelative("updateMode");
+ }
+
+ /// <summary>
+ /// Implement this function to make a custom inspector.
+ /// </summary>
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ //================
+ // Effect setting.
+ //================
+ EditorGUILayout.PropertyField(_spEffectFactor);
+ EditorGUILayout.PropertyField(_spWidth);
+ EditorGUILayout.PropertyField(_spRotation);
+ EditorGUILayout.PropertyField(_spSoftness);
+ EditorGUILayout.PropertyField(_spBrightness);
+ EditorGUILayout.PropertyField(_spGloss);
+
+ //================
+ // Advanced option.
+ //================
+ EditorGUILayout.PropertyField(_spEffectArea);
+
+ //================
+ // Effect player.
+ //================
+ EditorGUILayout.PropertyField(_spPlay);
+ EditorGUILayout.PropertyField(_spDuration);
+ EditorGUILayout.PropertyField(_spInitialPlayDelay);
+ EditorGUILayout.PropertyField(_spLoop);
+ EditorGUILayout.PropertyField(_spLoopDelay);
+ EditorGUILayout.PropertyField(_spUpdateMode);
+
+ // Debug.
+ using (new EditorGUI.DisabledGroupScope(!Application.isPlaying))
+ using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox))
+ {
+ GUILayout.Label("Debug");
+
+ if (GUILayout.Button("Play", "ButtonLeft"))
+ {
+ (target as UIShiny).Play();
+ }
+
+ if (GUILayout.Button("Stop", "ButtonRight"))
+ {
+ (target as UIShiny).Stop();
+ }
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Assets/Scripts/Editor/UIShinyEditor.cs.meta b/Assets/Scripts/Editor/UIShinyEditor.cs.meta
new file mode 100644
index 0000000..7dd653a
--- /dev/null
+++ b/Assets/Scripts/Editor/UIShinyEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 0080e984bad7545cd957d9121e99f988
+timeCreated: 1538806052
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Editor/UITransitionEffectEditor.cs b/Assets/Scripts/Editor/UITransitionEffectEditor.cs
new file mode 100644
index 0000000..803c9bf
--- /dev/null
+++ b/Assets/Scripts/Editor/UITransitionEffectEditor.cs
@@ -0,0 +1,115 @@
+using UnityEditor;
+using UnityEditorInternal;
+using UnityEngine;
+using System.Linq;
+
+namespace Coffee.UIEffects.Editors
+{
+ /// <summary>
+ /// UIEffect editor.
+ /// </summary>
+ [CustomEditor(typeof(UITransitionEffect))]
+ [CanEditMultipleObjects]
+ public class UITransitionEffectEditor : Editor
+ {
+ SerializedProperty _spEffectMode;
+ SerializedProperty _spEffectFactor;
+ SerializedProperty _spEffectArea;
+ SerializedProperty _spKeepAspectRatio;
+ SerializedProperty _spDissolveWidth;
+ SerializedProperty _spDissolveSoftness;
+ SerializedProperty _spDissolveColor;
+ SerializedProperty _spTransitionTexture;
+ SerializedProperty _spPlay;
+ SerializedProperty _spLoop;
+ SerializedProperty _spLoopDelay;
+ SerializedProperty _spDuration;
+ SerializedProperty _spInitialPlayDelay;
+ SerializedProperty _spUpdateMode;
+ SerializedProperty _spPassRayOnHidden;
+
+ /// <summary>
+ /// This function is called when the object becomes enabled and active.
+ /// </summary>
+ protected void OnEnable()
+ {
+ _spEffectMode = serializedObject.FindProperty("m_EffectMode");
+ _spEffectFactor = serializedObject.FindProperty("m_EffectFactor");
+ _spEffectArea = serializedObject.FindProperty("m_EffectArea");
+ _spKeepAspectRatio = serializedObject.FindProperty("m_KeepAspectRatio");
+ _spDissolveWidth = serializedObject.FindProperty("m_DissolveWidth");
+ _spDissolveSoftness = serializedObject.FindProperty("m_DissolveSoftness");
+ _spDissolveColor = serializedObject.FindProperty("m_DissolveColor");
+ _spTransitionTexture = serializedObject.FindProperty("m_TransitionTexture");
+ var player = serializedObject.FindProperty("m_Player");
+ _spPlay = player.FindPropertyRelative("play");
+ _spDuration = player.FindPropertyRelative("duration");
+ _spInitialPlayDelay = player.FindPropertyRelative("initialPlayDelay");
+ _spLoop = player.FindPropertyRelative("loop");
+ _spLoopDelay = player.FindPropertyRelative("loopDelay");
+ _spUpdateMode = player.FindPropertyRelative("updateMode");
+ _spPassRayOnHidden = serializedObject.FindProperty("m_PassRayOnHidden");
+ }
+
+ /// <summary>
+ /// Implement this function to make a custom inspector.
+ /// </summary>
+ public override void OnInspectorGUI()
+ {
+ //================
+ // Effect setting.
+ //================
+ using (new MaterialDirtyScope(targets))
+ EditorGUILayout.PropertyField(_spEffectMode);
+
+ EditorGUI.indentLevel++;
+ EditorGUILayout.PropertyField(_spEffectFactor);
+ if (_spEffectMode.intValue == (int) UITransitionEffect.EffectMode.Dissolve)
+ {
+ EditorGUILayout.PropertyField(_spDissolveWidth);
+ EditorGUILayout.PropertyField(_spDissolveSoftness);
+ EditorGUILayout.PropertyField(_spDissolveColor);
+ }
+
+ EditorGUI.indentLevel--;
+
+ //================
+ // Advanced option.
+ //================
+ EditorGUILayout.PropertyField(_spEffectArea);
+ using (new MaterialDirtyScope(targets))
+ EditorGUILayout.PropertyField(_spTransitionTexture);
+ EditorGUILayout.PropertyField(_spKeepAspectRatio);
+ EditorGUILayout.PropertyField(_spPassRayOnHidden);
+
+ //================
+ // Effect player.
+ //================
+ EditorGUILayout.PropertyField(_spPlay);
+ EditorGUILayout.PropertyField(_spDuration);
+ EditorGUILayout.PropertyField(_spInitialPlayDelay);
+ EditorGUILayout.PropertyField(_spLoop);
+ EditorGUILayout.PropertyField(_spLoopDelay);
+ EditorGUILayout.PropertyField(_spUpdateMode);
+
+ // Debug.
+ using (new EditorGUI.DisabledGroupScope(!Application.isPlaying))
+ using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox))
+ {
+ GUILayout.Label("Debug");
+
+ if (GUILayout.Button("Show", "ButtonLeft"))
+ {
+ (target as UITransitionEffect).Show();
+ }
+
+ if (GUILayout.Button("Hide", "ButtonRight"))
+ {
+ (target as UITransitionEffect).Hide();
+ }
+ }
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Assets/Scripts/Editor/UITransitionEffectEditor.cs.meta b/Assets/Scripts/Editor/UITransitionEffectEditor.cs.meta
new file mode 100644
index 0000000..14054f8
--- /dev/null
+++ b/Assets/Scripts/Editor/UITransitionEffectEditor.cs.meta
@@ -0,0 +1,12 @@
+fileFormatVersion: 2
+guid: 631f363a54c834f1f846f823b31bd321
+timeCreated: 1538806067
+licenseType: Pro
+MonoImporter:
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant: