diff options
author | chai <chaifix@163.com> | 2021-04-07 21:33:14 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-04-07 21:33:14 +0800 |
commit | c47b92e92cf33ae8bf2f38929e137294397e4735 (patch) | |
tree | c67ae3419eaf15e84f1679186e107f598de33978 /Assets/Scripts/Enums |
Diffstat (limited to 'Assets/Scripts/Enums')
-rw-r--r-- | Assets/Scripts/Enums/BlurMode.cs | 13 | ||||
-rw-r--r-- | Assets/Scripts/Enums/BlurMode.cs.meta | 12 | ||||
-rw-r--r-- | Assets/Scripts/Enums/ColorMode.cs | 13 | ||||
-rw-r--r-- | Assets/Scripts/Enums/ColorMode.cs.meta | 12 | ||||
-rw-r--r-- | Assets/Scripts/Enums/EffectArea.cs | 116 | ||||
-rw-r--r-- | Assets/Scripts/Enums/EffectArea.cs.meta | 12 | ||||
-rw-r--r-- | Assets/Scripts/Enums/EffectMode.cs | 14 | ||||
-rw-r--r-- | Assets/Scripts/Enums/EffectMode.cs.meta | 12 | ||||
-rw-r--r-- | Assets/Scripts/Enums/ShadowStyle.cs | 14 | ||||
-rw-r--r-- | Assets/Scripts/Enums/ShadowStyle.cs.meta | 12 |
10 files changed, 230 insertions, 0 deletions
diff --git a/Assets/Scripts/Enums/BlurMode.cs b/Assets/Scripts/Enums/BlurMode.cs new file mode 100644 index 0000000..e3ef417 --- /dev/null +++ b/Assets/Scripts/Enums/BlurMode.cs @@ -0,0 +1,13 @@ +namespace Coffee.UIEffects +{ + /// <summary> + /// Blur effect mode. + /// </summary> + public enum BlurMode + { + None = 0, + FastBlur = 1, + MediumBlur = 2, + DetailBlur = 3, + } +} diff --git a/Assets/Scripts/Enums/BlurMode.cs.meta b/Assets/Scripts/Enums/BlurMode.cs.meta new file mode 100644 index 0000000..504b62a --- /dev/null +++ b/Assets/Scripts/Enums/BlurMode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5645838b01af8764d8f381f04b62b9a2 +timeCreated: 1528296875 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enums/ColorMode.cs b/Assets/Scripts/Enums/ColorMode.cs new file mode 100644 index 0000000..567624b --- /dev/null +++ b/Assets/Scripts/Enums/ColorMode.cs @@ -0,0 +1,13 @@ +namespace Coffee.UIEffects +{ + /// <summary> + /// Color effect mode. + /// </summary> + public enum ColorMode + { + Multiply = 0, + Fill = 1, + Add = 2, + Subtract = 3, + } +} diff --git a/Assets/Scripts/Enums/ColorMode.cs.meta b/Assets/Scripts/Enums/ColorMode.cs.meta new file mode 100644 index 0000000..ba60cab --- /dev/null +++ b/Assets/Scripts/Enums/ColorMode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e6ba1e487e0a19644afde2bd5531bd04 +timeCreated: 1528296875 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enums/EffectArea.cs b/Assets/Scripts/Enums/EffectArea.cs new file mode 100644 index 0000000..4e5fa28 --- /dev/null +++ b/Assets/Scripts/Enums/EffectArea.cs @@ -0,0 +1,116 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace Coffee.UIEffects +{ + /// <summary> + /// Area for effect. + /// </summary> + public enum EffectArea + { + RectTransform, + Fit, + Character, + } + + public static class EffectAreaExtensions + { + static readonly Rect rectForCharacter = new Rect(0, 0, 1, 1); + static readonly Vector2[] splitedCharacterPosition = {Vector2.up, Vector2.one, Vector2.right, Vector2.zero}; + + /// <summary> + /// Gets effect for area. + /// </summary> + public static Rect GetEffectArea(this EffectArea area, VertexHelper vh, Rect rectangle, float aspectRatio = -1) + { + Rect rect = default(Rect); + switch (area) + { + case EffectArea.RectTransform: + rect = rectangle; + break; + case EffectArea.Character: + rect = rectForCharacter; + break; + case EffectArea.Fit: + // Fit to contents. + UIVertex vertex = default(UIVertex); + float xMin = float.MaxValue; + float yMin = float.MaxValue; + float xMax = float.MinValue; + float yMax = float.MinValue; + for (int i = 0; i < vh.currentVertCount; i++) + { + vh.PopulateUIVertex(ref vertex, i); + float x = vertex.position.x; + float y = vertex.position.y; + xMin = Mathf.Min(xMin, x); + yMin = Mathf.Min(yMin, y); + xMax = Mathf.Max(xMax, x); + yMax = Mathf.Max(yMax, y); + } + + rect.Set(xMin, yMin, xMax - xMin, yMax - yMin); + break; + default: + rect = rectangle; + break; + } + + + if (0 < aspectRatio) + { + if (rect.width < rect.height) + { + rect.width = rect.height * aspectRatio; + } + else + { + rect.height = rect.width / aspectRatio; + } + } + + return rect; + } + + /// <summary> + /// Gets position factor for area. + /// </summary> + public static void GetPositionFactor(this EffectArea area, int index, Rect rect, Vector2 position, bool isText, + bool isTMPro, out float x, out float y) + { + if (isText && area == EffectArea.Character) + { + index = isTMPro ? (index + 3) % 4 : index % 4; + x = splitedCharacterPosition[index].x; + y = splitedCharacterPosition[index].y; + } + else if (area == EffectArea.Fit) + { + x = Mathf.Clamp01((position.x - rect.xMin) / rect.width); + y = Mathf.Clamp01((position.y - rect.yMin) / rect.height); + } + else + { + x = Mathf.Clamp01(position.x / rect.width + 0.5f); + y = Mathf.Clamp01(position.y / rect.height + 0.5f); + } + } + + /// <summary> + /// Normalize vertex position by local matrix. + /// </summary> + public static void GetNormalizedFactor(this EffectArea area, int index, Matrix2x3 matrix, Vector2 position, + bool isText, out Vector2 nomalizedPos) + { + if (isText && area == EffectArea.Character) + { + nomalizedPos = matrix * splitedCharacterPosition[(index + 3) % 4]; + } + else + { + nomalizedPos = matrix * position; + } + } + } +} diff --git a/Assets/Scripts/Enums/EffectArea.cs.meta b/Assets/Scripts/Enums/EffectArea.cs.meta new file mode 100644 index 0000000..4bc2fa4 --- /dev/null +++ b/Assets/Scripts/Enums/EffectArea.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a78f43d1382a048a99411472ca714e1b +timeCreated: 1528636556 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enums/EffectMode.cs b/Assets/Scripts/Enums/EffectMode.cs new file mode 100644 index 0000000..84f3eb4 --- /dev/null +++ b/Assets/Scripts/Enums/EffectMode.cs @@ -0,0 +1,14 @@ +namespace Coffee.UIEffects +{ + /// <summary> + /// Effect mode. + /// </summary> + public enum EffectMode + { + None = 0, + Grayscale = 1, + Sepia = 2, + Nega = 3, + Pixel = 4, + } +} diff --git a/Assets/Scripts/Enums/EffectMode.cs.meta b/Assets/Scripts/Enums/EffectMode.cs.meta new file mode 100644 index 0000000..76773db --- /dev/null +++ b/Assets/Scripts/Enums/EffectMode.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 092769547c242d74cbad96631a00963f +timeCreated: 1528296875 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Enums/ShadowStyle.cs b/Assets/Scripts/Enums/ShadowStyle.cs new file mode 100644 index 0000000..1cfe058 --- /dev/null +++ b/Assets/Scripts/Enums/ShadowStyle.cs @@ -0,0 +1,14 @@ +namespace Coffee.UIEffects +{ + /// <summary> + /// Shadow effect style. + /// </summary> + public enum ShadowStyle + { + None = 0, + Shadow, + Outline, + Outline8, + Shadow3, + } +} diff --git a/Assets/Scripts/Enums/ShadowStyle.cs.meta b/Assets/Scripts/Enums/ShadowStyle.cs.meta new file mode 100644 index 0000000..337e823 --- /dev/null +++ b/Assets/Scripts/Enums/ShadowStyle.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b0eda5bf10146491c9cfe6a31c66f9a7 +timeCreated: 1528296875 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: |