DayZ 1.27
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
27
28 protected override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
29 {
30 #ifdef PLATFORM_CONSOLE
31 m_Root = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/server_browser/xbox/server_browser_tab.layout", parent);
32 #else
33 #ifdef PLATFORM_WINDOWS
34 m_Root = GetGame().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
158 {
159
160 }
161
162 override void RefreshList()
163 {
164 for ( int i = 0; i < m_EntriesSorted.Count(); i++ )
165 {
166 m_EntriesSorted.GetElement(i).Clear();
167 }
168 m_ServerListEntries.Clear();
169
171
172 m_LoadingFinished = false;
173 m_Loading = true;
177 m_PageIndex = 0;
178 m_SelectedServer = null;
179
180 super.RefreshList();
181
182 m_ServerListScroller.VScrollToPos01( 0 );
183
188 }
189
190 override void ResetFilters()
191 {
192 m_Filters.ResetFilters();
193
195
196 if (m_Loading)
197 {
199 }
200 }
201
202 override void ApplyFilters()
203 {
204 m_Filters.SaveFilters();
205 RefreshList();
208 }
209
211 {
213
214 m_LoadingFinished = true;
215 m_Loading = false;
216
218
221
223
224 if (m_TotalLoadedServers == 0)
225 {
226 if (GetTabType() != TabType.FAVORITE && GetTabType() != TabType.LAN)
228 }
229 }
230
231 override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
232 {
233 if (result_list)
234 {
235 int count = result_list.m_Results.Count();
236 if (count > 0)
237 {
238 for (int i = 0; i < count; i++)
239 {
240 GetServersResultRow result = result_list.m_Results[i];
242
243 result.m_SortName = result.m_Name.ToInt();
244 result.m_SortTime = GetTimeOfDayEnum(result.m_TimeOfDay);
245
246 if (PassFilter(result))
247 {
248 int sorted_index = AddSorted(result);
250 {
253 }
254 }
255
256 if (!m_Menu || m_Menu.GetServersLoadingTab() != m_TabType)
257 {
258 return;
259 }
260 }
261 }
262 else
263 {
264 m_Menu.SetServersLoadingTab(TabType.NONE);
265 }
266 }
267 else
268 {
269 m_Menu.SetServersLoadingTab(TabType.NONE);
270 }
271
272 if (response == "thelastone")
273 {
275 }
276 else
277 {
279 }
280
283 }
284
289
290 override bool OnClick(Widget w, int x, int y, int button)
291 {
292 super.OnClick(w, x, y, button);
293
294 if (button == MouseState.LEFT)
295 {
296 if (w == m_ResetFilters)
297 {
298 ResetFilters();
299 }
300 else if (w == m_ApplyFilter)
301 {
302 ApplyFilters();
303 return true;
304 }
305 else if (w == m_RefreshList)
306 {
308 {
310 }
311 else
312 {
313 RefreshList();
314 }
315
316 return true;
317 }
318 else if (w == m_BtnPagePrev)
319 {
321 return true;
322 }
323 else if (w == m_BtnPageNext)
324 {
326 return true;
327 }
328 else if (w == m_BtnPagesLast)
329 {
331 return true;
332 }
333 else if (w == m_BtnPagesFirst)
334 {
336 return true;
337 }
338 else if (w == m_BtnShowDetails)
339 {
341 return true;
342 }
343 else if (w == m_BtnShowFilters)
344 {
346 return true;
347 }
348 else
349 {
350 bool click = OnClickPage(w);
351 if (click)
352 {
353 return true;
354 }
355
356 return false;
357 }
358 }
359 return false;
360 }
361
362 override bool OnMouseEnter(Widget w, int x, int y)
363 {
364 if (IsFocusable(w))
365 {
367
368 if (w == m_FilterSearchText)
369 {
371 }
372 else if (w == m_FilterSearchIP)
373 {
375 }
376
377 return true;
378 }
379 return false;
380 }
381
382 override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
383 {
384 if (IsFocusable(w))
385 {
386 ColorNormal(w);
387
388 if (w == m_FilterSearchText || w == m_FilterSearchIP)
389 {
390 SetFocus( null );
391 }
392
393 return true;
394 }
395 return false;
396 }
397
398 override bool OnMouseButtonUp( Widget w, int x, int y, int button )
399 {
400 if ( button == MouseState.LEFT )
401 {
402 if ( w == m_HostSort )
403 {
404 ToggleSort( ESortType.HOST );
406 return true;
407 }
408 else if ( w == m_TimeSort )
409 {
410 ToggleSort( ESortType.TIME );
412 return true;
413 }
414 else if ( w == m_PopulationSort )
415 {
416 ToggleSort( ESortType.POPULATION );
418 return true;
419 }
420 else if ( w == m_SlotsSort )
421 {
422 ToggleSort( ESortType.SLOTS );
424 return true;
425 }
426 else if ( w == m_PingSort )
427 {
428 ToggleSort( ESortType.PING );
430 return true;
431 }
432 else if ( w == m_MapSort )
433 {
434 ToggleSort( ESortType.MAP );
436 return true;
437 }
438 }
439 return false;
440 }
441
442 override void OnFilterChanged()
443 {
444 //m_FiltersChanged.Show(true);
445
447
448 if (m_Loading)
449 {
451 }
452 }
453
455 {
456 if ( m_PageIndex > 0 )
457 {
459 }
460 else
461 {
463 }
464 }
465
467 {
468 if ( m_PageIndex < (m_PagesCount - 1) )
469 {
471 }
472 else
473 {
474 SetPageIndex( 0 );
475 }
476 }
477
479 {
481 }
482
484 {
485 SetPageIndex( 0 );
486 }
487
489 {
490 for ( int i = 0; i < m_BtnPages.Count(); ++i )
491 {
492 if ( m_BtnPages[i] == w )
493 {
494 SetPageIndex( m_PageStartNum + i - 1 );
495 return true;
496 }
497 }
498
499 return false;
500 }
501
502 void SetPageIndex(int page_index)
503 {
504 m_PageIndex = page_index;
507 Focus();
508 }
509
511 {
512 ESortOrder order = ESortOrder.ASCENDING;
513
514 if ( m_SortType != type )
515 {
516 if ( m_SortInverted[type] == true )
517 {
518 m_EntriesSorted[type].Invert();
519 }
520
521 m_SortInverted[type] = false;
522 }
523 else
524 {
525 if ( m_SortOrder == ESortOrder.ASCENDING )
526 {
527 m_EntriesSorted[type].Invert();
528 m_SortInverted[type] = true;
529 order = ESortOrder.DESCENDING;
530 }
531 else
532 {
533 m_EntriesSorted[type].Invert();
534 m_SortInverted[type] = false;
535 }
536 }
537
538 SetSort( type, order );
539 }
540
541 override void SetSort( ESortType type, ESortOrder order )
542 {
543 super.SetSort( type, order);
544
545 #ifdef PLATFORM_WINDOWS
546 m_Root.FindAnyWidget( "host_sort" ).Show( false );
547 m_Root.FindAnyWidget( "population_sort" ).Show( false );
548 m_Root.FindAnyWidget( "slots_sort" ).Show( false );
549
550 m_Root.FindAnyWidget( "time_sort" ).Show( false );
551 m_Root.FindAnyWidget( "ping_sort" ).Show( false );
552 m_Root.FindAnyWidget( "map_sort" ).Show( false );
553
554 TextWidget root;
555 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_host_label" ) );
556 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
557 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_population_label" ) );
558 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
559 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_slots_label" ) );
560 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
561
562 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_ping_label" ) );
563 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
564 root = TextWidget.Cast( m_Root.FindAnyWidget( "server_list_content_header_time_label" ) );
565 root.SetColor( ARGBF( 1, 1, 1, 1 ) );
566
567 string r_name;
568 string w_name;
569
570 switch ( type )
571 {
572 case ESortType.HOST:
573 {
574 r_name = "server_list_content_header_host_label";
575 w_name = "host_sort";
576 break;
577 }
578 case ESortType.TIME:
579 {
580 r_name = "server_list_content_header_time_label";
581 w_name = "time_sort";
582 break;
583 }
584 case ESortType.POPULATION:
585 {
586 r_name = "server_list_content_header_population_label";
587 w_name = "population_sort";
588 break;
589 }
590 case ESortType.SLOTS:
591 {
592 r_name = "server_list_content_header_slots_label";
593 w_name = "slots_sort";
594 break;
595 }
596 case ESortType.PING:
597 {
598 r_name = "server_list_content_header_ping_label";
599 w_name = "ping_sort";
600 break;
601 }
602 case ESortType.MAP:
603 {
604 r_name = "server_list_content_header_map_label";
605 w_name = "map_sort";
606 break;
607 }
608 }
609
610 root = TextWidget.Cast( m_Root.FindAnyWidget( r_name ) );
611 root.SetColor( ARGBF( 1, 1, 0, 0 ) );
612
613 m_Root.FindAnyWidget( w_name ).Show( true );
614 m_Root.FindAnyWidget( w_name + "_asc" ).Show( !m_SortOrder );
615 m_Root.FindAnyWidget( w_name + "_dsc" ).Show( m_SortOrder );
616 #endif
617 }
618
619 int GetTimeOfDayEnum( string time_of_day )
620 {
621 m_TempTime.Clear();
622
623 time_of_day.Split( ":", m_TempTime );
624
625 int minutes = 0;
626
627 if ( m_TempTime.Count() > 0 )
628 {
629 int h = m_TempTime[0].ToInt();
630
631 if ( h >= 5 )
632 {
633 h -= 5;
634 }
635 else
636 {
637 h += 24;
638 }
639
640 minutes = h * 60;
641 }
642
643 if ( m_TempTime.Count() > 1 )
644 {
645 int m = m_TempTime[0].ToInt();
646 minutes += m;
647 }
648
649 return minutes;
650 }
651
652 // Return sorted index
653 override int AddSorted( GetServersResultRow entry )
654 {
655 int index_host = SortedInsert( entry, ESortType.HOST );
656 int index_time = SortedInsert( entry, ESortType.TIME );
657 int index_popu = SortedInsert( entry, ESortType.POPULATION );
658 int index_slot = SortedInsert( entry, ESortType.SLOTS );
659 int index_ping = SortedInsert( entry, ESortType.PING );
660 int index_favo = SortedInsert( entry, ESortType.FAVORITE );
661 int index_pass = SortedInsert( entry, ESortType.PASSWORDED );
662 int index_map = SortedInsert( entry, ESortType.MAP );
663
664 switch ( m_SortType )
665 {
666 case ESortType.HOST:
667 return index_host;
668 case ESortType.TIME:
669 return index_time;
670 case ESortType.POPULATION:
671 return index_popu;
672 case ESortType.SLOTS:
673 return index_slot;
674 case ESortType.PING:
675 return index_ping;
676 case ESortType.FAVORITE:
677 return index_favo;
678 case ESortType.PASSWORDED:
679 return index_pass;
680 case ESortType.MAP:
681 return index_map;
682 }
683
684 return 0;
685 }
686
688 {
689 return SortedInsertEx(entry, sort_type, m_SortInverted[sort_type]);
690 }
691
692 private int SortedInsertEx(GetServersResultRow entry, ESortType sortType, bool isDescending)
693 {
695 int indexMax = list.Count() - 1;
696 int indexMin = 0;
697 int targetIndex = Math.Floor( indexMax / 2 );
698 int comparisonMultiplier = 1;
699
700 // if order is descending, then invert comparison results
701 if (isDescending == true)
702 {
703 comparisonMultiplier = -1;
704 }
705
706 if ( indexMax == -1 )
707 {
708 list.Insert( entry );
709 return 0;
710 }
711
712 while ( true )
713 {
714 int comparisonResult = comparisonMultiplier * entry.CompareTo(list[targetIndex], sortType);
715
716 if ((indexMax - indexMin) <= 1)
717 {
718 for (int i = indexMin; i <= indexMax; i++ )
719 {
720 comparisonResult = comparisonMultiplier * entry.CompareTo(list[i], sortType);
721
722 if ( comparisonResult > 0 )
723 {
724 list.InsertAt( entry, i );
725 return i;
726 }
727 }
728
729 // adding entry AFTER indexMax
730 targetIndex = Math.Min(indexMax + 1, list.Count());
731 list.InsertAt(entry, targetIndex);
732 return targetIndex;
733 }
734
735 if (comparisonResult == 0)
736 {
737 list.InsertAt(entry, targetIndex);
738 return targetIndex;
739 }
740
741 if (comparisonResult > 0)
742 {
743 indexMax = targetIndex;
744 }
745
746 else if (comparisonResult < 0)
747 {
748 indexMin = targetIndex;
749 }
750
751 targetIndex = indexMin + Math.Floor((indexMax - indexMin) / 2);
752 }
753
754 return 0;
755 }
756
757 // DEPRECATED
759 {
761
762 int i;
763 int index_min = 0;
764 int index_max = list.Count() - 1;
765 int target_index = Math.Floor( index_max / 2 );
766
767 if ( index_max == -1 )
768 {
769 list.Insert( entry );
770 return 0;
771 }
772
773 if ( sort_type == ESortType.HOST )
774 {
775 string entry_value_str = entry.GetValueStr(ESortType.HOST);
776
777 while ( true )
778 {
779 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
780
781 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
782 {
783 for ( i = index_min; i <= index_max; i++ )
784 {
785 if ( entry_value_str <= list[i].GetValueStr(ESortType.HOST) )
786 {
787 list.InsertAt( entry, i );
788 return i;
789 }
790 }
791
792 index_max++;
793 list.InsertAt( entry, index_max );
794 return target_index;
795 }
796 else if ( entry_value_str < target_value_str )
797 {
798 index_max = target_index;
799 target_index = Math.Floor( target_index / 2 );
800 }
801 else if ( entry_value_str > target_value_str )
802 {
803 index_min = target_index;
804 target_index += Math.Floor( (index_max - index_min) / 2 );
805 }
806 }
807 }
808 else
809 {
810 int entry_value_int = entry.GetValueInt( sort_type );
811
812 while ( true )
813 {
814 int target_value_int = list[target_index].GetValueInt( sort_type );
815
816 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
817 {
818 for ( i = index_min; i <= index_max; i++ )
819 {
820 if ( entry_value_int <= list[i].GetValueInt( sort_type ) )
821 {
822 list.InsertAt( entry, i );
823 return i;
824 }
825 }
826
827 index_max++;
828 list.InsertAt( entry, index_max );
829 return target_index;
830 }
831 else if ( entry_value_int < target_value_int )
832 {
833 index_max = target_index;
834 target_index = Math.Floor( target_index / 2 );
835 }
836 else if ( entry_value_int > target_value_int )
837 {
838 index_min = target_index;
839 target_index += Math.Floor( (index_max - index_min) / 2 );
840 }
841 }
842 }
843
844 return target_index;
845 }
846
847 // DEPRECATED
849 {
851
852 int i;
853 int index_min = 0;
854 int index_max = list.Count() - 1;
855 int target_index = Math.Floor( index_max / 2 );
856
857 if ( index_max == -1 )
858 {
859 list.Insert( entry );
860 return 0;
861 }
862
863 if ( sort_type == ESortType.HOST )
864 {
865 string entry_value_str = entry.GetValueStr(ESortType.HOST);
866
867 while ( true )
868 {
869 string target_value_str = list[target_index].GetValueStr(ESortType.HOST);
870
871 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
872 {
873 for ( i = index_min; i <= index_max; i++ )
874 {
875 if ( entry_value_str >= list[i].GetValueStr(ESortType.HOST) )
876 {
877 list.InsertAt( entry, i );
878 return i;
879 }
880 }
881
882 index_max++;
883 list.InsertAt( entry, index_max );
884 return target_index;
885 }
886 else if ( entry_value_str > target_value_str )
887 {
888 index_max = target_index;
889 target_index = Math.Floor( target_index / 2 );
890 }
891 else if ( entry_value_str < target_value_str )
892 {
893 index_min = target_index;
894 target_index += Math.Floor( (index_max - index_min) / 2 );
895 }
896 }
897 }
898 else
899 {
900 int entry_value_int = entry.GetValueInt( sort_type );
901
902 while ( true )
903 {
904 int target_value_int = list[target_index].GetValueInt( sort_type );
905
906 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
907 {
908 for ( i = index_min; i <= index_max; i++ )
909 {
910 if ( entry_value_int >= list[i].GetValueInt( sort_type ) )
911 {
912 list.InsertAt( entry, i );
913 return i;
914 }
915 }
916
917 index_max++;
918 list.InsertAt( entry, index_max );
919 return target_index;
920 }
921 else if ( entry_value_int > target_value_int )
922 {
923 index_max = target_index;
924 target_index = Math.Floor( target_index / 2 );
925 }
926 else if ( entry_value_int < target_value_int )
927 {
928 index_min = target_index;
929 target_index += Math.Floor( (index_max - index_min) / 2 );
930 }
931 }
932 }
933
934 return target_index;
935 }
936
938 {
940 if ( m_PagesCount > 1 )
941 {
942 m_PnlPagesPanel.Show( true );
943
944 int i;
945 int btn_index_center = Math.Round( PAGES_BUTTONS_COUNT / 2) - 1;
946 m_PageStartNum = 1;
948
950 {
952
953 // Pages are less like buttons - changing selected button
954 for ( i = 1; i <= m_BtnPages.Count(); ++i )
955 {
956 bool is_page_button_enable = ( i <= m_PagesCount );
957
958 int page_index = (i - 1);
959 m_BtnPages[page_index].Show( is_page_button_enable );
960 m_BtnPages[page_index].SetText( i.ToString() );
961
962 if ( m_PageIndex == page_index )
963 {
964 m_BtnPages[page_index].SetState( true );
965 }
966 else
967 {
968 m_BtnPages[page_index].SetState( false );
969 }
970 }
971 }
972 else
973 {
974 // Pages are more like buttons
975 if ( m_PageIndex <= btn_index_center )
976 {
977 //Left side (start of pages)
978 //m_PageStartNum = 1;
979 //m_PageEndNum = PAGES_BUTTONS_COUNT;
980 }
981 else
982 {
983 m_PageStartNum = m_PageIndex - btn_index_center + 1;
984 m_PageEndNum = m_PageIndex + (PAGES_BUTTONS_COUNT - btn_index_center);
985
987 {
988 // Right side (end of pages)
991 }
992 }
993
994
995 // Button Selection
996 int selected_btn_index = m_PageIndex;
997 if ( m_PageIndex > btn_index_center )
998 {
999 if ( m_PageEndNum == m_PagesCount )
1000 {
1001 //Right
1002 selected_btn_index = PAGES_BUTTONS_COUNT - (m_PagesCount - m_PageIndex);
1003 }
1004 else
1005 {
1006 //Center
1007 selected_btn_index = btn_index_center;
1008 }
1009 }
1010
1011
1012 for ( i = 0; i < m_BtnPages.Count(); ++i )
1013 {
1014 m_BtnPages[i].SetText( (m_PageStartNum + i).ToString() );
1015 m_BtnPages[i].SetState( ( i == selected_btn_index ) );
1016 }
1017 }
1018
1019 // Button GoTo Prev Page
1020 if ( m_PageIndex > 0 )
1021 {
1022 m_BtnPagePrev.SetText( "<" );
1023 m_BtnPagePrev.Enable( true );
1024 }
1025 else
1026 {
1027 m_BtnPagePrev.SetText( "" );
1028 m_BtnPagePrev.Enable( false );
1029 }
1030
1031 // Button GoTo Next Page
1032 if ( m_PageIndex < (m_PagesCount - 1) )
1033 {
1034 m_BtnPageNext.SetText( ">" );
1035 m_BtnPageNext.Enable( true );
1036 }
1037 else
1038 {
1039 m_BtnPageNext.SetText( "" );
1040 m_BtnPageNext.Enable( false );
1041 }
1042
1043 // Button GoTo First Page
1044 if ( m_PageStartNum == 1 )
1045 {
1046 m_BtnPagesFirst.SetText( "" );
1047 m_BtnPagesFirst.Enable( false );
1048 }
1049 else
1050 {
1051 m_BtnPagesFirst.SetText( "<<" );
1052 m_BtnPagesFirst.Enable( true );
1053 }
1054
1055 // Button GoTo Last Page
1056 if ( m_PageEndNum == m_PagesCount )
1057 {
1058 m_BtnPagesLast.SetText( "" );
1059 m_BtnPagesLast.Enable( false );
1060 }
1061 else
1062 {
1063 m_BtnPagesLast.SetText( ">>" );
1064 m_BtnPagesLast.Enable( true );
1065 }
1066 }
1067 else
1068 {
1069 m_PnlPagesPanel.Show(false);
1070 }
1071 }
1072
1073 override void UpdateServerList()
1074 {
1075 int lastFilledIndexOnPage = 0;
1077 ServerBrowserEntry entry;
1078
1079 m_EntryWidgets.Clear();
1080
1081 for (int i = 0; i < SERVERS_VISIBLE_COUNT; ++i)
1082 {
1083 int serverIndex = i + (SERVERS_VISIBLE_COUNT * m_PageIndex);
1084
1085 if (serverIndex < m_EntriesSorted[m_SortType].Count())
1086 {
1087 GetServersResultRow server_info = m_EntriesSorted[m_SortType][serverIndex];
1088
1089 if (server_info.m_Favorite)
1090 {
1091 m_OnlineFavServers.Insert(server_info.m_Id);
1092 }
1093
1094 server_info.m_IsSelected = (server_info.m_Id == m_CurrentSelectedServer);
1095
1096 entry = GetServerEntryByIndex(i, server_info.m_Id);
1097 entry.Show(true);
1098 entry.SetIsOnline(true);
1099 entry.FillInfo(server_info);
1100 entry.SetMods(m_EntryMods.Get(server_info.m_Id));
1101 entry.UpdateEntry();
1102
1103 lastFilledIndexOnPage++;
1104 }
1105 else
1106 {
1107 entry = GetServerEntryByIndex(i, "-1");
1108
1109 if (entry)
1110 {
1111 entry.Show(false);
1112 }
1113 }
1114 }
1115
1116 LoadExtraEntries(lastFilledIndexOnPage);
1117
1118 m_ServerList.Update();
1119 }
1120
1122 {
1123 string serversFound = string.Format("#servers_found: %1", m_TotalLoadedServers);
1124 if ( m_LoadingFinished )
1125 {
1126 m_LoadingText.SetText( serversFound );
1127 }
1128 else
1129 {
1130 m_LoadingText.SetText( string.Format("#dayz_game_loading %1", serversFound) );
1131 }
1132 }
1133
1134 override void OnLoadServerModsAsync( string server_id, array<string> mods )
1135 {
1136 super.OnLoadServerModsAsync( server_id, mods );
1137
1138 if ( m_EntryWidgets.Contains( server_id ) )
1139 {
1140 m_EntryWidgets.Get( server_id ).SetMods( mods );
1141 }
1142 }
1143
1144 protected ServerBrowserEntry GetServerEntryByIndex( int index, string server_id )
1145 {
1146 ref ServerBrowserEntry entry;
1147
1148 if ( index >= 0 )
1149 {
1150 if ( index < m_ServerListEntries.Count() )
1151 {
1152 entry = m_ServerListEntries[index];
1153 }
1154 else
1155 {
1156 entry = new ServerBrowserEntry( null, index, this );
1157 m_ServerList.AddChild( entry.GetRoot(), false );
1158
1159 m_ServerListEntries.Insert(entry);
1160 }
1161 }
1162 else
1163 {
1164 return null;
1165 }
1166
1167 // Refresh list
1168 m_EntryWidgets.Insert( server_id, entry );
1169
1170 return entry;
1171 }
1172
1173 override bool IsFocusable( Widget w )
1174 {
1175 if ( w )
1176 {
1177 if ( super.IsFocusable( w ) )
1178 {
1179 return true;
1180 }
1181
1182 if ( w == m_ServerListScroller )
1183 {
1184 return false;
1185 }
1186
1187 if ( w == m_HostSort || w == m_TimeSort || w == m_PopulationSort || w == m_SlotsSort || w == m_PingSort || w == m_FilterSearchIP || w == m_MapSort )
1188 {
1189 return true;
1190 }
1191
1193 {
1194 return true;
1195 }
1196
1197 return false;
1198 }
1199 return false;
1200 }
1201
1203 {
1204 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1205 btn.SetText( "#menu_cancel" );
1206 }
1207
1209 {
1210 ButtonWidget btn = ButtonWidget.Cast( m_RefreshList );
1211 btn.SetText( "#STR_server_browser_tab_root_filters_root_filters_content_refresh_list_button0" );
1212 }
1213
1215 {
1217 }
1218
1220 {
1222 }
1223
1224 override void SwitchToDetails(bool focus = true)
1225 {
1227 }
1228
1229 override void SwitchToFilters(bool focus = true)
1230 {
1231 m_FilterRoot.Show(true);
1232 m_RightAreaHeaderText.SetText("#STR_server_browser_menu_server_filters");
1233 m_DetailsRoot.Show(false);
1234 m_BtnShowDetails.Show(true);
1235 }
1236
1237 override void ShowServerDetails()
1238 {
1239 super.ShowServerDetails();
1240
1241 if (m_TabType != TabType.FAVORITE && m_TabType != TabType.LAN)
1242 {
1243 m_BtnShowFilters.Show(true);
1244 m_FilterRoot.Show(false);
1245 }
1246 }
1247}
EScriptInvokerInsertFlags
Определения 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:20
ESortType
Определения BiosLobbyService.c:7
map
Определения ControlsXboxNew.c:4
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 GetTabType()
Определения ServerBrowserTab.c:614
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
void ButtonDisable(Widget w)
Определения ServerBrowserTab.c:625
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
void SwitchToDetails(bool focus=true)
TabType
Определения ServerBrowserTab.c:2
ScrollWidget m_ServerListScroller
Определения ServerBrowserTab.c:27
bool PassFilter(GetServersResultRow result)
Определения ServerBrowserTab.c:539
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:426
void UpdateServerList()
void SwitchToFilters(bool focus=true)
ref map< string, ref array< string > > m_EntryMods
Определения ServerBrowserTab.c:33
void Focus()
Определения ServerBrowserTab.c:194
bool m_Loading
Определения ServerBrowserTab.c:47
void ColorNormal(Widget w)
Определения ServerBrowserTab.c:681
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:619
ESortOrder m_SortOrder
Определения ServerBrowserTab.c:42
SpacerBaseWidget m_ServerList
Определения ServerBrowserTab.c:28
void ShowServerDetails()
Определения ServerBrowserTab.c:787
Widget m_FilterSearchTextBox
Определения ServerBrowserTab.c:70
bool IsFocusable(Widget w)
Определения ServerBrowserTab.c:325
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
void ColorHighlight(Widget w)
Определения ServerBrowserTab.c:632
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:600
Widget m_Root
Определения SizeToChild.c:91
proto native WorkspaceWidget GetWorkspace()
int m_NumServers
Определения BiosLobbyService.c:349
ref GetServersResultRowArray m_Results
Определения BiosLobbyService.c:347
GetServersResult the output structure of the GetServers operation.
Определения BiosLobbyService.c:344
string GetValueStr(ESortType sort_type)
Определения BiosLobbyService.c:221
string m_TimeOfDay
Определения BiosLobbyService.c:183
int m_SortTime
Определения BiosLobbyService.c:174
string m_Name
Определения BiosLobbyService.c:147
string m_Id
Определения BiosLobbyService.c:145
int CompareTo(GetServersResultRow other, ESortType sortType)
Определения BiosLobbyService.c:272
bool m_Favorite
Определения BiosLobbyService.c:193
int m_SortName
Определения BiosLobbyService.c:173
int GetValueInt(ESortType sort_type)
Определения BiosLobbyService.c:241
bool m_IsSelected
Определения BiosLobbyService.c:175
GetServersResultRow the output structure of the GetServers operation that represents one game server.
Определения BiosLobbyService.c:144
Определения 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:619
void OnClickPageFirst()
Определения ServerBrowserTabPc.c:483
void UpdateStatusBar()
Определения ServerBrowserTabPc.c:1121
void OnClickFilters()
Определения ServerBrowserTabPc.c:1219
override bool IsFocusable(Widget w)
Определения ServerBrowserTabPc.c:1173
override void ShowServerDetails()
Определения ServerBrowserTabPc.c:1237
Widget m_PnlPagesPanel
Определения ServerBrowserTabConsolePages.c:22
override void ApplyFilters()
Определения ServerBrowserTabPc.c:202
override bool OnClick(Widget w, int x, int y, int button)
Определения ServerBrowserTabPc.c:290
void ToggleSort(ESortType type)
Определения ServerBrowserTabPc.c:510
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
Определения ServerBrowserTabPc.c:382
void UpdatePageButtons()
Определения ServerBrowserTabConsolePages.c:646
void OnClickPagePrev()
Определения ServerBrowserTabPc.c:454
void LoadingServersStop()
Определения ServerBrowserTabPc.c:210
override void SwitchToDetails(bool focus=true)
Определения ServerBrowserTabPc.c:1224
ServerBrowserEntry GetServerEntryByIndex(int index)
Определения ServerBrowserTabConsolePages.c:284
override void SetSort(ESortType type, ESortOrder order)
Определения ServerBrowserTabPc.c:541
TextWidget m_PnlPagesLoadingText
Определения ServerBrowserTabConsolePages.c:23
override void SwitchToFilters(bool focus=true)
Определения ServerBrowserTabPc.c:1229
int SortedInsertDesc(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:848
void SetPageIndex(int page_index)
Определения ServerBrowserTabPc.c:502
override int AddSorted(GetServersResultRow entry)
Определения ServerBrowserTabPc.c:653
void ButtonCancelToRefresh()
Определения ServerBrowserTabPc.c:1208
ref array< ButtonWidget > m_BtnPages
Определения ServerBrowserTabPc.c:23
ref array< ref ServerBrowserEntry > m_ServerListEntries
Определения ServerBrowserTabPc.c:24
override void ResetFilters()
Определения ServerBrowserTabPc.c:190
Widget m_FilterPanelAccTime
Определения ServerBrowserTabPc.c:21
int m_ServersEstimateCount
Определения ServerBrowserTabConsolePages.c:18
int SortedInsertAsc(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:758
ButtonWidget m_BtnPagesFirst
Определения ServerBrowserTabPc.c:15
override void RefreshList()
Определения ServerBrowserTabPc.c:162
void OnClickPageNext()
Определения ServerBrowserTabPc.c:466
int m_PageIndex
Определения ServerBrowserTabPc.c:7
Widget m_FilterSearchIPBox
Определения ServerBrowserTabPc.c:19
ServerBrowserEntry GetServerEntryByIndex(int index, string server_id)
Определения ServerBrowserTabPc.c:1144
override void UpdateServerList()
Определения ServerBrowserTabPc.c:1073
override void OnFilterChanged()
Определения ServerBrowserTabPc.c:442
override bool OnMouseEnter(Widget w, int x, int y)
Определения ServerBrowserTabPc.c:362
int SortedInsertEx(GetServersResultRow entry, ESortType sortType, bool isDescending)
Определения ServerBrowserTabPc.c:692
int SortedInsert(GetServersResultRow entry, ESortType sort_type)
Определения ServerBrowserTabPc.c:687
void ~ServerBrowserTabPc()
Определения ServerBrowserTabPc.c:157
override void OnLoadServerModsAsync(string server_id, array< string > mods)
Определения ServerBrowserTabPc.c:1134
override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
Определения ServerBrowserTabPc.c:28
const int PAGES_BUTTONS_COUNT
Определения ServerBrowserTabPc.c:4
void OnClickDetails()
Определения ServerBrowserTabPc.c:1214
ButtonWidget m_BtnPagesLast
Определения ServerBrowserTabPc.c:16
void OnLoadServersAsyncPCFinished()
Определения ServerBrowserTabPc.c:285
void OnClickPageEnd()
Определения ServerBrowserTabPc.c:478
override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
Определения ServerBrowserTabPc.c:231
const int SERVERS_VISIBLE_COUNT
Определения ServerBrowserTabPc.c:3
override bool OnMouseButtonUp(Widget w, int x, int y, int button)
Определения ServerBrowserTabPc.c:398
Widget m_FilterSearchIP
Определения ServerBrowserTabPc.c:18
void ButtonRefreshToCancel()
Определения ServerBrowserTabPc.c:1202
bool OnClickPage(Widget w)
Определения ServerBrowserTabPc.c:488
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.
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
Определения EnDebug.c:90
array< string > TStringArray
Определения EnScript.c:685
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.
static proto float Ceil(float f)
Returns ceil 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 external Widget CreateWidgets(string layout, Widget parentWidget=NULL, bool immedUpdate=true)
Create widgets from *.layout file.
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