1
1
using System ;
2
+ using System . Diagnostics ;
2
3
using Hover . Cast . Custom . Standard ;
3
4
using Hover . Cast . State ;
4
5
using Hover . Common . Custom ;
@@ -18,10 +19,13 @@ public class UiPalmNavBackRenderer : MonoBehaviour, IUiItemRenderer {
18
19
19
20
protected MenuState vMenuState ;
20
21
protected IBaseItemState vItemState ;
22
+ protected ISelectableItem vSelItem ;
21
23
protected ItemVisualSettingsStandard vSettings ;
22
24
23
25
protected UiHoverMeshSlice vHoverSlice ;
24
26
protected GameObject vIcon ;
27
+ protected Stopwatch vEnabledAnim ;
28
+ protected bool vPrevEnabled ;
25
29
26
30
27
31
////////////////////////////////////////////////////////////////////////////////////////////////
@@ -30,6 +34,7 @@ public virtual void Build(MenuState pMenuState, IBaseItemState pItemState,
30
34
float pArcAngle , IItemVisualSettings pSettings ) {
31
35
vMenuState = pMenuState ;
32
36
vItemState = pItemState ;
37
+ vSelItem = ( vItemState . Item as ISelectableItem ) ;
33
38
vSettings = ( ItemVisualSettingsStandard ) pSettings ;
34
39
35
40
////
@@ -52,31 +57,32 @@ public virtual void Build(MenuState pMenuState, IBaseItemState pItemState,
52
57
53
58
/*--------------------------------------------------------------------------------------------*/
54
59
public virtual void Update ( ) {
55
- ISelectableItem selItem = ( vItemState . Item as ISelectableItem ) ;
56
-
57
60
float high = vItemState . MaxHighlightProgress ;
58
61
bool showEdge = ( vItemState . IsNearestHighlight && ! vItemState . IsSelectionPrevented &&
59
- selItem != null && selItem . AllowSelection ) ;
62
+ vSelItem . AllowSelection ) ;
60
63
float edge = ( showEdge ? high : 0 ) ;
61
- float select = 1 - ( float ) Math . Pow ( 1 - vItemState . SelectionProgress , 1.5f ) ;
64
+ float select = vItemState . SelectionProgress ;
62
65
float alpha = Math . Max ( 0 , 1 - ( float ) Math . Pow ( 1 - vMenuState . DisplayStrength , 2 ) ) ;
66
+ float enabledAnimProg = GetEnabledAnimProgress ( ) ;
63
67
64
- if ( vMenuState . NavBackStrength > select ) {
68
+ if ( vSelItem . IsEnabled && vMenuState . NavBackStrength > select ) {
65
69
select = vMenuState . NavBackStrength ;
70
+ edge = select ;
66
71
}
67
72
73
+ select = 1 - ( float ) Math . Pow ( 1 - select , 1.5f ) ;
74
+
68
75
Color colBg = vSettings . BackgroundColor ;
69
76
Color colEdge = vSettings . EdgeColor ;
70
77
Color colHigh = vSettings . HighlightColor ;
71
78
Color colSel = vSettings . SelectionColor ;
72
79
Color colIcon = vSettings . ArrowIconColor ;
73
80
74
- colBg . a *= alpha * ( vItemState . Item . IsEnabled ? 1 : 0.333f ) ;
81
+ colBg . a *= alpha * Mathf . Lerp ( 0.333f , 1 , enabledAnimProg ) ;
75
82
colEdge . a *= edge * alpha ;
76
83
colHigh . a *= high * alpha ;
77
84
colSel . a *= select * alpha ;
78
- colIcon . a *= ( vItemState . MaxHighlightProgress * 0.75f + 0.25f ) * alpha *
79
- ( vItemState . Item . IsEnabled ? 1 : 0 ) ;
85
+ colIcon . a *= ( vItemState . MaxHighlightProgress * 0.75f + 0.25f ) * alpha * enabledAnimProg ;
80
86
81
87
vHoverSlice . UpdateBackground ( colBg ) ;
82
88
vHoverSlice . UpdateEdge ( colEdge ) ;
@@ -98,6 +104,34 @@ public void UpdateHoverPoints(IBaseItemPointsState pPointsState, Vector3 pCursor
98
104
vHoverSlice . UpdateHoverPoints ( pPointsState ) ;
99
105
}
100
106
107
+
108
+ ////////////////////////////////////////////////////////////////////////////////////////////////
109
+ /*--------------------------------------------------------------------------------------------*/
110
+ private float GetEnabledAnimProgress ( ) {
111
+ if ( vSelItem . IsEnabled != vPrevEnabled ) {
112
+ vEnabledAnim = Stopwatch . StartNew ( ) ;
113
+ vPrevEnabled = vSelItem . IsEnabled ;
114
+ }
115
+
116
+ float prog = ( vSelItem . IsEnabled ? 1 : 0 ) ;
117
+
118
+ if ( vEnabledAnim != null ) {
119
+ float ms = ( float ) vEnabledAnim . Elapsed . TotalMilliseconds ;
120
+ prog = Math . Min ( 1 , ms / UiArc . LevelChangeMilliseconds ) ;
121
+ prog = 1 - ( float ) Math . Pow ( 1 - prog , 3 ) ;
122
+
123
+ if ( prog >= 1 ) {
124
+ vEnabledAnim = null ;
125
+ }
126
+
127
+ if ( ! vSelItem . IsEnabled ) {
128
+ prog = 1 - prog ;
129
+ }
130
+ }
131
+
132
+ return prog ;
133
+ }
134
+
101
135
}
102
136
103
137
}
0 commit comments