DayZ Scripts
v1.21.156300 ยท Jun 20, 2023
 
Loading...
Searching...
No Matches
ServerBrowserTabConsolePages.c
Go to the documentation of this file.
2{
3 private bool m_IsFilterChanged;
4 private bool m_IsFilterFocused;
5 protected bool m_MouseKeyboardControlled
6
8 private Widget m_WidgetNavServers;
9
12
13 protected int m_PreviousPage;
14 protected int m_TotalServersCount;
15 protected int m_PageStartNum;
16 protected int m_PageEndNum;
17 protected int m_PagesCount;
21
25
26 protected override void Construct( Widget parent, ServerBrowserMenuNew menu, TabType type )
27 {
28 m_Root = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/new_ui/server_browser/xbox/server_browser_tab_console_pages.layout", parent );
29
30 m_ServerListScroller = ScrollWidget.Cast( m_Root.FindAnyWidget( "server_list_scroller" ) );
31 m_ServerList = SpacerBaseWidget.Cast( m_ServerListScroller.FindAnyWidget( "server_list_content" ) );
32 m_ServerListScroller.VScrollToPos01( 0 );
33
34 m_ServerListEntiers = new array<ref ServerBrowserEntry>;
37
40
41 m_Menu = menu;
42 m_TabType = type;
43
44 m_ApplyFilter = m_Root.FindAnyWidget( "apply_filter_button" );
45 m_ResetFilters = m_Root.FindAnyWidget( "reset_filter_button" );
46 m_RefreshList = m_Root.FindAnyWidget( "refresh_list_button" );
47 m_FiltersChanged = m_Root.FindAnyWidget( "unapplied_filters_notify" );
48 m_HostSort = m_Root.FindAnyWidget( "server_list_content_header_host" );
49 m_TimeSort = m_Root.FindAnyWidget( "server_list_content_header_time" );
50 m_PopulationSort = m_Root.FindAnyWidget( "server_list_content_header_population" );
51 m_SlotsSort = m_Root.FindAnyWidget( "server_list_content_header_slots" );
52 m_PingSort = m_Root.FindAnyWidget( "server_list_content_header_ping" );
53 m_FilterSearchText = m_Root.FindAnyWidget( "search_name_button" );
54 m_FilterSearchTextBox = m_Root.FindAnyWidget( "search_name_setting_option" );
55 m_LoadingText = TextWidget.Cast( m_Root.FindAnyWidget( "loading_servers_info" ) );
56 m_WidgetNavFilters = m_Root.FindAnyWidget( "filters_root_nav_wrapper" );
57 m_WidgetNavServers = m_Root.FindAnyWidget( "server_list_root_nav_wrapper" );
58
59 m_BtnPagePrev = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_prev" ) ) ;
60 m_BtnPageNext = ButtonWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_next" ) ) ;
61
62 #ifdef PLATFORM_PS4
63 m_ButtonPageLeftImg = m_Root.FindAnyWidget( "servers_navigation_page_prev_icon_ps4" );
64 m_ButtonPageRightImg = m_Root.FindAnyWidget( "servers_navigation_page_next_icon_ps4" );
65 m_Root.FindAnyWidget( "servers_navigation_page_prev_icon_xbox" ).Show( false );
66 m_Root.FindAnyWidget( "servers_navigation_page_next_icon_xbox" ).Show( false );
67 #else
68 m_ButtonPageLeftImg = m_Root.FindAnyWidget( "servers_navigation_page_prev_icon_xbox" );
69 m_ButtonPageRightImg = m_Root.FindAnyWidget( "servers_navigation_page_next_icon_xbox" );
70 m_Root.FindAnyWidget( "servers_navigation_page_prev_icon_ps4" ).Show( false );
71 m_Root.FindAnyWidget( "servers_navigation_page_next_icon_ps4" ).Show( false );
72 #endif
73
74 ShowHideConsoleWidgets();
75
76 m_Filters = new ServerBrowserFilterContainer( m_Root.FindAnyWidget( "filters_content" ), this );
77
78 m_PnlPagesPanel = m_Root.FindAnyWidget( "servers_navigation_spacer" );
79 m_PreviousPage = 1;
80 SetCurrentPage( 1 );
81 m_PnlPagesPanel.Show( true );
82 m_LoadingFinished = true;
83
84 m_Filters.OnSortChanged( m_Filters.m_SortingFilter.GetValue() );
86 UpdatePageButtons();
87
88 m_Root.SetHandler( this );
89 m_FilterSearchTextBox.SetHandler( this );
90
92
93 OnInputDeviceChanged(GetGame().GetInput().GetCurrentInputDevice());
94 }
95
97 {
98 bool is_xbox = true;
99
100#ifdef PLATFORM_PS4
101 is_xbox = false;
102#endif
103
104 m_Root.FindAnyWidget( "filters_button_wrapper" ).Show( GetGame().GetInput().IsEnabledMouseAndKeyboard() );
105
106 m_Root.FindAnyWidget( "filters_root_nav_img_lb_xbox" ).Show( is_xbox );
107 m_Root.FindAnyWidget( "filters_root_nav_img_rb_xbox" ).Show( is_xbox );
108 m_Root.FindAnyWidget( "server_list_root_nav_img_lb_xbox" ).Show( is_xbox );
109 m_Root.FindAnyWidget( "server_list_root_nav_img_rb_xbox" ).Show( is_xbox );
110
111 m_Root.FindAnyWidget( "filters_root_nav_img_l1_ps4" ).Show( !is_xbox );
112 m_Root.FindAnyWidget( "filters_root_nav_img_r1_ps4" ).Show( !is_xbox );
113 m_Root.FindAnyWidget( "server_list_root_nav_img_l1_ps4" ).Show( !is_xbox );
114 m_Root.FindAnyWidget( "server_list_root_nav_img_r1_ps4" ).Show( !is_xbox );
115 }
116
117 protected void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
118 {
119 switch (pInputDeviceType)
120 {
121 case EInputDeviceType.CONTROLLER:
122 ShowHideConsoleWidgets();
123 UpdatePageButtons();
124 m_WidgetNavFilters.Show(m_IsFilterFocused);
125 m_WidgetNavServers.Show(!m_IsFilterFocused);
126 m_MouseKeyboardControlled = false;
127 break;
128
129 default:
130 if (GetGame().GetInput().IsEnabledMouseAndKeyboardEvenOnServer())
131 {
132 m_WidgetNavFilters.Show(false);
133 m_WidgetNavServers.Show(false);
134 m_ButtonPageLeftImg.Show(false);
135 m_ButtonPageRightImg.Show(false);
136 m_MouseKeyboardControlled = true;
137 }
138 break;
139 }
140 }
141
142 override void OnLoadServersAsyncConsole( GetServersResult result_list, EBiosError error, string response )
143 {
144 if ( error != EBiosError.OK )
145 {
146 m_LoadingText.SetText( string.Format("Error: %1", ErrorModuleHandler.GetClientMessage(ErrorCategory.BIOSError, error)) );
147 m_Menu.SetServersLoadingTab( TabType.NONE );
148 m_LoadingFinished = true;
150 return;
151 }
152
153 m_PagesCount = result_list.m_Pages;
154 m_TotalServersCount = result_list.m_NumServers;
155
156 LoadEntries( result_list.m_Page, result_list.m_Results );
157
158 if (m_TotalLoadedServers == 0)
159 {
161 }
162
164 UpdatePageButtons();
165 }
166
168 {
169 string msg = "#servers_found: " + m_TotalLoadedServers;
170 if ( m_TotalLoadedServers == 0 )
171 {
172 msg = "#server_browser_tab_unable_to_get_server";
173 }
174 m_LoadingText.SetText( msg );
175 m_LoadingFinished = true;
176
177 m_Menu.SetServersLoadingTab( TabType.NONE );
178 }
179
180 protected void LoadEntries( int cur_page_index , GetServersResultRowArray page_entries )
181 {
182 int index = 0;
183 ServerBrowserEntry entry;
184 m_TotalLoadedServers = m_TotalServersCount;
185
186 if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
187 {
188 return;
189 }
190
191 // only load servers if they correspond to current page
192 if (cur_page_index != m_CurrentPageNum)
193 {
194 return;
195 }
196
197 if ( m_PagesCount && page_entries )
198 {
199 foreach ( GetServersResultRow result : page_entries )
200 {
201 if ( PassFilter( result ) )
202 {
203 string ipPort = result.GetIpPort();
204 bool isFavorited = m_Menu.IsFavorited(ipPort);
205
206 entry = GetServerEntryByIndex( index );
207 entry.FillInfo( result );
208 entry.SetFavorite(isFavorited);
209 entry.SetIsOnline(true);
210 entry.UpdateEntry();
211
212 if (isFavorited && m_OnlineFavServers.Find(ipPort) == -1)
213 {
214 m_OnlineFavServers.Insert(ipPort);
215 }
216
217 m_EntryWidgets.Insert(ipPort, entry);
218 m_EntriesSorted[m_SortType].Insert( result );
219
220 index++;
221 }
222
223 if ( !m_Menu || m_Menu.GetServersLoadingTab() != m_TabType )
224 {
225 return;
226 }
227 }
228 }
229
230 LoadExtraEntries(index);
231 m_ServerList.Update();
232 SetFocusServers();
233 }
234
235 protected ServerBrowserEntry GetServerEntryByIndex( int index )
236 {
237 ServerBrowserEntry entry;
238
239 if ( index >= 0 )
240 {
241 if ( index < m_ServerListEntiers.Count() )
242 {
243 entry = m_ServerListEntiers[index];
244 }
245 else
246 {
247 entry = new ServerBrowserEntry( m_ServerList, index, this );
248 m_ServerListEntiers.Insert(entry);
249 }
250 }
251 else
252 {
253 return null;
254 }
255
256 entry.Show( true );
257
258 return entry;
259 }
260
261 override void OnFilterChanged()
262 {
263 m_IsFilterChanged = true;
264 }
265
267 {
268 return m_LoadingFinished;
269 }
270
271 override void RefreshList()
272 {
273 for ( int i = 0; i < m_ServerListEntiers.Count(); i++ )
274 {
275 m_ServerListEntiers[i].Show(false);
276 }
277
278 for ( int j = 0; j < m_EntriesSorted.Count(); j++ )
279 {
280 array<ref GetServersResultRow> result_rows = m_EntriesSorted.GetElement(j);
281
282 if ( result_rows )
283 {
284 result_rows.Clear();
285 }
286 }
287
288 m_IsFilterChanged = false;
289 m_Filters.SaveFilters();
290
291 super.RefreshList();
292
293 m_ServerListScroller.VScrollToPos01( 0 );
294
295 m_LoadingText.SetText( "#dayz_game_loading" );
296 }
297
298 override void ResetFilters()
299 {
300 super.ResetFilters();
301
302 m_IsFilterChanged = false;
303 }
304
305 override void ApplyFilters()
306 {
307 if ( m_IsFilterChanged )
308 {
310 }
311
312 m_IsFilterChanged = false;
313 m_CurrentFilterInput = m_Filters.GetFilterOptionsConsoles();
314 RefreshList();
315 }
316
317 override void PressA()
318 {
319
320 }
321
322 override void PressX()
323 {
324 if ( (GetGame().GetTime() - m_TimeLastServerRefresh) > 1000 )
325 {
326 m_TimeLastServerRefresh = GetGame().GetTime();
327
328 if ( m_IsFilterChanged)
329 {
331 }
332 m_OnlineFavServers.Clear();
333 RefreshList();
334 }
335
336 }
337
338 override void PressY()
339 {
340 switch ( m_SelectedPanel )
341 {
342 case SelectedPanel.BROWSER:
343 {
344 if ( m_SelectedServer )
345 {
346 m_Menu.ServerListFocus( true, m_SelectedServer.ToggleFavorite() );
347 }
348 break;
349 }
350 case SelectedPanel.FILTERS:
351 {
352 if ( m_Filters )
353 {
354 m_Filters.ResetFilters();
355 }
356 break;
357 }
358 }
359 }
360
361 override void Left()
362 {
363 if ( !m_IsFilterFocused )
364 {
365 int curr_page = GetCurrentPage();
366 m_PreviousPage = curr_page;
367 if ( curr_page > 1 )
368 {
369 SetCurrentPage( curr_page - 1 );
370 UpdatePageButtons();
371 }
372 }
373 }
374
375 override void LeftHold()
376 {
377 if ( !m_IsFilterFocused )
378 {
379 if ( (GetGame().GetTime() - m_TimeLastServerRefreshHoldButton) > 100 )
380 {
381 m_TimeLastServerRefreshHoldButton = GetGame().GetTime();
382 Left();
383 }
384 }
385 }
386
387 override void LeftRelease()
388 {
389 if ( !m_IsFilterFocused && GetCurrentPage() != m_PreviousPage )
390 {
391 RefreshList();
392 }
393 }
394
395 override void Right()
396 {
397 if ( !m_IsFilterFocused )
398 {
399 int curr_page = GetCurrentPage();
400 m_PreviousPage = curr_page;
401 if ( curr_page < m_PagesCount )
402 {
403 SetCurrentPage( curr_page + 1 );
404 UpdatePageButtons();
405 }
406 }
407 }
408
409 override void RightHold()
410 {
411 if ( !m_IsFilterFocused )
412 {
413 if ( (GetGame().GetTime() - m_TimeLastServerRefreshHoldButton) > 100 )
414 {
415 m_TimeLastServerRefreshHoldButton = GetGame().GetTime();
416 Right();
417 }
418 }
419 }
420
421 override void RightRelease()
422 {
423 if ( !m_IsFilterFocused && GetCurrentPage() != m_PreviousPage )
424 {
425 RefreshList();
426 }
427 }
428
429 override void PressSholderLeft()
430 {
431 if ( m_IsFilterFocused )
432 {
433 SetFocusServers();
434 }
435 else
436 {
438 }
439 }
440
441 override void PressSholderRight()
442 {
443 if ( m_IsFilterFocused )
444 {
445 SetFocusServers();
446 }
447 else
448 {
450 }
451 }
452 override void Focus()
453 {
454 if ( m_EntryWidgets.Contains( m_CurrentSelectedServer ) )
455 {
458 }
459
461 if ( entries && entries.Count() > 0 )
462 SetFocusServers();
463 else
465 }
466
467
469 {
470 SetEnableFilters(true);
471 SetEnableServers(false);
472
473 // if loaded servers is 0, then hide Top navigation menu <Left / Right>
474 if (!m_MouseKeyboardControlled)
475 {
476 m_WidgetNavFilters.Show(true);
477 m_WidgetNavServers.Show(false);
478 }
479
480 m_Filters.Focus();
481 m_IsFilterFocused = true;
482
483 UpdatePageButtons();
484 }
485
487 {
488 SetEnableServers(true);
489 SetEnableFilters(false);
490
491 if (!m_MouseKeyboardControlled)
492 {
493 m_WidgetNavFilters.Show(false);
494 m_WidgetNavServers.Show(true);
495 }
496
498 if ( entries && entries.Count() > 0 )
499 {
500 m_EntryWidgets.Get(entries.Get(0).GetIpPort()).Focus();
501 }
502 else
503 {
504 SetFocus( null );
505 }
506
507 m_IsFilterFocused = false;
508 m_Menu.ShowYButton(true);
509 m_Menu.ShowAButton(true);
510
511 UpdatePageButtons();
512 }
513
514 void SetEnableFilters(bool enable)
515 {
516 Widget w_filters = m_Root.FindAnyWidget("filters_content");
517 Widget w_content = m_Root.FindAnyWidget("server_list_scroller");
518 w_content.Enable( !enable );
519
520 if ( enable )
521 {
522 SetFocus( ButtonWidget.Cast(w_filters.FindWidget("sort_button")) );
523 }
524 }
525
526 void SetEnableServers(bool enable)
527 {
528 Widget w_filters = m_Root.FindAnyWidget("filters_content");
529 Widget w_content = m_Root.FindAnyWidget("server_list_scroller");
530 w_content.Enable( enable );
531 }
532
534 {
535 TextWidget wgt_page_stat = TextWidget.Cast( m_Root.FindAnyWidget( "servers_navigation_page_status" ) );
536
537 wgt_page_stat.SetText( GetCurrentPage().ToString() +" / "+ m_PagesCount.ToString() );
538
539 if ( !m_IsFilterFocused && (m_PagesCount > 1) && !m_MouseKeyboardControlled )
540 {
541 bool can_left = (GetCurrentPage() > 1);
542 m_ButtonPageLeftImg.Show( can_left );
543 m_BtnPagePrev.Show( can_left );
544
545 bool can_right = (GetCurrentPage() < m_PagesCount);
546 m_ButtonPageRightImg.Show( can_right );
547 m_BtnPageNext.Show( can_right );
548 }
549 else
550 {
551 m_ButtonPageLeftImg.Show( false );
552 m_BtnPagePrev.Show( false );
553 m_ButtonPageRightImg.Show( false );
554 m_BtnPageNext.Show( false );
555 }
556 }
557
558 override bool OnClick( Widget w, int x, int y, int button )
559 {
560 super.OnClick( w, x, y, button );
561
562 if ( button == MouseState.LEFT )
563 {
564 if ( w == m_ResetFilters )
565 {
566 ResetFilters();
567 }
568 else if ( w == m_ApplyFilter )
569 {
570 ApplyFilters();
571 return true;
572 }
573 else if ( w == m_RefreshList )
574 {
576 {
577 PressX();
578 }
579 else
580 {
581 RefreshList();
582 }
583
584 return true;
585 }
586 else if ( w == m_BtnPagePrev )
587 {
588 Left();
589 return true;
590 }
591 else if ( w == m_BtnPageNext )
592 {
593 Right();
594 return true;
595 }
596 }
597 return false;
598 }
599
600 //Coloring functions (Until WidgetStyles are useful)
601 override void ColorHighlight( Widget w )
602 {
603 if ( !w )
604 {
605 return;
606 }
607
608 w.SetColor( ARGB( 255, 200, 0, 0) );
609 }
610
611 override void ColorNormal( Widget w )
612 {
613 if ( !w )
614 {
615 return
616 }
617
618 if ( (w.GetFlags() & WidgetFlags.IGNOREPOINTER) == WidgetFlags.IGNOREPOINTER )
619 {
620 return;
621 }
622
623 if ( w.IsInherited( ButtonWidget ) )
624 {
625 ButtonWidget button = ButtonWidget.Cast( w );
626 button.SetTextColor( ARGB( 255, 255, 255, 255 ) );
627 }
628 else if ( !w.IsInherited( EditBoxWidget ) )
629 {
630 w.SetColor( ARGB( 0, 255, 255, 255 ) );
631 }
632
633 TextWidget text1 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text" ) );
634 TextWidget text2 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_text_1" ) );
635 TextWidget text3 = TextWidget.Cast(w.FindAnyWidget( w.GetName() + "_label" ) );
636 ImageWidget image = ImageWidget.Cast( w.FindAnyWidget( w.GetName() + "_image" ) );
637
638 Widget option = Widget.Cast( w.FindAnyWidget( w.GetName() + "_option_wrapper" ) );
639
640 if ( text1 )
641 {
642 text1.SetColor( ARGB( 255, 255, 255, 255 ) );
643 }
644
645 if ( text2 )
646 {
647 text2.SetColor( ARGB( 255, 255, 255, 255 ) );
648 }
649
650 if ( text3 )
651 {
652 text3.SetColor( ARGB( 255, 255, 255, 255 ) );
653 w.SetAlpha(0);
654 }
655
656 if ( image )
657 {
658 image.SetColor( ARGB( 255, 255, 255, 255 ) );
659 }
660
661 if ( option )
662 {
663 option.SetColor( ARGB( 150, 255, 255, 255 ) );
664 }
665 }
666
667 override void ColorDisable( Widget w )
668 {
669 #ifdef PLATFORM_WINDOWS
670 SetFocus( null );
671 #endif
672
673 ButtonWidget button = ButtonWidget.Cast( w );
674 if ( button )
675 {
676 button.SetTextColor( ColorManager.COLOR_DISABLED_TEXT );
677 }
678 }
679}
protected void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
Definition Inventory.c:164
ActionInput GetInput()
EBiosError
Possible Error codes for bios API. This is the list of errors that can be returned from bios API....
ESortType
proto string ToString()
ErrorCategory
ErrorCategory - To decide what ErrorHandlerModule needs to be called and easily identify where it cam...
Icon x
Icon y
float GetTime()
protected Widget m_SlotsSort
protected Widget m_PopulationSort
protected ref ServerBrowserFilterContainer m_Filters
protected ServerBrowserMenuNew m_Menu
void Right()
protected Widget m_ResetFilters
void ApplyFilters()
protected int m_CurrentPageNum
protected TextWidget m_LoadingText
protected ref map< ESortType, ref array< ref GetServersResultRow > > m_EntriesSorted
void ScrollToEntry(ServerBrowserEntry entry)
protected string m_CurrentSelectedServer
protected ref map< string, ref ServerBrowserEntry > m_EntryWidgets
protected TabType m_TabType
TabType
protected Widget m_ApplyFilter
protected ref GetServersInput m_CurrentFilterInput
protected Widget m_RefreshList
void ResetFilters()
protected Widget m_TimeSort
protected bool m_LoadingFinished
protected Widget m_HostSort
protected ESortType m_SortType
protected int m_TotalLoadedServers
protected Widget m_FilterSearchText
protected SpacerBaseWidget m_ServerList
protected SelectedPanel m_SelectedPanel
void Left()
protected Widget m_FiltersChanged
int GetCurrentPage()
protected ServerBrowserEntry m_SelectedServer
protected ButtonWidget m_BtnPagePrev
protected Widget m_FilterSearchTextBox
protected ButtonWidget m_BtnPageNext
protected ScrollWidget m_ServerListScroller
void SetCurrentPage(int page_num)
protected ref set< string > m_OnlineFavServers
protected Widget m_PingSort
protected bool m_Loading
protected Widget m_Root
Definition SizeToChild.c:91
proto native Mission GetMission()
proto native WorkspaceWidget GetWorkspace()
proto int GetTime()
returns mission time in milliseconds
static int COLOR_DISABLED_TEXT
The error handler itself, for managing and distributing errors to modules Manages the ErrorHandlerMod...
static proto string GetClientMessage(ErrorCategory category, int code, string additionalInfo="")
Gets the Client Message for specified error.
GetServersResult the output structure of the GetServers operation.
ref GetServersResultRowArray m_Results
ScriptInvoker GetOnInputDeviceChanged()
Definition gameplay.c:823
proto bool Insert(func fn, int flags=EScriptInvokerInsertFlags.IMMEDIATE)
insert method to list
protected override void LoadEntries(int cur_page_index, GetServersResultRowArray page_entries)
override bool PassFilter(GetServersResultRow result)
protected override void LoadExtraEntries(int index)
protected void LoadEntries(int cur_page_index, GetServersResultRowArray page_entries)
protected TextWidget m_PnlPagesLoadingText
protected void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
protected ServerBrowserEntry GetServerEntryByIndex(int index)
override void ColorDisable(Widget w)
protected ref array< ref ServerBrowserEntry > m_ServerListEntiers
protected bool m_MouseKeyboardControlled private Widget m_WidgetNavFilters
protected Widget m_ButtonPageRightImg
override void ColorNormal(Widget w)
protected override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
protected int m_TimeLastServerRefreshHoldButton
protected Widget m_ButtonPageLeftImg
override bool OnClick(Widget w, int x, int y, int button)
override void ColorHighlight(Widget w)
override void OnLoadServersAsyncConsole(GetServersResult result_list, EBiosError error, string response)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
MouseState
Definition EnSystem.c:311
static proto string ToString(void var, bool type=false, bool name=false, bool quotes=true)
Return string representation of variable.
WidgetFlags
Definition EnWidgets.c:57
proto native void SetFocus(Widget w)
proto native external Widget CreateWidgets(string layout, Widget parentWidget=NULL, bool immedUpdate=true)
Create widgets from *.layout file.
EInputDeviceType
Definition input.c:3
int ARGB(int a, int r, int g, int b)
Definition proto.c:322