Dayz Explorer 1.28.160049
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;
6 protected ref Widget m_NotificationContent;
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 {
186 m_CurrentHeight = Math.SmoothCD(m_CurrentHeight, m_TargetHeight, m_VelArr, 0.2, 10000, timeslice);
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 / NotificationSystem.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 / NotificationSystem.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 / NotificationSystem.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}
PlayerSpawnPresetDiscreteItemSetSlotData name
one set for cargo
Definition enmath.c:7
ref ScriptInvoker m_OnNotificationAdded
ref ScriptInvoker m_OnNotificationRemoved
static NotificationSystem GetInstance()
ref Widget m_VoiceContent
ref map< NotificationRuntimeData, Widget > m_Notifications
ref Widget m_Root
void AddNotification(NotificationRuntimeData data)
ref map< string, Widget > m_VoiceNotifications
void UpdateTargetHeight()
void AddVoiceNotification(string player, string name)
void RemoveNotification(NotificationRuntimeData data)
ref Widget m_NotificationContent
void Update(float timeslice)
ref map< string, Widget > m_WidgetTimers
void ClearVoiceNotifications()
static float m_VelArr[1]
ref Widget m_Spacer
void RemoveVoiceNotification(string player)
proto native CGame GetGame()
Icon x
Icon y
void NotificationRuntimeData(float time, NotificationData data, string detail_text)