Skip to content

Commit d40a019

Browse files
committed
feat: add v4 compatible components
Use these components for an easy upgrade to v5 with minimal changes.
1 parent a4f85cb commit d40a019

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+2552
-0
lines changed

Packages/src/Samples~/v4 Compatible Components.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/src/Samples~/v4 Compatible Components/Runtime.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/src/Samples~/v4 Compatible Components/Runtime/Common.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
using UnityEngine;
2+
using System;
3+
using Coffee.UIEffectInternal;
4+
5+
namespace Coffee.UIEffects
6+
{
7+
/// <summary>
8+
/// Effect player.
9+
/// </summary>
10+
[Serializable]
11+
public class EffectPlayer
12+
{
13+
//################################
14+
// Public Members.
15+
//################################
16+
/// <summary>
17+
/// Gets or sets a value indicating whether is playing.
18+
/// </summary>
19+
[Header("Effect Player")]
20+
[Tooltip("Playing.")]
21+
public bool play = false;
22+
23+
/// <summary>
24+
/// Gets or sets the delay before looping.
25+
/// </summary>
26+
[Tooltip("Initial play delay.")]
27+
[Range(0f, 10f)]
28+
public float initialPlayDelay = 0;
29+
30+
/// <summary>
31+
/// Gets or sets the duration.
32+
/// </summary>
33+
[Tooltip("Duration.")]
34+
[Range(0.01f, 10f)]
35+
public float duration = 1;
36+
37+
/// <summary>
38+
/// Gets or sets a value indicating whether can loop.
39+
/// </summary>
40+
[Tooltip("Loop.")]
41+
public bool loop = false;
42+
43+
/// <summary>
44+
/// Gets or sets the delay before looping.
45+
/// </summary>
46+
[Tooltip("Delay before looping.")]
47+
[Range(0f, 10f)]
48+
public float loopDelay = 0;
49+
50+
/// <summary>
51+
/// Gets or sets the update mode.
52+
/// </summary>
53+
[Tooltip("Update mode")]
54+
public AnimatorUpdateMode updateMode = AnimatorUpdateMode.Normal;
55+
56+
private UIEffectTweener _tweener;
57+
private UIEffectBase _target;
58+
59+
/// <summary>
60+
/// Register player.
61+
/// </summary>
62+
public void OnEnable()
63+
{
64+
if (play)
65+
{
66+
Play(true);
67+
}
68+
}
69+
70+
/// <summary>
71+
/// Unregister player.
72+
/// </summary>
73+
public void OnDisable()
74+
{
75+
Stop(false);
76+
}
77+
78+
/// <summary>
79+
/// Start playing.
80+
/// </summary>
81+
public void Play(bool reset)
82+
{
83+
play = true;
84+
SetupProperty();
85+
if (reset && _tweener)
86+
{
87+
_tweener.direction = UIEffectTweener.Direction.Forward;
88+
_tweener.SetTime(0);
89+
}
90+
}
91+
92+
public void PlayReverse(bool reset)
93+
{
94+
play = true;
95+
SetupProperty();
96+
if (reset && _tweener)
97+
{
98+
_tweener.direction = UIEffectTweener.Direction.Reverse;
99+
_tweener.SetTime(_tweener.totalTime);
100+
}
101+
}
102+
103+
/// <summary>
104+
/// Stop playing.
105+
/// </summary>
106+
public void Stop(bool reset)
107+
{
108+
play = false;
109+
if (reset && _tweener)
110+
{
111+
SetupProperty();
112+
_tweener.SetTime(0);
113+
}
114+
}
115+
116+
public void Attach(UIEffectBase target)
117+
{
118+
_target = target;
119+
SetupProperty();
120+
}
121+
122+
private void SetupProperty()
123+
{
124+
if (!_target) return;
125+
_tweener = _target.GetOrAddComponent<UIEffectTweener>();
126+
_tweener.enabled = play;
127+
_tweener.duration = duration;
128+
_tweener.wrapMode = loop ? UIEffectTweener.WrapMode.Loop : UIEffectTweener.WrapMode.Once;
129+
_tweener.interval = loopDelay;
130+
_tweener.delay = initialPlayDelay;
131+
_tweener.updateMode = updateMode == AnimatorUpdateMode.UnscaledTime
132+
? UIEffectTweener.UpdateMode.Unscaled
133+
: UIEffectTweener.UpdateMode.Normal;
134+
}
135+
}
136+
}

Packages/src/Samples~/v4 Compatible Components/Runtime/Common/EffectPlayer.cs.meta

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
#if UNITY_EDITOR
2+
using System.Linq;
3+
using Coffee.UIEffectInternal;
4+
using UnityEditor;
5+
6+
namespace Coffee.UIEffects
7+
{
8+
internal static class UIEffectV4Editor
9+
{
10+
[MenuItem("CONTEXT/" + nameof(UIDissolve) + "/Convert To UIEffect")]
11+
[MenuItem("CONTEXT/" + nameof(UIShiny) + "/Convert To UIEffect")]
12+
[MenuItem("CONTEXT/" + nameof(UIHsvModifier) + "/Convert To UIEffect")]
13+
[MenuItem("CONTEXT/" + nameof(UITransitionEffect) + "/Convert To UIEffect")]
14+
[MenuItem("CONTEXT/" + nameof(UIEffectV4) + "/Convert To UIEffect")]
15+
private static void ConvertToUIEffect(MenuCommand command)
16+
{
17+
if (command.context is UIEffectBase legacy)
18+
{
19+
var go = legacy.gameObject;
20+
var legacyContext = legacy.context;
21+
command.context.ConvertTo<UIEffect>();
22+
go.GetComponent<UIEffect>().CopyFrom(legacyContext);
23+
}
24+
}
25+
26+
[InitializeOnLoadMethod]
27+
private static void InitializeOnLoad()
28+
{
29+
var presets = new[]
30+
{
31+
"3b09ad143990c4c8795c6e93760e132a",
32+
"4f70ff0f1e25b4388b9bcb38d619f7bf"
33+
}
34+
.Select(AssetDatabase.GUIDToAssetPath)
35+
.Select(AssetDatabase.LoadAssetAtPath<UIEffect>);
36+
foreach (var preset in presets)
37+
{
38+
UIEffectProjectSettings.RegisterRuntimePreset(preset);
39+
}
40+
}
41+
}
42+
}
43+
#endif

Packages/src/Samples~/v4 Compatible Components/Runtime/Common/UIEffectV4Editor.cs.meta

+11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Packages/src/Samples~/v4 Compatible Components/Runtime/Enums.meta

+8
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Coffee.UIEffects
2+
{
3+
/// <summary>
4+
/// Blur effect mode.
5+
/// </summary>
6+
public enum BlurMode
7+
{
8+
None = 0,
9+
FastBlur = 1,
10+
MediumBlur = 2,
11+
DetailBlur = 3
12+
}
13+
}

Packages/src/Samples~/v4 Compatible Components/Runtime/Enums/BlurMode.cs.meta

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
namespace Coffee.UIEffects
2+
{
3+
/// <summary>
4+
/// Color effect mode.
5+
/// </summary>
6+
public enum ColorMode
7+
{
8+
Multiply = 0,
9+
Fill = 1,
10+
Add = 2,
11+
Subtract = 3
12+
}
13+
}

Packages/src/Samples~/v4 Compatible Components/Runtime/Enums/ColorMode.cs.meta

+12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)