DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
NotificationUI.c
Go to the documentation of this file.
2{
3 protected ref Widget m_Root;
4 protected ref Widget m_Spacer;
5 protected ref Widget m_VoiceContent;
7
10
11 protected float m_Width;
12 protected float m_CurrentHeight;
13 protected float m_TargetHeight;
14 protected float m_BackupPosX;
15 protected float m_BackupPosY;
17
18 protected bool m_OffsetEnabled;;
19
21 {
22 m_Root = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/notifications/notifications.layout");
23 m_Spacer = m_Root.FindAnyWidget( "NotificationSpacer" );
24 m_VoiceContent = m_Root.FindAnyWidget( "VoiceContent" );
25 m_NotificationContent = m_Root.FindAnyWidget( "NotificationContent" );
29
31 if (ntfSys)
32 {
35 }
36 }
37
39 {
41 if (ntfSys)
42 {
45 }
46 }
47
49 {
50 Widget notification = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/notifications/notification_element.layout", m_NotificationContent);
51
52 ImageWidget icon = ImageWidget.Cast( notification.FindAnyWidget( "Image" ) );
53 RichTextWidget title = RichTextWidget.Cast( notification.FindAnyWidget( "Title" ) );
54
55 if ( data.GetIcon() != "" )
56 icon.LoadImageFile( 0, data.GetIcon() );
57 title.SetText( data.GetTitleText() );
58
59 if ( data.GetDetailText() != "" )
60 {
61 Widget bottom_spacer = notification.FindAnyWidget( "BottomSpacer" );
62 RichTextWidget detail = RichTextWidget.Cast( notification.FindAnyWidget( "Detail" ) );
63 bottom_spacer.Show(true);
64 detail.SetText( data.GetDetailText() );
65 detail.Update();
66 bottom_spacer.Update();
67 notification.Update();
68 }
69
70 m_Notifications.Insert( data, notification );
72 }
73
75 {
76 if ( m_Notifications.Contains( data ) )
77 {
78 Widget notification = m_Notifications.Get( data );
79 m_WidgetTimers.Insert( m_WidgetTimers.Count().ToString() + data.GetTime().ToString(), notification );
80 m_Notifications.Remove( data );
82 }
83 }
84
85 void AddVoiceNotification(string player, string name)
86 {
87 if (!m_VoiceNotifications.Contains(player))
88 {
89 Widget notification;
90 if (!m_WidgetTimers.Contains(player))
91 {
92 notification = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/notifications/notification_voice_element.layout", m_VoiceContent);
93 }
94 else
95 {
96 notification = m_WidgetTimers.Get(player);
97 m_WidgetTimers.Remove(player);
98 notification.SetAlpha( 120 / 255 );
99 Widget w_c = notification.FindAnyWidget( "Name" );
100 if ( w_c )
101 {
102 w_c.SetAlpha( 1 );
103 }
104 }
105
106 RichTextWidget title = RichTextWidget.Cast(notification.FindAnyWidget("Name"));
107 m_VoiceNotifications.Insert(player, notification);
108 title.SetText(name);
110 }
111 }
112
113 void RemoveVoiceNotification( string player )
114 {
115 if ( m_VoiceNotifications.Contains( player ) )
116 {
117 Widget notification = m_VoiceNotifications.Get( player );
118 m_WidgetTimers.Insert( player, notification );
119 m_VoiceNotifications.Remove( player );
121 }
122 }
123
125 {
126 for ( int i = 0; i < m_VoiceNotifications.Count(); i++ )
127 {
128 Widget w = m_VoiceNotifications.GetElement( i );
129 delete w;
130 }
131 m_VoiceNotifications.Clear();
133 }
134
136 {
137 m_VoiceContent.Update();
138 m_NotificationContent.Update();
139 m_Spacer.Update();
140
141 float x;
142 m_Spacer.GetScreenSize( x, m_TargetHeight );
143 m_Root.GetScreenSize( m_Width, m_CurrentHeight );
144
145 UpdateOffset();
146 }
147
149 {
150 UIScriptedMenu menu = UIScriptedMenu.Cast(GetGame().GetUIManager().GetMenu());
151 if (menu)
152 {
153 Widget expNotification = menu.GetLayoutRoot().FindAnyWidget("notification_root");
154 if (expNotification && expNotification.IsVisible())
155 {
156 if (!m_OffsetEnabled)
157 {
159
160 float x, y, w, h;
161 m_Root.GetScreenPos(x, y);
162 expNotification.GetScreenSize(w, h);
163
164 m_Root.SetScreenPos(x, h);
165 m_OffsetEnabled = true;
166 }
167 }
168 else if (m_OffsetEnabled)
169 {
171 m_OffsetEnabled = false;
172 }
173 }
174 }
175
176 static float m_VelArr[1];
177 void Update( float timeslice )
178 {
179 UpdateOffset();
180
181 float x;
182 m_Spacer.GetScreenSize( x, m_TargetHeight );
183 bool is_near = ( m_CurrentHeight + 0.01 < m_TargetHeight || m_CurrentHeight - 0.01 > m_TargetHeight );
184 if ( is_near )
185 {
187 m_Root.SetSize( m_Width, m_CurrentHeight );
188 }
189 else if ( m_TargetHeight != m_CurrentHeight )
190 {
192 m_Root.SetSize( m_Width, m_CurrentHeight );
193 m_VelArr[0] = 0;
194 }
195
196 for ( int i = 0; i < m_WidgetTimers.Count(); )
197 {
198 Widget w = m_WidgetTimers.GetElement( i );
199 float new_alpha = Math.Clamp( w.GetAlpha() - timeslice / NOTIFICATION_FADE_TIME, 0, 1 );
200 if ( new_alpha > 0 )
201 {
202 w.SetAlpha( new_alpha );
203 Widget w_c = w.FindAnyWidget( "TopSpacer" );
204 Widget w_c2 = w.FindAnyWidget( "BottomSpacer" );
205 Widget w_c3 = w.FindAnyWidget( "Title" );
206 Widget w_c4 = w.FindAnyWidget( "Detail" );
207 Widget w_c5 = w.FindAnyWidget( "Name" );
208 if ( w_c && w_c2 )
209 {
210 float new_alpha_cont = Math.Clamp( w_c.GetAlpha() - timeslice / NOTIFICATION_FADE_TIME, 0, 1 );
211 w_c.SetAlpha( new_alpha_cont );
212 w_c2.SetAlpha( new_alpha_cont );
213 w_c3.SetAlpha( new_alpha_cont );
214 w_c4.SetAlpha( new_alpha_cont );
215 }
216 if ( w_c5 )
217 {
218 float new_alpha_voice = Math.Clamp( w_c5.GetAlpha() - timeslice / NOTIFICATION_FADE_TIME, 0, 1 );
219 w_c5.SetAlpha(new_alpha_voice);
220 }
221 i++;
222 }
223 else
224 {
225 delete w;
226 m_WidgetTimers.RemoveElement( i );
228 }
229 }
230 }
231}
Icon x
Icon y
static const float NOTIFICATION_FADE_TIME
void NotificationRuntimeData(float time, NotificationData data, string detail_text)
string name
proto native WorkspaceWidget GetWorkspace()
Definition EnMath.c:7
ref ScriptInvoker m_OnNotificationAdded
static NotificationSystem GetInstance()
ref ScriptInvoker m_OnNotificationRemoved
protected ref map< NotificationRuntimeData, Widget > m_Notifications
protected float m_Width
void Update(float timeslice)
void AddVoiceNotification(string player, string name)
protected float m_TargetHeight
protected float m_CurrentHeight
void RemoveVoiceNotification(string player)
void UpdateTargetHeight()
protected float m_BackupPosX
protected ref Widget m_Root
static float m_VelArr[1]
protected ref Widget m_NotificationContent
protected bool m_OffsetEnabled
void RemoveNotification(NotificationRuntimeData data)
protected ref Widget m_VoiceContent
protected ref map< string, Widget > m_VoiceNotifications
void AddNotification(NotificationRuntimeData data)
protected ref Widget m_Spacer
protected float m_BackupPosY
void ClearVoiceNotifications()
protected ref map< string, Widget > m_WidgetTimers
proto bool Remove(func fn, int flags=EScriptInvokerRemoveFlags.ALL)
remove specific call from list
proto bool Insert(func fn, int flags=EScriptInvokerInsertFlags.IMMEDIATE)
insert method to list
proto native CGame GetGame()
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static proto float SmoothCD(float val, float target, inout float velocity[], float smoothTime, float maxVelocity, float dt)
Does the CD smoothing function - easy in | easy out / S shaped smoothing.
proto native external Widget CreateWidgets(string layout, Widget parentWidget=NULL, bool immedUpdate=true)
Create widgets from *.layout file.