diff options
Diffstat (limited to 'Assets/Scripts/Editor')
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: |