3 protected const int SERVERS_VISIBLE_COUNT = 24;
4 protected const int PAGES_BUTTONS_COUNT = 10;
6 protected int m_TotalServersCount;
8 protected int m_PageStartNum;
9 protected int m_PageEndNum;
10 protected int m_PagesCount;
11 protected int m_ServersEstimateCount;
13 protected Widget m_PnlPagesPanel;
14 protected TextWidget m_PnlPagesLoadingText;
28 protected override void Construct(Widget parent, ServerBrowserMenuNew menu,
TabType type)
30 #ifdef PLATFORM_CONSOLE
31 m_Root =
GetGame().GetWorkspace().CreateWidgets(
"gui/layouts/new_ui/server_browser/xbox/server_browser_tab.layout", parent);
33 #ifdef PLATFORM_WINDOWS
34 m_Root =
GetGame().GetWorkspace().CreateWidgets(
"gui/layouts/new_ui/server_browser/pc/server_browser_tab_pages.layout", parent);
80 m_FilterSearchIP =
m_Root.FindAnyWidget(
"search_ip_setting");
81 m_FilterSearchIPBox =
m_Root.FindAnyWidget(
"search_ip_setting_option");
83 m_FilterPanelAccTime =
m_Root.FindAnyWidget(
"accelerated_time_setting");
84 m_FilterPanelPing =
m_Root.FindAnyWidget(
"ping_setting");
91 m_Filters =
new ServerBrowserFilterContainer(
m_Root.FindAnyWidget(
"filters_content"),
this);
99 int page_button_num = 1;
100 ButtonWidget page_button = ButtonWidget.Cast(
m_Root.FindAnyWidget(
"servers_navigation_page" + page_button_num));
102 if (PAGES_BUTTONS_COUNT < 3 || PAGES_BUTTONS_COUNT > 10)
104 Error(
"ServerBrowserTabPage->PAGES_BUTTONS_COUNT must be in range 3 - 10!");
110 page_button.Show(
false);
112 if (page_button_num <= PAGES_BUTTONS_COUNT)
114 m_BtnPages.Insert(page_button);
118 page_button = ButtonWidget.Cast(
m_Root.FindAnyWidget(
"servers_navigation_page"+ page_button_num));
123 m_PnlPagesPanel =
m_Root.FindAnyWidget(
"servers_navigation_spacer");
126 m_BtnPagesFirst = ButtonWidget.Cast(
m_Root.FindAnyWidget(
"servers_navigation_page_first"));
127 m_BtnPagesLast = ButtonWidget.Cast(
m_Root.FindAnyWidget(
"servers_navigation_page_last"));
129 m_PnlPagesPanel.Show(
true);
133 m_Details =
new ServerBrowserDetailsContainer(
m_Root.FindAnyWidget(
"details_content"),
this);
137 m_Root.FindAnyWidget(
"filters_content").Show(
false);
138 m_Root.FindAnyWidget(
"reset_filter_button").Show(
false);
140 m_Root.FindAnyWidget(
"spacer").Show(
false);
141 m_Root.FindAnyWidget(
"spacer1").Show(
false);
142 m_Root.FindAnyWidget(
"spacer5").Show(
false);
168 m_ServerListEntries.Clear();
174 m_TotalServersCount = 0;
176 m_ServersEstimateCount = 0;
184 ButtonRefreshToCancel();
217 ButtonCancelToRefresh();
235 int count = result_list.m_Results.Count();
238 for (
int i = 0; i < count; i++)
241 m_TotalServersCount++;
243 result.m_SortName = result.m_Name.ToInt();
244 result.m_SortTime = GetTimeOfDayEnum(result.m_TimeOfDay);
249 if (sorted_index < (
m_PageIndex * SERVERS_VISIBLE_COUNT + SERVERS_VISIBLE_COUNT))
272 if (response ==
"thelastone")
274 OnLoadServersAsyncPCFinished();
278 m_ServersEstimateCount = result_list.m_NumServers;
287 LoadingServersStop();
290 override bool OnClick(Widget w,
int x,
int y,
int button)
292 super.OnClick(w,
x,
y, button);
309 LoadingServersStop();
328 else if (w == m_BtnPagesLast)
333 else if (w == m_BtnPagesFirst)
350 bool click = OnClickPage(w);
372 else if (w == m_FilterSearchIP)
374 SetFocus(m_FilterSearchIPBox);
462 SetPageIndex( m_PagesCount - 1 );
480 SetPageIndex( m_PagesCount - 1 );
490 for (
int i = 0; i < m_BtnPages.Count(); ++i )
492 if ( m_BtnPages[i] == w )
494 SetPageIndex( m_PageStartNum + i - 1 );
538 SetSort( type, order );
543 super.SetSort( type, order);
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 );
550 m_Root.FindAnyWidget(
"time_sort" ).Show(
false );
551 m_Root.FindAnyWidget(
"ping_sort" ).Show(
false );
552 m_Root.FindAnyWidget(
"map_sort" ).Show(
false );
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 ) );
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 ) );
574 r_name =
"server_list_content_header_host_label";
575 w_name =
"host_sort";
580 r_name =
"server_list_content_header_time_label";
581 w_name =
"time_sort";
586 r_name =
"server_list_content_header_population_label";
587 w_name =
"population_sort";
592 r_name =
"server_list_content_header_slots_label";
593 w_name =
"slots_sort";
598 r_name =
"server_list_content_header_ping_label";
599 w_name =
"ping_sort";
604 r_name =
"server_list_content_header_map_label";
610 root = TextWidget.Cast(
m_Root.FindAnyWidget( r_name ) );
611 root.SetColor(
ARGBF( 1, 1, 0, 0 ) );
613 m_Root.FindAnyWidget( w_name ).Show(
true );
623 time_of_day.Split(
":", m_TempTime );
627 if ( m_TempTime.Count() > 0 )
629 int h = m_TempTime[0].ToInt();
643 if ( m_TempTime.Count() > 1 )
645 int m = m_TempTime[0].ToInt();
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 );
689 return SortedInsertEx(entry, sort_type,
m_SortInverted[sort_type]);
695 int indexMax = list.Count() - 1;
697 int targetIndex =
Math.Floor( indexMax / 2 );
698 int comparisonMultiplier = 1;
701 if (isDescending ==
true)
703 comparisonMultiplier = -1;
706 if ( indexMax == -1 )
708 list.Insert( entry );
714 int comparisonResult = comparisonMultiplier * entry.CompareTo(list[targetIndex], sortType);
716 if ((indexMax - indexMin) <= 1)
718 for (
int i = indexMin; i <= indexMax; i++ )
720 comparisonResult = comparisonMultiplier * entry.CompareTo(list[i], sortType);
722 if ( comparisonResult > 0 )
724 list.InsertAt( entry, i );
730 targetIndex =
Math.Min(indexMax + 1, list.Count());
731 list.InsertAt(entry, targetIndex);
735 if (comparisonResult == 0)
737 list.InsertAt(entry, targetIndex);
741 if (comparisonResult > 0)
743 indexMax = targetIndex;
746 else if (comparisonResult < 0)
748 indexMin = targetIndex;
751 targetIndex = indexMin +
Math.Floor((indexMax - indexMin) / 2);
764 int index_max = list.Count() - 1;
765 int target_index =
Math.Floor( index_max / 2 );
767 if ( index_max == -1 )
769 list.Insert( entry );
775 string entry_value_str = entry.GetValueStr(
ESortType.HOST);
779 string target_value_str = list[target_index].GetValueStr(
ESortType.HOST);
781 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
783 for ( i = index_min; i <= index_max; i++ )
785 if ( entry_value_str <= list[i].GetValueStr(
ESortType.HOST) )
787 list.InsertAt( entry, i );
793 list.InsertAt( entry, index_max );
796 else if ( entry_value_str < target_value_str )
798 index_max = target_index;
799 target_index =
Math.Floor( target_index / 2 );
801 else if ( entry_value_str > target_value_str )
803 index_min = target_index;
804 target_index +=
Math.Floor( (index_max - index_min) / 2 );
810 int entry_value_int = entry.GetValueInt( sort_type );
814 int target_value_int = list[target_index].GetValueInt( sort_type );
816 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
818 for ( i = index_min; i <= index_max; i++ )
820 if ( entry_value_int <= list[i].GetValueInt( sort_type ) )
822 list.InsertAt( entry, i );
828 list.InsertAt( entry, index_max );
831 else if ( entry_value_int < target_value_int )
833 index_max = target_index;
834 target_index =
Math.Floor( target_index / 2 );
836 else if ( entry_value_int > target_value_int )
838 index_min = target_index;
839 target_index +=
Math.Floor( (index_max - index_min) / 2 );
854 int index_max = list.Count() - 1;
855 int target_index =
Math.Floor( index_max / 2 );
857 if ( index_max == -1 )
859 list.Insert( entry );
865 string entry_value_str = entry.GetValueStr(
ESortType.HOST);
869 string target_value_str = list[target_index].GetValueStr(
ESortType.HOST);
871 if ( entry_value_str == target_value_str || ((index_max - index_min) <= 1) )
873 for ( i = index_min; i <= index_max; i++ )
875 if ( entry_value_str >= list[i].GetValueStr(
ESortType.HOST) )
877 list.InsertAt( entry, i );
883 list.InsertAt( entry, index_max );
886 else if ( entry_value_str > target_value_str )
888 index_max = target_index;
889 target_index =
Math.Floor( target_index / 2 );
891 else if ( entry_value_str < target_value_str )
893 index_min = target_index;
894 target_index +=
Math.Floor( (index_max - index_min) / 2 );
900 int entry_value_int = entry.GetValueInt( sort_type );
904 int target_value_int = list[target_index].GetValueInt( sort_type );
906 if ( entry_value_int == target_value_int || ((index_max - index_min) <= 1) )
908 for ( i = index_min; i <= index_max; i++ )
910 if ( entry_value_int >= list[i].GetValueInt( sort_type ) )
912 list.InsertAt( entry, i );
918 list.InsertAt( entry, index_max );
921 else if ( entry_value_int > target_value_int )
923 index_max = target_index;
924 target_index =
Math.Floor( target_index / 2 );
926 else if ( entry_value_int < target_value_int )
928 index_min = target_index;
929 target_index +=
Math.Floor( (index_max - index_min) / 2 );
937 void UpdatePageButtons()
940 if ( m_PagesCount > 1 )
942 m_PnlPagesPanel.Show(
true );
945 int btn_index_center =
Math.Round( PAGES_BUTTONS_COUNT / 2) - 1;
947 m_PageEndNum = PAGES_BUTTONS_COUNT;
949 if ( m_PagesCount <= PAGES_BUTTONS_COUNT )
951 m_PageEndNum = m_PagesCount;
954 for ( i = 1; i <= m_BtnPages.Count(); ++i )
956 bool is_page_button_enable = ( i <= m_PagesCount );
958 int page_index = (i - 1);
959 m_BtnPages[page_index].Show( is_page_button_enable );
960 m_BtnPages[page_index].SetText( i.ToString() );
964 m_BtnPages[page_index].SetState(
true );
968 m_BtnPages[page_index].SetState(
false );
983 m_PageStartNum =
m_PageIndex - btn_index_center + 1;
984 m_PageEndNum =
m_PageIndex + (PAGES_BUTTONS_COUNT - btn_index_center);
986 if ( m_PageEndNum > m_PagesCount )
989 m_PageStartNum -= m_PageEndNum - m_PagesCount;
990 m_PageEndNum -= m_PageEndNum - m_PagesCount;
999 if ( m_PageEndNum == m_PagesCount )
1002 selected_btn_index = PAGES_BUTTONS_COUNT - (m_PagesCount -
m_PageIndex);
1007 selected_btn_index = btn_index_center;
1012 for ( i = 0; i < m_BtnPages.Count(); ++i )
1014 m_BtnPages[i].SetText( (m_PageStartNum + i).
ToString() );
1015 m_BtnPages[i].SetState( ( i == selected_btn_index ) );
1044 if ( m_PageStartNum == 1 )
1046 m_BtnPagesFirst.SetText(
"" );
1047 m_BtnPagesFirst.Enable(
false );
1051 m_BtnPagesFirst.SetText(
"<<" );
1052 m_BtnPagesFirst.Enable(
true );
1056 if ( m_PageEndNum == m_PagesCount )
1058 m_BtnPagesLast.SetText(
"" );
1059 m_BtnPagesLast.Enable(
false );
1063 m_BtnPagesLast.SetText(
">>" );
1064 m_BtnPagesLast.Enable(
true );
1069 m_PnlPagesPanel.Show(
false);
1075 int lastFilledIndexOnPage = 0;
1077 ServerBrowserEntry entry;
1081 for (
int i = 0; i < SERVERS_VISIBLE_COUNT; ++i)
1083 int serverIndex = i + (SERVERS_VISIBLE_COUNT *
m_PageIndex);
1089 if (server_info.m_Favorite)
1096 entry = GetServerEntryByIndex(i, server_info.m_Id);
1098 entry.SetIsOnline(
true);
1099 entry.FillInfo(server_info);
1101 entry.UpdateEntry();
1103 lastFilledIndexOnPage++;
1107 entry = GetServerEntryByIndex(i,
"-1");
1121 void UpdateStatusBar()
1130 m_LoadingText.SetText(
string.Format(
"#dayz_game_loading %1", serversFound) );
1136 super.OnLoadServerModsAsync( server_id, mods );
1146 ref ServerBrowserEntry entry;
1150 if ( index < m_ServerListEntries.Count() )
1152 entry = m_ServerListEntries[index];
1156 entry =
new ServerBrowserEntry( null, index,
this );
1159 m_ServerListEntries.Insert(entry);
1177 if ( super.IsFocusable( w ) )
1192 if ( w == m_FilterPanelAccTime || m_FilterPanelPing )
1205 btn.SetText(
"#menu_cancel" );
1211 btn.SetText(
"#STR_server_browser_tab_root_filters_root_filters_content_refresh_list_button0" );
1239 super.ShowServerDetails();
EBiosError
Possible Error codes for bios API. This is the list of errors that can be returned from bios API....
GetServersResult the output structure of the GetServers operation.
GetServersResultRow the output structure of the GetServers operation that represents one game server.
int GetTimeOfDayEnum(string time_of_day)
override bool IsFocusable(Widget w)
override void ShowServerDetails()
override void ApplyFilters()
override bool OnClick(Widget w, int x, int y, int button)
void ToggleSort(ESortType type)
override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
void LoadingServersStop()
override void SwitchToDetails(bool focus=true)
override void SetSort(ESortType type, ESortOrder order)
override void SwitchToFilters(bool focus=true)
void SetPageIndex(int page_index)
override int AddSorted(GetServersResultRow entry)
void ButtonCancelToRefresh()
ref array< ButtonWidget > m_BtnPages
ref array< ref ServerBrowserEntry > m_ServerListEntries
override void ResetFilters()
Widget m_FilterPanelAccTime
ButtonWidget m_BtnPagesFirst
override void RefreshList()
Widget m_FilterSearchIPBox
ServerBrowserEntry GetServerEntryByIndex(int index, string server_id)
override void OnFilterChanged()
override bool OnMouseEnter(Widget w, int x, int y)
int SortedInsert(GetServersResultRow entry, ESortType sort_type)
void ~ServerBrowserTabPc()
override void Construct(Widget parent, ServerBrowserMenuNew menu, TabType type)
ButtonWidget m_BtnPagesLast
void OnLoadServersAsyncPCFinished()
override void OnLoadServersAsyncPC(GetServersResult result_list, EBiosError error, string response)
override bool OnMouseButtonUp(Widget w, int x, int y, int button)
void ButtonRefreshToCancel()
bool OnClickPage(Widget w)
override void RefreshList()
override void LoadExtraEntries(int index)
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
proto native CGame GetGame()
void Error(string err)
Messagebox with error message.
array< string > TStringArray
int ARGBF(float fa, float fr, float fg, float fb)
Converts <0.0, 1.0> ARGB into color.
ref ServerBrowserFilterContainer m_Filters
ref map< ESortType, ref array< ref GetServersResultRow > > m_EntriesSorted
Widget m_FilterSearchText
TextWidget m_RightAreaHeaderText
ServerBrowserEntry m_SelectedServer
void ButtonDisable(Widget w)
ButtonWidget m_BtnPageNext
ref map< ESortType, ESortOrder > m_SortInverted
ButtonWidget m_BtnShowFilters
ref map< string, ref ServerBrowserEntry > m_EntryWidgets
void SwitchToDetails(bool focus=true)
ScrollWidget m_ServerListScroller
bool PassFilter(GetServersResultRow result)
string m_CurrentSelectedServer
ServerBrowserMenuNew m_Menu
void SwitchToFilters(bool focus=true)
ref map< string, ref array< string > > m_EntryMods
void ColorNormal(Widget w)
ButtonWidget m_BtnPagePrev
void ButtonEnable(Widget w)
SpacerBaseWidget m_ServerList
Widget m_FilterSearchTextBox
bool IsFocusable(Widget w)
ref ServerBrowserDetailsContainer m_Details
void OnLoadServerModsAsync(string server_id, array< string > mods)
void ColorHighlight(Widget w)
ref set< string > m_OnlineFavServers
ButtonWidget m_BtnShowDetails
int AddSorted(GetServersResultRow entry)