DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
NotificationUI.c
См. документацию.
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
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 / 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
map
Определения ControlsXboxNew.c:4
Icon x
Icon y
void NotificationRuntimeData(float time, NotificationData data, string detail_text)
Определения NotificationSystem.c:23
proto native WorkspaceWidget GetWorkspace()
Определения EnMath.c:7
ref ScriptInvoker m_OnNotificationAdded
Определения NotificationSystem.c:87
ref ScriptInvoker m_OnNotificationRemoved
Определения NotificationSystem.c:88
const float NOTIFICATION_FADE_TIME
Определения NotificationSystem.c:72
static NotificationSystem GetInstance()
Определения NotificationSystem.c:104
float m_BackupPosX
Определения NotificationUI.c:14
ref Widget m_VoiceContent
Определения NotificationUI.c:5
ref map< NotificationRuntimeData, Widget > m_Notifications
Определения NotificationUI.c:8
float m_CurrentHeight
Определения NotificationUI.c:12
ref Widget m_Root
Определения NotificationUI.c:3
void AddNotification(NotificationRuntimeData data)
Определения NotificationUI.c:48
float m_BackupPosY
Определения NotificationUI.c:15
float m_TargetHeight
Определения NotificationUI.c:13
bool m_OffsetEnabled
Определения NotificationUI.c:18
ref map< string, Widget > m_VoiceNotifications
Определения NotificationUI.c:9
void UpdateTargetHeight()
Определения NotificationUI.c:135
void AddVoiceNotification(string player, string name)
Определения NotificationUI.c:85
void RemoveNotification(NotificationRuntimeData data)
Определения NotificationUI.c:74
ref Widget m_NotificationContent
Определения NotificationUI.c:6
void Update(float timeslice)
Определения NotificationUI.c:177
float m_Width
Определения NotificationUI.c:11
ref map< string, Widget > m_WidgetTimers
Определения NotificationUI.c:16
void ClearVoiceNotifications()
Определения NotificationUI.c:124
static float m_VelArr[1]
Определения NotificationUI.c:176
ref Widget m_Spacer
Определения NotificationUI.c:4
void UpdateOffset()
Определения NotificationUI.c:148
void NotificationUI()
Определения NotificationUI.c:20
void RemoveVoiceNotification(string player)
Определения NotificationUI.c:113
void ~NotificationUI()
Определения NotificationUI.c:38
Определения gameplay.c:317
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
Определения DayZGame.c:64
Определения EnWidgets.c:190
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.