DayZ 1.30
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено
ServerBrowserTabPc.c
См. документацию.
2{
3 protected const int SERVERS_VISIBLE_COUNT = 24;
4 protected const int PAGES_BUTTONS_COUNT = 10;
5
6 protected int m_TotalServersCount; //UNUSED
7 protected int m_PageIndex;
8 protected int m_PageStartNum;
9 protected int m_PageEndNum;
10 protected int m_PagesCount;
11 protected int m_ServersEstimateCount;
12
13 protected Widget m_PnlPagesPanel;
15 protected ButtonWidget m_BtnPagesFirst;
16 protected ButtonWidget m_BtnPagesLast;
17
22
25
26 protected ref TStringArray m_TempTime = new TStringArray();
27
28 protected override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
29 {
30 #ifdef PLATFORM_CONSOLE
31 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/new_ui/server_browser/xbox/server_browser_tab.layout", parent);
32 #else
33 #ifdef PLATFORM_WINDOWS
34 m_Root = g_Game.GetWorkspace().CreateWidgets("gui/layouts/new_ui/server_browser/pc/server_browser_tab_pages.layout", parent);
35 #endif
36 #endif
37
38 m_ServerListScroller = ScrollWidget.Cast(m_Root.FindAnyWidget("server_list_scroller"));
39 m_ServerList = SpacerBaseWidget.Cast(m_ServerListScroller.FindAnyWidget("server_list_content"));
40 m_ServerListScroller.VScrollToPos01(0);
41
47
56
57 m_Menu = menu;
58 m_TabType = type;
59
60 m_RightAreaHeaderText = TextWidget.Cast(m_Root.FindAnyWidget("right_area_header_text"));
61 m_BtnShowFilters = ButtonWidget.Cast(m_Root.FindAnyWidget("show_filters_button"));
62
63 m_DetailsRoot = m_Root.FindAnyWidget("details_root");
64 m_BtnShowDetails = ButtonWidget.Cast(m_Root.FindAnyWidget("show_details_button"));
65
66 m_FilterRoot = m_Root.FindAnyWidget("filters_root");
67 m_FilterContent = m_Root.FindAnyWidget("filters_content");
68 m_ApplyFilter = m_Root.FindAnyWidget("apply_filter_button");
69 m_RefreshList = m_Root.FindAnyWidget("refresh_list_button");
70 m_FiltersChanged = m_Root.FindAnyWidget("unapplied_filters_notify");
71 m_HostSort = m_Root.FindAnyWidget("server_list_content_header_host");
72 m_TimeSort = m_Root.FindAnyWidget("server_list_content_header_time");
73 m_PopulationSort = m_Root.FindAnyWidget("server_list_content_header_population");
74 m_SlotsSort = m_Root.FindAnyWidget("server_list_content_header_slots");
75 m_PingSort = m_Root.FindAnyWidget("server_list_content_header_ping");
76 m_MapSort = m_Root.FindAnyWidget("server_list_content_header_map");
77
78 m_FilterSearchText = m_Root.FindAnyWidget("search_name_setting");
79 m_FilterSearchTextBox = m_Root.FindAnyWidget("search_name_setting_option");
80 m_FilterSearchIP = m_Root.FindAnyWidget("search_ip_setting");
81 m_FilterSearchIPBox = m_Root.FindAnyWidget("search_ip_setting_option");
82
83 m_FilterPanelAccTime = m_Root.FindAnyWidget("accelerated_time_setting");
84 m_FilterPanelPing = m_Root.FindAnyWidget("ping_setting");
85 //m_FilterPanelPing.SetHandler(this);
86
87 m_LoadingText = TextWidget.Cast(m_Root.FindAnyWidget("loading_servers_info"));
88
90
91 m_Filters = new ServerBrowserFilterContainer(m_Root.FindAnyWidget("filters_content"), this);
92
93 m_Root.SetHandler(this);
94
95 SetSort(ESortType.HOST, ESortOrder.ASCENDING);
96
98
99 int page_button_num = 1;
100 ButtonWidget page_button = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page" + page_button_num));
101
102 if (PAGES_BUTTONS_COUNT < 3 || PAGES_BUTTONS_COUNT > 10)
103 {
104 Error("ServerBrowserTabPage->PAGES_BUTTONS_COUNT must be in range 3 - 10!");
105 return;
106 }
107
108 while (page_button)
109 {
110 page_button.Show(false);
111
112 if (page_button_num <= PAGES_BUTTONS_COUNT)
113 {
114 m_BtnPages.Insert(page_button);
115 }
116
117 page_button_num++;
118 page_button = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page"+ page_button_num));
119 }
120
121 m_ResetFilters = ButtonWidget.Cast(m_Root.FindAnyWidget( "reset_filter_button"));
122
123 m_PnlPagesPanel = m_Root.FindAnyWidget("servers_navigation_spacer");
124 m_BtnPagePrev = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_prev"));
125 m_BtnPageNext = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_next"));
126 m_BtnPagesFirst = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page_first"));
127 m_BtnPagesLast = ButtonWidget.Cast(m_Root.FindAnyWidget("servers_navigation_page_last"));
128 m_PageIndex = 0;
129 m_PnlPagesPanel.Show(true);
130
132
133 m_Details = new ServerBrowserDetailsContainer(m_Root.FindAnyWidget("details_content"), this);
134
135 if (m_TabType == TabType.FAVORITE || m_TabType == TabType.LAN)
136 {
137 m_Root.FindAnyWidget("filters_content").Show(false);
138 m_Root.FindAnyWidget("reset_filter_button").Show(false);
139 m_ApplyFilter.Show(false);
140 m_Root.FindAnyWidget("spacer").Show(false);
141 m_Root.FindAnyWidget("spacer1").Show(false);
142 m_Root.FindAnyWidget("spacer5").Show(false);
143 m_BtnShowFilters.Show(false);
144 m_FilterRoot.Show(true);
145 }
146
147 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
148 {
150 }
151 else
152 {
154 }
155
156 #ifdef DIAG_DEVELOPER
157 InitDummyServers();
158 #endif
159 }
160
161 override void RefreshList()
162 {
163 #ifdef DIAG_DEVELOPER
164 if (m_DummyServersEnabled)
165 {
166 RefreshDummyList();
167 return;
168 }
169 #endif
170
171 int entriesSortedCount = m_EntriesSorted.Count();
172 for ( int i = 0; i < entriesSortedCount; ++i )
173 {
174 m_EntriesSorted.GetElement(i).Clear();
175 }
176
177 m_ServerListEntries.Clear();
178
180
181 m_LoadingFinished = false;
182 m_Loading = true;
186 m_PageIndex = 0;
187 m_SelectedServer = null;
188
189 super.RefreshList();
190
191 m_ServerListScroller.VScrollToPos01( 0 );
192
197 }
198
199 override void ResetFilters()
200 {
201 m_Filters.ResetFilters();
202
204
205 if (m_Loading)
206 {
208 }
209 }
210
211 override void ApplyFilters()
212 {
213 m_Filters.SaveFilters();
214 RefreshList();
217 }
218
220 {
222
223 m_LoadingFinished = true;
224 m_Loading = false;
225
227
230
232
233 if (m_TotalLoadedServers == 0)
234 {
235 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
237 }
238 }
239
240 override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
241 {
242 #ifdef DIAG_DEVELOPER
243 if (m_DummyServersEnabled)
244 return;
245 #endif
246
247 if (result_list)
248 {
249 int count = result_list.m_Results.Count();
250 if (count > 0)
251 {
252 for (int i = 0; i < count; i++)
253 {
254 GetServersResultRow result = result_list.m_Results[i];
256
257 result.m_SortName = result.m_Name.ToInt();
258 result.m_SortTime = GetTimeOfDayEnum(result.m_TimeOfDay);
259
260 if (PassFilter(result))
261 {
262 int sorted_index = AddSorted(result);
264 {
267 }
268 }
269
270 if (!m_Menu || m_Menu.GetServersLoadingTab() != m_TabType)
271 {
272 return;
273 }
274 }
275 }
276 else
277 {
278 m_Menu.SetServersLoadingTab(TabType.NONE);
279 }
280 }
281 else
282 {
283 m_Menu.SetServersLoadingTab(TabType.NONE);
284 }
285
286 if (response == "thelastone")
287 {
289 }
290 else
291 {
293 }
294
297 }
298
303
304 override bool OnClick(Widget w, int x, int y, int button)
305 {
306 super.OnClick(w, x, y, button);
307
308 if (button == MouseState.LEFT)
309 {
310 if (w == m_ResetFilters)
311 {
312 ResetFilters();
313 }
314 else if (w == m_ApplyFilter)
315 {
316 ApplyFilters();
317 return true;
318 }
319 else if (w == m_RefreshList)
320 {
322 {
324 }
325 else
326 {
327 RefreshList();
328 }
329
330 return true;
331 }
332 else if (w == m_BtnPagePrev)
333 {
335 return true;
336 }
337 else if (w == m_BtnPageNext)
338 {
340 return true;
341 }
342 else if (w == m_BtnPagesLast)
343 {
345 return true;
346 }
347 else if (w == m_BtnPagesFirst)
348 {
350 return true;
351 }
352 else if (w == m_BtnShowDetails)
353 {
355 return true;
356 }
357 else if (w == m_BtnShowFilters)
358 {
360 return true;
361 }
362 else
363 {
364 bool click = OnClickPage(w);
365 if (click)
366 {
367 return true;
368 }
369
370 return false;
371 }
372 }
373 return false;
374 }
375
376 override bool OnMouseEnter(Widget w, int x, int y)
377 {
378 if (IsFocusable(w))
379 {
381
382 if (w == m_FilterSearchText)
383 {
385 }
386 else if (w == m_FilterSearchIP)
387 {
389 }
390
391 return true;
392 }
393 return false;
394 }
395
396 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
397 {
398 if (IsFocusable(w))
399 {
400 ColorNormal(w);
401
402 if (w == m_FilterSearchText || w == m_FilterSearchIP)
403 {
404 SetFocus( null );
405 }
406
407 return true;
408 }
409 return false;
410 }
411
412 override bool OnMouseButtonUp( Widget w, int x, int y, int button )
413 {
414 if ( button == MouseState.LEFT )
415 {
416 if ( w == m_HostSort )
417 {
418 ToggleSort( ESortType.HOST );
420 return true;
421 }
422 else if ( w == m_TimeSort )
423 {
424 ToggleSort( ESortType.TIME );
426 return true;
427 }
428 else if ( w == m_PopulationSort )
429 {
430 ToggleSort( ESortType.POPULATION );
432 return true;
433 }
434 else if ( w == m_SlotsSort )
435 {
436 ToggleSort( ESortType.SLOTS );
438 return true;
439 }
440 else if ( w == m_PingSort )
441 {
442 ToggleSort( ESortType.PING );
444 return true;
445 }
446 else if ( w == m_MapSort )
447 {
448 ToggleSort( ESortType.MAP );
450 return true;
451 }
452 }
453 return false;
454 }
455
456 override void OnFilterChanged()
457 {
458 //m_FiltersChanged.Show(true);
459
461
462 if (m_Loading)
463 {
465 }
466 }
467
469 {
470 if ( m_PageIndex > 0 )
471 {
473 }
474 else
475 {
477 }
478 }
479
481 {
482 if ( m_PageIndex < (m_PagesCount - 1) )
483 {
485 }
486 else
487 {
488 SetPageIndex( 0 );
489 }
490 }
491
493 {
495 }
496
498 {
499 SetPageIndex( 0 );
500 }
501
503 {
504 for ( int i = 0; i < m_BtnPages.Count(); ++i )
505 {
506 if ( m_BtnPages[i] == w )
507 {
508 SetPageIndex( m_PageStartNum + i - 1 );
509 return true;
510 }
511 }
512
513 return false;
514 }
515
516 void SetPageIndex(int page_index)
517 {
518 m_PageIndex = page_index;
521 Focus();
522 }
523
525 {
526 ESortOrder order = ESortOrder.ASCENDING;
527
528 if ( m_SortType != type )
529 {
530 if ( m_SortInverted[type] == true )
531 {
532 m_EntriesSorted[type].Invert();
533 }
534
535 m_SortInverted[type] = false;
536 }
537 else
538 {
539 if ( m_SortOrder == ESortOrder.ASCENDING )
540 {
541 m_EntriesSorted[type].Invert();
542 m_SortInverted[type] = true;
543 order = ESortOrder.DESCENDING;
544 }
545 else
546 {
547 m_EntriesSorted[type].Invert();
548 m_SortInverted[type] = false;
549 }
550 }
551
552 SetSort( type, order );
553 }
554
555 override void SetSort( ESortType type, ESortOrder order )
556 {
557 super.SetSort( type, order);
558
559 #ifdef PLATFORM_WINDOWS
560 m_Root.FindAnyWidget( "host_sort" ).Show( false );
561 m_Root.FindAnyWidget( "population_sort" ).Show( false );
562 m_Root.FindAnyWidget( "slots_sort" ).Show( false );
563
564 m_Root.FindAnyWidget( "time_sort" ).Show( false );
565 m_Root.FindAnyWidget( "ping_sort" ).Show( false );
566 m_Root.FindAnyWidget( "map_sort" ).Show( false );
567
568 TextWidget root;
569 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_host_label" ) );
570 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
571 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_population_label" ) );
572 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
573 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_slots_label" ) );
574 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
575
576 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_ping_label" ) );
577 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
578 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_time_label" ) );
579 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
580
581 string r_name;
582 string w_name;
583
584 switch ( type )
585 {
586 case ESortType.HOST:
587 {
588 r_name = "server_list_content_header_host_label";
589 w_name = "host_sort";
590 break;
591 }
592 case ESortType.TIME:
593 {
594 r_name = "server_list_content_header_time_label";
595 w_name = "time_sort";
596 break;
597 }
598 case ESortType.POPULATION:
599 {
600 r_name = "server_list_content_header_population_label";
601 w_name = "population_sort";
602 break;
603 }
604 case ESortType.SLOTS:
605 {
606 r_name = "server_list_content_header_slots_label";
607 w_name = "slots_sort";
608 break;
609 }
610 case ESortType.PING:
611 {
612 r_name = "server_list_content_header_ping_label";
613 w_name = "ping_sort";
614 break;
615 }
616 case ESortType.MAP:
617 {
618 r_name = "server_list_content_header_map_label";
619 w_name = "map_sort";
620 break;
621 }
622 }
623
624 root = TextWidget.Cast( m_Root.FindAnyWidget( r_name ) );
625 root.SetColor( ARGBF( 1, 1, 0, 0 ) );
626
627 m_Root.FindAnyWidget( w_name ).Show( true );
628 m_Root.FindAnyWidget( w_name + "_asc" ).Show( !m_SortOrder );
629 m_Root.FindAnyWidget( w_name + "_dsc" ).Show( m_SortOrder );
630 #endif
631 }
632
633 int GetTimeOfDayEnum( string time_of_day )
634 {
635 m_TempTime.Clear();
636
637 time_of_day.Split( ":", m_TempTime );
638
639 int minutes = 0;
640
641 if ( m_TempTime.Count() > 0 )
642 {
643 int h = m_TempTime[0].ToInt();
644
645 if ( h >= 5 )
646 {
647 h -= 5;
648 }
649 else
650 {
651 h += 24;
652 }
653
654 minutes = h * 60;
655 }
656
657 if ( m_TempTime.Count() > 1 )
658 {
659 int m = m_TempTime[0].ToInt();
660 minutes += m;
661 }
662
663 return minutes;
664 }
665
666 // Return sorted index
667 override int AddSorted( GetServersResultRow entry )
668 {
669 int index_host = SortedInsert( entry, ESortType.HOST );
670 int index_time = SortedInsert( entry, ESortType.TIME );
671 int index_popu = SortedInsert( entry, ESortType.POPULATION );
672 int index_slot = SortedInsert( entry, ESortType.SLOTS );
673 int index_ping = SortedInsert( entry, ESortType.PING );
674 int index_favo = SortedInsert( entry, ESortType.FAVORITE );
675 int index_pass = SortedInsert( entry, ESortType.PASSWORDED );
676 int index_map = SortedInsert( entry, ESortType.MAP );
677
678 switch ( m_SortType )
679 {
680 case ESortType.HOST:
681 return index_host;
682 case ESortType.TIME:
683 return index_time;
684 case ESortType.POPULATION:
685 return index_popu;
686 case ESortType.SLOTS:
687 return index_slot;
688 case ESortType.PING:
689 return index_ping;
690 case ESortType.FAVORITE:
691 return index_favo;
692 case ESortType.PASSWORDED:
693 return index_pass;
694 case ESortType.MAP:
695 return index_map;
696 }
697
698 return 0;
699 }
700
702 {
703 return SortedInsertEx(entry, sort_type, m_SortInverted[sort_type]);
704 }
705
706 private int SortedInsertEx(GetServersResultRow entry, ESortType sortType, bool isDescending)
707 {
709 int indexMax = list.Count() - 1;
710 int indexMin = 0;
711 int targetIndex = Math.Floor( indexMax / 2 );
712 int comparisonMultiplier = 1;
713
714 // if order is descending, then invert comparison results
715 if (isDescending == true)
716 {
717 comparisonMultiplier = -1;
718 }
719
720 if ( indexMax == -1 )
721 {
722 list.Insert( entry );
723 return 0;
724 }
725
726 while ( true )
727 {
728 int comparisonResult = comparisonMultiplier * entry.CompareTo(list[targetIndex], sortType);
729
730 if ((indexMax - indexMin) <= 1)
731 {
732 for (int i = indexMin; i <= indexMax; i++ )
733 {
734 comparisonResult = comparisonMultiplier * entry.CompareTo(list[i], sortType);
735
736 if ( comparisonResult > 0 )
737 {
738 list.InsertAt( entry, i );
739 return i;
740 }
741 }
742
743 // adding entry AFTER indexMax
744 targetIndex = Math.Min(indexMax + 1, list.Count());
745 list.InsertAt(entry, targetIndex);
746 return targetIndex;
747 }
748
749 if (comparisonResult == 0)
750 {
751 list.InsertAt(entry, targetIndex);
752 return targetIndex;
753 }
754
755 if (comparisonResult > 0)
756 {
757 indexMax = targetIndex;
758 }
759
760 else if (comparisonResult < 0)
761 {
762 indexMin = targetIndex;
763 }
764
765 targetIndex = indexMin + Math.Floor((indexMax - indexMin) / 2);
766 }
767
768 return 0;
769 }
770
771 // DEPRECATED
773 {
775
776 int i;
777 int index_min = 0;
778 int index_max = list.Count() - 1;
779 int target_index = Math.Floor( index_max / 2 );
780
781 if ( index_max == -1 )
782 {
783 list.Insert( entry );
784 return 0;
785 }
786
787 if ( sort_type == ESortType.HOST )
788 {
789 string entry_value_str = entry.GetValueStr(ESortType.HOST);
790
791 while ( true )
792 {
793 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
794
795 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
796 {
797 for ( i = index_min; i <= index_max; i++ )
798 {
799 if ( entry_value_str <= list[i].GetValueStr(ESortType.HOST) )
800 {
801 list.InsertAt( entry, i );
802 return i;
803 }
804 }
805
806 index_max++;
807 list.InsertAt( entry, index_max );
808 return target_index;
809 }
810 else if ( entry_value_str < target_value_str )
811 {
812 index_max = target_index;
813 target_index = Math.Floor( target_index / 2 );
814 }
815 else if ( entry_value_str > target_value_str )
816 {
817 index_min = target_index;
818 target_index += Math.Floor( (index_max - index_min) / 2 );
819 }
820 }
821 }
822 else
823 {
824 int entry_value_int = entry.GetValueInt( sort_type );
825
826 while ( true )
827 {
828 int target_value_int = list[target_index].GetValueInt( sort_type );
829
830 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
831 {
832 for ( i = index_min; i <= index_max; i++ )
833 {
834 if ( entry_value_int <= list[i].GetValueInt( sort_type ) )
835 {
836 list.InsertAt( entry, i );
837 return i;
838 }
839 }
840
841 index_max++;
842 list.InsertAt( entry, index_max );
843 return target_index;
844 }
845 else if ( entry_value_int < target_value_int )
846 {
847 index_max = target_index;
848 target_index = Math.Floor( target_index / 2 );
849 }
850 else if ( entry_value_int > target_value_int )
851 {
852 index_min = target_index;
853 target_index += Math.Floor( (index_max - index_min) / 2 );
854 }
855 }
856 }
857
858 return target_index;
859 }
860
862 {
864 if (m_PagesCount < 1)
865 m_PagesCount = 1;
866
867 if ( m_PagesCount > 1 )
868 {
869 m_PnlPagesPanel.Show( true );
870
871 int i;
872 int btn_index_center = Math.Round( PAGES_BUTTONS_COUNT / 2) - 1;
873 m_PageStartNum = 1;
875
877 {
879
880 // Pages are less like buttons - changing selected button
881 for ( i = 1; i <= m_BtnPages.Count(); ++i )
882 {
883 bool is_page_button_enable = ( i <= m_PagesCount );
884
885 int page_index = (i - 1);
886 m_BtnPages[page_index].Show( is_page_button_enable );
887 m_BtnPages[page_index].SetText( i.ToString() );
888
889 if ( m_PageIndex == page_index )
890 {
891 m_BtnPages[page_index].SetState( true );
892 }
893 else
894 {
895 m_BtnPages[page_index].SetState( false );
896 }
897 }
898 }
899 else
900 {
901 // Pages are more like buttons
902 if ( m_PageIndex <= btn_index_center )
903 {
904 //Left side (start of pages)
905 //m_PageStartNum = 1;
906 //m_PageEndNum = PAGES_BUTTONS_COUNT;
907 }
908 else
909 {
910 m_PageStartNum = m_PageIndex - btn_index_center + 1;
911 m_PageEndNum = m_PageIndex + (PAGES_BUTTONS_COUNT - btn_index_center);
912
914 {
915 // Right side (end of pages)
918 }
919 }
920
921
922 // Button Selection
923 int selected_btn_index = m_PageIndex;
924 if ( m_PageIndex > btn_index_center )
925 {
926 if ( m_PageEndNum == m_PagesCount )
927 {
928 //Right
929 selected_btn_index = PAGES_BUTTONS_COUNT - (m_PagesCount - m_PageIndex);
930 }
931 else
932 {
933 //Center
934 selected_btn_index = btn_index_center;
935 }
936 }
937
938
939 for ( i = 0; i < m_BtnPages.Count(); ++i )
940 {
941 m_BtnPages[i].SetText( (m_PageStartNum + i).ToString() );
942 m_BtnPages[i].SetState( ( i == selected_btn_index ) );
943 }
944 }
945
946 // Button GoTo Prev Page
947 if ( m_PageIndex > 0 )
948 {
949 m_BtnPagePrev.SetText( "<" );
950 m_BtnPagePrev.Enable( true );
951 }
952 else
953 {
954 m_BtnPagePrev.SetText( "" );
955 m_BtnPagePrev.Enable( false );
956 }
957
958 // Button GoTo Next Page
959 if ( m_PageIndex < (m_PagesCount - 1) )
960 {
961 m_BtnPageNext.SetText( ">" );
962 m_BtnPageNext.Enable( true );
963 }
964 else
965 {
966 m_BtnPageNext.SetText( "" );
967 m_BtnPageNext.Enable( false );
968 }
969
970 // Button GoTo First Page
971 if ( m_PageStartNum == 1 )
972 {
973 m_BtnPagesFirst.SetText( "" );
974 m_BtnPagesFirst.Enable( false );
975 }
976 else
977 {
978 m_BtnPagesFirst.SetText( "<<" );
979 m_BtnPagesFirst.Enable( true );
980 }
981
982 // Button GoTo Last Page
983 if ( m_PageEndNum == m_PagesCount )
984 {
985 m_BtnPagesLast.SetText( "" );
986 m_BtnPagesLast.Enable( false );
987 }
988 else
989 {
990 m_BtnPagesLast.SetText( ">>" );
991 m_BtnPagesLast.Enable( true );
992 }
993 }
994 else
995 {
996 m_PnlPagesPanel.Show(false);
997 }
998 }
999
1000 override void UpdateServerList()
1001 {
1002 int lastFilledIndexOnPage = 0;
1004
1005 ServerBrowserEntry entry;
1006
1007 m_EntryWidgets.Clear();
1008
1009 for (int i = 0; i < SERVERS_VISIBLE_COUNT; ++i)
1010 {
1011 int serverIndex = i + (SERVERS_VISIBLE_COUNT * m_PageIndex);
1012
1013 if (serverIndex < m_EntriesSorted[m_SortType].Count())
1014 {
1015 GetServersResultRow server_info = m_EntriesSorted[m_SortType][serverIndex];
1016
1017 if (server_info.m_Favorite)
1018 {
1019 m_OnlineFavServers.Insert(server_info.GetIpPort());
1020 }
1021
1022 server_info.m_IsSelected = (server_info.GetIpPort() == m_CurrentSelectedServer);
1023
1024 entry = GetServerEntryByIndex(i, server_info.GetIpPort());
1025 entry.Show(true);
1026 entry.SetIsOnline(true);
1027 entry.FillInfo(server_info);
1028 entry.SetMods(m_EntryMods.Get(server_info.m_Id));
1029 entry.UpdateEntry();
1030
1031 lastFilledIndexOnPage++;
1032 }
1033 else
1034 {
1035 entry = GetServerEntryByIndex(i, "-1");
1036
1037 if (entry)
1038 {
1039 entry.Show(false);
1040 }
1041 }
1042 }
1043
1044 LoadExtraEntries(lastFilledIndexOnPage);
1045 m_ServerList.Update();
1046 }
1047
1049 {
1050 string serversFound = string.Format("#servers_found: %1", m_TotalLoadedServers);
1051 if ( m_LoadingFinished )
1052 {
1053 m_LoadingText.SetText( serversFound );
1054 }
1055 else
1056 {
1057 m_LoadingText.SetText( string.Format("#dayz_game_loading %1", serversFound) );
1058 }
1059 }
1060
1061 override void OnLoadServerModsAsync( string server_id, array<string> mods )
1062 {
1063 super.OnLoadServerModsAsync( server_id, mods );
1064
1065 if ( m_EntryWidgets.Contains( server_id ) )
1066 {
1067 m_EntryWidgets.Get( server_id ).SetMods( mods );
1068 }
1069 }
1070
1071 protected ServerBrowserEntry GetServerEntryByIndex( int index, string server_id )
1072 {
1073 ref ServerBrowserEntry entry;
1074
1075 if ( index >= 0 )
1076 {
1077 if ( index < m_ServerListEntries.Count() )
1078 {
1079 entry = m_ServerListEntries[index];
1080 }
1081 else
1082 {
1083 entry = new ServerBrowserEntry( null, index, this );
1084 m_ServerList.AddChild( entry.GetRoot(), false );
1085
1086 m_ServerListEntries.Insert(entry);
1087 }
1088 }
1089 else
1090 {
1091 return null;
1092 }
1093
1094 // Refresh list
1095 m_EntryWidgets.Insert( server_id, entry );
1096
1097 return entry;
1098 }
1099
1100 override bool IsFocusable( Widget w )
1101 {
1102 if ( w )
1103 {
1104 if ( super.IsFocusable( w ) )
1105 {
1106 return true;
1107 }
1108
1109 if ( w == m_ServerListScroller )
1110 {
1111 return false;
1112 }
1113
1114 if ( w == m_HostSort || w == m_TimeSort || w == m_PopulationSort || w == m_SlotsSort || w == m_PingSort || w == m_FilterSearchIP || w == m_MapSort )
1115 {
1116 return true;
1117 }
1118
1120 {
1121 return true;
1122 }
1123
1124 return false;
1125 }
1126 return false;
1127 }
1128
1130 {
1131 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1132 btn.SetText( "#menu_cancel" );
1133 }
1134
1136 {
1137 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1138 btn.SetText( "#STR_server_browser_tab_root_filters_root_filters_content_refresh_list_button0" );
1139 }
1140
1142 {
1144 }
1145
1147 {
1149 }
1150
1151 override void SwitchToDetails(bool focus = true)
1152 {
1154 }
1155
1156 override void SwitchToFilters(bool focus = true)
1157 {
1158 m_FilterRoot.Show(true);
1159 m_RightAreaHeaderText.SetText("#STR_server_browser_menu_server_filters");
1160 m_DetailsRoot.Show(false);
1161 m_BtnShowDetails.Show(true);
1162 }
1163
1164 override void ShowServerDetails()
1165 {
1166 super.ShowServerDetails();
1167
1168 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
1169 {
1170 m_BtnShowFilters.Show(true);
1171 m_FilterRoot.Show(false);
1172 }
1173 }
1174
1175#ifdef DIAG_DEVELOPER
1176 protected void RefreshDummyList()
1177 {
1178 for (int i = 0; i < m_EntriesSorted.Count(); ++i)
1179 {
1180 m_EntriesSorted.GetElement(i).Clear();
1181 }
1182
1183 m_ServerListEntries.Clear();
1184 m_EntryWidgets.Clear();
1185 m_OnlineFavServers.Clear();
1186
1187 m_Menu.SetServersLoadingTab(m_TabType);
1188 m_LoadingFinished = false;
1189 m_Loading = true;
1190 m_Initialized = true;
1191 m_BegunLoading = false;
1192 m_LastLoadedPage = 0;
1193 m_TotalPages = -1;
1194 m_TotalServers = 0;
1197 m_TotalServersCount = 0;
1198 m_ServersEstimateCount = 0;
1199 m_PageIndex = 0;
1200 m_SelectedServer = null;
1201
1202 m_Menu.DeselectCurrentServer();
1203
1204 m_CurrentFilterInput = m_Filters.GetFilterOptionsPC();
1205
1206 if (!m_DummyServers || !m_DummyServers.m_Results)
1207 {
1208 m_LoadingFinished = true;
1209 m_Loading = false;
1210 m_Menu.SetServersLoadingTab(TabType.NONE);
1212 UpdatePageButtons();
1213 UpdateStatusBar();
1214 return;
1215 }
1216
1217 int count = m_DummyServers.m_Results.Count();
1218 for (int j = 0; j < count; ++j)
1219 {
1220 GetServersResultRow result = m_DummyServers.m_Results[j];
1221
1222 result.m_SortName = result.m_Name.ToInt();
1223 result.m_SortTime = GetTimeOfDayEnum(result.m_TimeOfDay);
1224
1225 string ipPort = result.GetIpPort();
1226 result.m_Favorite = m_Menu.IsFavorited(ipPort);
1227
1228 if (m_TabType == TabType.FAVORITE && !result.m_Favorite)
1229 continue;
1230
1231 if (PassLocalFilters(result))
1232 AddSorted(result);
1233 }
1234
1235 m_TotalServersCount = m_DummyServers.m_NumServers;
1237 m_ServersEstimateCount = m_TotalLoadedServers;
1238
1239 m_LoadingFinished = true;
1240 m_Loading = false;
1241 m_Menu.SetServersLoadingTab(TabType.NONE);
1242
1243 ButtonCancelToRefresh();
1245
1246 m_ServerListScroller.VScrollToPos01(0);
1247
1249 UpdatePageButtons();
1250 UpdateStatusBar();
1251
1252 if (m_TotalLoadedServers == 0)
1253 {
1254 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
1255 {
1257 }
1258 }
1259 }
1260
1261 override void OnDummyServersEnabledChanged()
1262 {
1263 super.OnDummyServersEnabledChanged();
1264
1265 RefreshList();
1266 }
1267
1268 override int GetServersVisibleCount()
1269 {
1270 return SERVERS_VISIBLE_COUNT;
1271 }
1272#endif
1273
1274 // DEPRECATED BELOW
1275 [Obsolete("1.29: No replacement")]
1277 {
1279
1280 int i;
1281 int index_min = 0;
1282 int index_max = list.Count() - 1;
1283 int target_index = Math.Floor( index_max / 2 );
1284
1285 if ( index_max == -1 )
1286 {
1287 list.Insert( entry );
1288 return 0;
1289 }
1290
1291 if ( sort_type == ESortType.HOST )
1292 {
1293 string entry_value_str = entry.GetValueStr(ESortType.HOST);
1294
1295 while ( true )
1296 {
1297 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
1298
1299 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
1300 {
1301 for ( i = index_min; i <= index_max; i++ )
1302 {
1303 if ( entry_value_str >= list[i].GetValueStr(ESortType.HOST) )
1304 {
1305 list.InsertAt( entry, i );
1306 return i;
1307 }
1308 }
1309
1310 index_max++;
1311 list.InsertAt( entry, index_max );
1312 return target_index;
1313 }
1314 else if ( entry_value_str > target_value_str )
1315 {
1316 index_max = target_index;
1317 target_index = Math.Floor( target_index / 2 );
1318 }
1319 else if ( entry_value_str < target_value_str )
1320 {
1321 index_min = target_index;
1322 target_index += Math.Floor( (index_max - index_min) / 2 );
1323 }
1324 }
1325 }
1326 else
1327 {
1328 int entry_value_int = entry.GetValueInt( sort_type );
1329
1330 while ( true )
1331 {
1332 int target_value_int = list[target_index].GetValueInt( sort_type );
1333
1334 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
1335 {
1336 for ( i = index_min; i <= index_max; i++ )
1337 {
1338 if ( entry_value_int >= list[i].GetValueInt( sort_type ) )
1339 {
1340 list.InsertAt( entry, i );
1341 return i;
1342 }
1343 }
1344
1345 index_max++;
1346 list.InsertAt( entry, index_max );
1347 return target_index;
1348 }
1349 else if ( entry_value_int > target_value_int )
1350 {
1351 index_max = target_index;
1352 target_index = Math.Floor( target_index / 2 );
1353 }
1354 else if ( entry_value_int < target_value_int )
1355 {
1356 index_min = target_index;
1357 target_index += Math.Floor( (index_max - index_min) / 2 );
1358 }
1359 }
1360 }
1361
1362 return target_index;
1363 }
1364}
EScriptInvokerInsertFlags
Определения 2_GameLib/DayZ/tools.c:130
EBiosError
Possible Error codes for bios API. This is the list of errors that can be returned from bios API....
Определения BIOSErrorModule.c:7
ESortOrder
Определения BiosLobbyService.c:46
ESortType
Определения BiosLobbyService.c:33
map
Определения ControlsXboxNew.c:4
DayZGame g_Game
Определения DayZGame.c:4074
proto string ToString()
Icon x
Icon y
@ Count
Определения RandomGeneratorSyncManager.c:8
ref ServerBrowserFilterContainer m_Filters
Определения ServerBrowserTab.c:35
ref map< ESortType, ref array< ref GetServersResultRow > > m_EntriesSorted
Определения ServerBrowserTab.c:75
TabType m_TabType
Определения ServerBrowserTab.c:40
Widget m_FilterSearchText
Определения ServerBrowserTab.c:69
Widget m_FiltersChanged
Определения ServerBrowserTab.c:62
void ApplyFilters()
Widget m_SlotsSort
Определения ServerBrowserTab.c:66
TextWidget m_RightAreaHeaderText
Определения ServerBrowserTab.c:79
bool m_LoadingFinished
Определения ServerBrowserTab.c:52
ServerBrowserEntry m_SelectedServer
Определения ServerBrowserTab.c:38
int m_CurrentLoadedPage
Определения ServerBrowserTab.c:56
void ButtonDisable(Widget w)
Определения ServerBrowserTab.c:635
ref GetServersInput m_CurrentFilterInput
Определения ServerBrowserTab.c:57
ButtonWidget m_BtnPageNext
Определения ServerBrowserTab.c:73
ref map< ESortType, ESortOrder > m_SortInverted
Определения ServerBrowserTab.c:76
ButtonWidget m_BtnShowFilters
Определения ServerBrowserTab.c:85
ref map< string, ref ServerBrowserEntry > m_EntryWidgets
Определения ServerBrowserTab.c:32
int m_TotalPages
Определения ServerBrowserTab.c:51
bool m_BegunLoading
Определения ServerBrowserTab.c:46
void SwitchToDetails(bool focus=true)
TabType
Определения ServerBrowserTab.c:2
ScrollWidget m_ServerListScroller
Определения ServerBrowserTab.c:27
bool PassFilter(GetServersResultRow result)
Определения ServerBrowserTab.c:543
Widget m_PingSort
Определения ServerBrowserTab.c:67
int m_TotalLoadedServers
Определения ServerBrowserTab.c:49
string m_CurrentSelectedServer
Определения ServerBrowserTab.c:55
Widget m_ApplyFilter
Определения ServerBrowserTab.c:59
ServerBrowserMenuNew m_Menu
Определения ServerBrowserTab.c:37
void ResetFilters()
Определения ServerBrowserTab.c:430
void UpdateServerList()
void SwitchToFilters(bool focus=true)
ref map< string, ref array< string > > m_EntryMods
Определения ServerBrowserTab.c:33
void Focus()
Определения ServerBrowserTab.c:193
bool m_Loading
Определения ServerBrowserTab.c:47
int m_LastLoadedPage
Определения ServerBrowserTab.c:50
ESortType m_SortType
Определения ServerBrowserTab.c:41
TextWidget m_LoadingText
Определения ServerBrowserTab.c:71
Widget m_PopulationSort
Определения ServerBrowserTab.c:65
Widget m_MapSort
Определения ServerBrowserTab.c:68
Widget m_HostSort
Определения ServerBrowserTab.c:63
ButtonWidget m_BtnPagePrev
Определения ServerBrowserTab.c:72
void ButtonEnable(Widget w)
Определения ServerBrowserTab.c:629
ESortOrder m_SortOrder
Определения ServerBrowserTab.c:42
SpacerBaseWidget m_ServerList
Определения ServerBrowserTab.c:28
int m_TotalServers
Определения ServerBrowserTab.c:48
void ShowServerDetails()
Определения ServerBrowserTab.c:797
Widget m_FilterSearchTextBox
Определения ServerBrowserTab.c:70
bool IsFocusable(Widget w)
Определения ServerBrowserTab.c:329
ref ServerBrowserDetailsContainer m_Details
Определения ServerBrowserTab.c:87
Widget m_FilterRoot
Определения ServerBrowserTab.c:80
Widget m_ResetFilters
Определения ServerBrowserTab.c:61
Widget m_DetailsRoot
Определения ServerBrowserTab.c:84
Widget m_RefreshList
Определения ServerBrowserTab.c:60
Widget m_TimeSort
Определения ServerBrowserTab.c:64
Widget m_FilterContent
Определения ServerBrowserTab.c:81
ref set< string > m_OnlineFavServers
Определения ServerBrowserTab.c:77
ButtonWidget m_BtnShowDetails
Определения ServerBrowserTab.c:82
int AddSorted(GetServersResultRow entry)
Определения ServerBrowserTab.c:604
Widget m_Root
Определения SizeToChild.c:91
int m_PageIndex
Определения UiHintPanel.c:315
bool m_Initialized
Определения UiHintPanel.c:317
int m_NumServers
Определения BiosLobbyService.c:376
ref GetServersResultRowArray m_Results
Определения BiosLobbyService.c:374
GetServersResult the output structure of the GetServers operation.
Определения BiosLobbyService.c:371
string GetValueStr(ESortType sort_type)
Определения BiosLobbyService.c:248
string GetIpPort()
Определения BiosLobbyService.c:222
string m_TimeOfDay
Определения BiosLobbyService.c:210
int m_SortTime
Определения BiosLobbyService.c:201
string m_Name
Определения BiosLobbyService.c:174
string m_Id
Определения BiosLobbyService.c:172
int CompareTo(GetServersResultRow other, ESortType sortType)
Определения BiosLobbyService.c:299
bool m_Favorite
Определения BiosLobbyService.c:220
int m_SortName
Определения BiosLobbyService.c:200
int GetValueInt(ESortType sort_type)
Определения BiosLobbyService.c:268
bool m_IsSelected
Определения BiosLobbyService.c:202
GetServersResultRow the output structure of the GetServers operation that represents one game server.
Определения BiosLobbyService.c:171
Определения EnMath.c:7
static ref ScriptInvoker m_ServersAsyncInvoker
Определения OnlineServices.c:5
Определения OnlineServices.c:2
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
ref TStringArray m_TempTime
Определения ServerBrowserTabPc.c:26
int GetTimeOfDayEnum(string time_of_day)
Определения ServerBrowserTabPc.c:633
void OnClickPageFirst()
Определения ServerBrowserTabPc.c:497
void UpdateStatusBar()
Определения ServerBrowserTabPc.c:1048
void OnClickFilters()
Определения ServerBrowserTabPc.c:1146
override bool IsFocusable(Widget w)
Определения ServerBrowserTabPc.c:1100
override void ShowServerDetails()
Определения ServerBrowserTabPc.c:1164
Widget m_PnlPagesPanel
Определения ServerBrowserTabConsolePages.c:24
override void ApplyFilters()
Определения ServerBrowserTabPc.c:211
override bool OnClick(Widget w, int x, int y, int button)
Определения ServerBrowserTabPc.c:304
void ToggleSort(ESortType type)
Определения ServerBrowserTabPc.c:524
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
Определения ServerBrowserTabPc.c:396
void UpdatePageButtons()
Определения ServerBrowserTabConsolePages.c:742
void OnClickPagePrev()
Определения ServerBrowserTabPc.c:468
void LoadingServersStop()
Определения ServerBrowserTabPc.c:219
override void SwitchToDetails(bool focus=true)
Определения ServerBrowserTabPc.c:1151
ServerBrowserEntry GetServerEntryByIndex(int index)
Определения ServerBrowserTabConsolePages.c:350
override void SetSort(ESortType type, ESortOrder order)
Определения ServerBrowserTabPc.c:555
TextWidget m_PnlPagesLoadingText
Определения ServerBrowserTabConsolePages.c:25
override void SwitchToFilters(bool focus=true)
Определения ServerBrowserTabPc.c:1156
int SortedInsertDesc(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:1276
void SetPageIndex(int page_index)
Определения ServerBrowserTabPc.c:516
override int AddSorted(GetServersResultRow entry)
Определения ServerBrowserTabPc.c:667
void ButtonCancelToRefresh()
Определения ServerBrowserTabPc.c:1135
ref array< ButtonWidget > m_BtnPages
Определения ServerBrowserTabPc.c:23
ref array< ref ServerBrowserEntry > m_ServerListEntries
Определения ServerBrowserTabPc.c:24
override void ResetFilters()
Определения ServerBrowserTabPc.c:199
Widget m_FilterPanelAccTime
Определения ServerBrowserTabPc.c:21
int m_ServersEstimateCount
Определения ServerBrowserTabConsolePages.c:20
int SortedInsertAsc(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:772
ButtonWidget m_BtnPagesFirst
Определения ServerBrowserTabPc.c:15
override void RefreshList()
Определения ServerBrowserTabPc.c:161
void OnClickPageNext()
Определения ServerBrowserTabPc.c:480
int m_PageIndex
Определения ServerBrowserTabPc.c:7
Widget m_FilterSearchIPBox
Определения ServerBrowserTabPc.c:19
ServerBrowserEntry GetServerEntryByIndex(int index, string server_id)
Определения ServerBrowserTabPc.c:1071
override void UpdateServerList()
Определения ServerBrowserTabPc.c:1000
override void OnFilterChanged()
Определения ServerBrowserTabPc.c:456
override bool OnMouseEnter(Widget w, int x, int y)
Определения ServerBrowserTabPc.c:376
int SortedInsertEx(GetServersResultRow entry, ESortType sortType, bool isDescending)
Определения ServerBrowserTabPc.c:706
int SortedInsert(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:701
override void OnLoadServerModsAsync(string server_id, array< string > mods)
Определения ServerBrowserTabPc.c:1061
override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
Определения ServerBrowserTabPc.c:28
const int PAGES_BUTTONS_COUNT
Определения ServerBrowserTabPc.c:4
void OnClickDetails()
Определения ServerBrowserTabPc.c:1141
ButtonWidget m_BtnPagesLast
Определения ServerBrowserTabPc.c:16
void OnLoadServersAsyncPCFinished()
Определения ServerBrowserTabPc.c:299
void OnClickPageEnd()
Определения ServerBrowserTabPc.c:492
override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
Определения ServerBrowserTabPc.c:240
const int SERVERS_VISIBLE_COUNT
Определения ServerBrowserTabConsolePages.c:3
override bool OnMouseButtonUp(Widget w, int x, int y, int button)
Определения ServerBrowserTabPc.c:412
Widget m_FilterSearchIP
Определения ServerBrowserTabPc.c:18
void ButtonRefreshToCancel()
Определения ServerBrowserTabPc.c:1129
bool OnClickPage(Widget w)
Определения ServerBrowserTabPc.c:502
Widget m_FilterPanelPing
Определения ServerBrowserTabPc.c:20
override void RefreshList()
Определения ServerBrowserFavoritesTabPc.c:76
override void LoadExtraEntries(int index)
Определения ServerBrowserFavoritesTabPc.c:13
Определения EnWidgets.c:220
Определения EnWidgets.c:190
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
Определения Transport.c:70
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
class array< Class T > TStringArray
void Obsolete(string msg="")
Определения EnScript.c:371
static proto float Floor(float f)
Returns floor of value.
static proto float Min(float x, float y)
Returns smaller of two given values.
static proto float Round(float f)
Returns mathematical round of value.
MouseState
Определения EnSystem.c:311
proto native int ToInt()
Converts string to integer.
void Split(string sample, out array< string > output)
Splits string into array of strings separated by 'sample'.
Определения EnString.c:396
proto native void SetFocus(Widget w)
proto native void SetSort(int sort, bool immedUpdate=true)
int ARGBF(float fa, float fr, float fg, float fb)
Converts <0.0, 1.0> ARGB into color.
Определения proto.c:332