aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Northstar.Client/mod.json23
-rw-r--r--Northstar.Client/mod/resource/northstar_client_localisation_english.txtbin18414 -> 20042 bytes
-rw-r--r--Northstar.Client/mod/resource/ui/menus/server_browser.menu2319
-rw-r--r--Northstar.Client/mod/scripts/vscripts/sh_menu_models.gnut6
-rw-r--r--Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut1124
5 files changed, 3298 insertions, 174 deletions
diff --git a/Northstar.Client/mod.json b/Northstar.Client/mod.json
index ac1e0951..4842755b 100644
--- a/Northstar.Client/mod.json
+++ b/Northstar.Client/mod.json
@@ -3,7 +3,28 @@
"Description" : "Various ui and client changes to fix bugs and add better support for mods",
"Version": "1.0.0",
"LoadPriority": 0,
-
+ "ConVars": [
+ {
+ "Name": "filter_hide_empty",
+ "DefaultValue": "0"
+ },
+ {
+ "Name": "filter_hide_full",
+ "DefaultValue": "0"
+ },
+ {
+ "Name": "filter_hide_protected",
+ "DefaultValue": "0"
+ },
+ {
+ "Name": "filter_map",
+ "DefaultValue": "0"
+ },
+ {
+ "Name": "filter_gamemode",
+ "DefaultValue": "0"
+ }
+ ],
// ui inits need to happen before so our init callbacks get called
"Scripts": [
{
diff --git a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt
index a0a8026e..b37afef3 100644
--- a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt
+++ b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt
Binary files differ
diff --git a/Northstar.Client/mod/resource/ui/menus/server_browser.menu b/Northstar.Client/mod/resource/ui/menus/server_browser.menu
index 213f46e9..b67a2918 100644
--- a/Northstar.Client/mod/resource/ui/menus/server_browser.menu
+++ b/Northstar.Client/mod/resource/ui/menus/server_browser.menu
@@ -34,45 +34,1744 @@ resource/ui/menus/mods_browse.menu
ControlName ImagePanel
InheritProperties MenuTopBar
}
-
+
ButtonRowAnchor
{
ControlName Label
labelText ""
- xpos 120
- ypos 160
+ xpos 130
+ ypos 204
+ }
+
+ RowButtonsAnchor
+ {
+ ControlName Label
+ labelText ""
+
+ xpos 94
+ ypos 160
+ }
+
+ FilterButtonsRowAnchor
+ {
+ ControlName Label
+ labelText ""
+
+ xpos 90
+ ypos 807
+ }
+
+///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+ DarkenBackground
+ {
+ ControlName Label
+ classname ConnectingHUD
+ xpos 0
+ ypos 0
+ zpos 99
+ wide %100
+ tall %100
+ labelText ""
+ bgcolor_override "0 0 0 160"
+ visible 1
+ paintbackground 1
+ }
+
+ ConnectingAnimation
+ {
+ ControlName RuiPanel
+ classname ConnectingHUD
+ rui "ui/matchmaking_status_big.rpak"
+
+ xpos 448
+ ypos 284
+ wide 1024
+ tall 512
+
+ zpos 100
+ visible 1
+ }
+
+
+
+ ConnectingLabel
+ {
+ ControlName Label
+ classname ConnectingHUD
+ wide 160
+ tall 40
+ ypos -310
+ xpos -432
+ labelText "#CONNECTING"
+ fgcolor_override "107 166 196 255"
+ textAlignment center
+
+ visible 1
+ zpos 101
+
+ pin_to_sibling ConnectingAnimation
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ ConnectingLabelBackground
+ {
+ ControlName RuiPanel
+ classname ConnectingHUD
+ wide 160
+ tall 40
+ ypos -310
+ xpos -432
+ zpos 100
+
+ rui "ui/knowledgebase_panel.rpak"
+
+ pin_to_sibling ConnectingAnimation
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ ConnectingButton
+ {
+ ControlName RuiButton
+ classname ConnectingHUD
+ InheritProperties RuiSmallButton
+ labelText "#CANCEL"
+ textAlignment center
+ wide 100
+ tall 40
+ ypos -220
+ xpos -462
+ zpos 101
+
+ //fgcolor_override "107 166 196 255"
+
+ pin_to_sibling ConnectingAnimation
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ ConnectingButtonBackground
+ {
+ ControlName RuiPanel
+ classname ConnectingHUD
+ wide 100
+ tall 40
+ ypos -220
+ xpos -462
+ zpos 100
+
+ rui "ui/knowledgebase_panel.rpak"
+
+ pin_to_sibling ConnectingAnimation
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
}
-
- //test
- //{
- // ControlName ListPanel
- // xpos "200"
- // ypos "200"
- // zpos 999
- // wide "312"
- // tall "340"
- // autoResize "0"
- // pinCorner "0"
- // visible "1"
- // enabled "1"
- // tabPosition "0"
- //}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ // PasswordProtected
+
+ // BtnServerPasswordProtected (lock icons) dont pin to specified siblings
+ // Their 0,0 is the screen 0,0
+ // Too lazy to fix hopefully doesn't break on other resolutions
+ BtnServerPasswordProtectedTab
+ {
+ ControlName ImagePanel
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+
+ pin_to_sibling RowButtonsAnchor
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerPasswordProtected1
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 200
+
+ pin_to_sibling BtnServer1
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected2
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 239
+
+ pin_to_sibling BtnServer2
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected3
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 279
+
+ pin_to_sibling BtnServer3
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected4
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 319
+
+ pin_to_sibling BtnServer4
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected5
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 359
+
+ pin_to_sibling BtnServer5
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected6
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 399
+
+ pin_to_sibling BtnServer6
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected7
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 439
+
+ pin_to_sibling BtnServer7
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected8
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 479
+
+ pin_to_sibling BtnServer8
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected9
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 519
+
+ pin_to_sibling BtnServer9
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected10
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 559
+
+ pin_to_sibling BtnServer10
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected11
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 399
+
+ pin_to_sibling BtnServer11
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected12
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 639
+
+ pin_to_sibling BtnServer12
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected13
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 679
+
+ pin_to_sibling BtnServer13
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected14
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 719
+
+ pin_to_sibling BtnServer14
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPasswordProtected15
+ {
+ ControlName ImagePanel
+ classname ServerLock
+ image "ui/menu/common/locked_icon"
+ scaleImage 1
+ wide 48
+ tall 48
+ xpos 94
+ ypos 759
+
+ pin_to_sibling BtnServer15
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ // Name
+ BtnServerNameTab
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#SERVERS_COLUMN"
+ wide 600
+ xpos -4
+ ypos -1
+
+ scriptID 999
+
+ pin_to_sibling BtnServerPasswordProtectedTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ navDown BtnServer1
+ navRight BtnServerPlayersTab
+ }
+
+ BtnServerName0
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+ interactive false
+
+
+ pin_to_sibling BtnServer1
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName1
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer2
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName2
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer3
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName3
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer4
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName4
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer5
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName5
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer6
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName6
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer7
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName7
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer8
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName8
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer9
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName9
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer10
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName10
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer11
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName11
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer12
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName12
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer13
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName13
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer14
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerName14
+ {
+ ControlName Label
+ labelText ""
+ textAlignment west
+ classname ServerName
+ wide 586
+ tall 44
+ ypos -44
+ xpos -14
+
+ pin_to_sibling BtnServer15
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+
+ // Players
+ BtnServerPlayersTab
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#PLAYERS_COLUMN"
+ wide 104
+ xpos 4
+
+ scriptID 999
+
+ pin_to_sibling BtnServerNameTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ navDown BtnServer1
+ navLeft BtnServerNameTab
+ navRight BtnServerMapTab
+ }
+
+ BtnServerPlayers1
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer1
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers2
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer2
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers3
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer3
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers4
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer4
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers5
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer5
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers6
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer6
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers7
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer7
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers8
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer8
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers9
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer9
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers10
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer10
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers11
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer11
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers12
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer12
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers13
+ {
+ ControlName Label
+ labelText "16/16"
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer13
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers14
+ {
+ ControlName Label
+ labelText "8/8"
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer14
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerPlayers15
+ {
+ ControlName Label
+ labelText ""
+ classname PlayerCount
+ textAlignment center
+ wide 104
+ tall 44
+ ypos -44
+ xpos -600
+
+ pin_to_sibling BtnServer15
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ // Map
+ BtnServerMapTab
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#MAP_COLUMN"
+ textAlignment center
+ wide 140
+ xpos 4
+
+ scriptID 999
+
+ pin_to_sibling BtnServerPlayersTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ navDown BtnServer1
+ navLeft BtnServerPlayersTab
+ navRight BtnServerGamemodeTab
+ }
+
+ BtnServerMap1
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer1
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap2
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer2
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap3
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer3
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap4
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer4
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap5
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer5
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap6
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer6
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap7
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer7
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap8
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer8
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap9
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer9
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap10
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer10
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap11
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer11
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap12
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer12
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap13
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer13
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap14
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer14
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMap15
+ {
+ ControlName Label
+ labelText ""
+ classname ServerMap
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -709
+
+ pin_to_sibling BtnServer15
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ // Gamemode
+ BtnServerGamemodeTab
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#GAMEMODE_COLUMN"
+ wide 150
+ xpos 4
+
+ scriptID 999
+
+ pin_to_sibling BtnServerMapTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ navDown BtnServer1
+ navLeft BtnServerMapTab
+ navRight BtnServerLatencyTab
+ }
+
+ BtnServerGamemode1
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer1
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode2
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer2
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode3
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer3
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode4
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer4
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode5
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer5
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode6
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer6
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode7
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer7
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode8
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer8
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode9
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer9
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode10
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer10
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode11
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer11
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode12
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer12
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode13
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer13
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode14
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer14
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerGamemode15
+ {
+ ControlName Label
+ labelText ""
+ classname ServerGamemode
+ wide 140
+ textAlignment center
+ tall 44
+ ypos -44
+ xpos -860
+
+ pin_to_sibling BtnServer15
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ // Latency
+ BtnServerLatencyTab
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#LATENCY_COLUMN"
+ wide 110
+ xpos 4
+
+ scriptID 999
+
+ pin_to_sibling BtnServerGamemodeTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ navDown BtnServer1
+ navLeft BtnServerGamemodeTab
+ navLeft BtnServerJoin
+ }
+
+ BtnServerLatency1
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer1
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency2
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer2
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency3
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer3
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency4
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer4
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency5
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer5
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency6
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer6
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency7
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer7
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency8
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer8
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency9
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer9
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency10
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer10
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency11
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer11
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency12
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer12
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency13
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer13
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency14
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer14
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerLatency15
+ {
+ ControlName Label
+ labelText ""
+ classname Serverlatency
+ textAlignment center
+ wide 110
+ tall 44
+ ypos -44
+ xpos -1006
+
+ pin_to_sibling BtnServer15
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ // Dividers:
+
+ // Y
+ YDivider0
+ {
+ ControlName ImagePanel
+ wide 2
+ tall 641
+ visible 1
+ image "vgui/hud/white"
+ drawColor "160 157 149 255"
+ scaleImage 1
+ xpos 3
+ ypos -1
+
+ pin_to_sibling BtnServerNameTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ YDivider1
+ {
+ ControlName ImagePanel
+ wide 2
+ tall 641
+ visible 1
+ image "vgui/hud/white"
+ drawColor "160 157 149 255"
+ scaleImage 1
+ xpos 3
+ ypos -1
+
+ pin_to_sibling BtnServerPlayersTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ YDivider2
+ {
+ ControlName ImagePanel
+ wide 2
+ tall 641
+ visible 1
+ image "vgui/hud/white"
+ drawColor "160 157 149 255"
+ scaleImage 1
+ xpos 3
+ ypos -1
+
+ pin_to_sibling BtnServerMapTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ YDivider3
+ {
+ ControlName ImagePanel
+ wide 2
+ tall 641
+ visible 1
+ image "vgui/hud/white"
+ drawColor "160 157 149 255"
+ scaleImage 1
+ xpos 3
+ ypos -1
+
+ pin_to_sibling BtnServerGamemodeTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ YDivider4
+ {
+ ControlName ImagePanel
+ wide 2
+ tall 641
+ visible 1
+ image "vgui/hud/white"
+ drawColor "160 157 149 255"
+ scaleImage 1
+ xpos 3
+ ypos -1
+
+ pin_to_sibling BtnServerLatencyTab
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ // X
+ XDivider0
+ {
+ ControlName ImagePanel
+ wide 1150
+ tall 2
+ visible 1
+ image "vgui/hud/white"
+ drawColor "160 157 149 255"
+ scaleImage 1
+ ypos 3
+ xpos 37
+
+ pin_to_sibling BtnServerNameTab
+ pin_corner_to_sibling BOTTOM_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ // List:
+ BtnServerDummmyTop {
+ ControlName RuiButton
+ visible 1
+ width 0
+ height 0
+ }
BtnServer1
{
ControlName RuiButton
InheritProperties RuiSmallButton
classname ServerButton
scriptID 0
- navUp BtnServer15
- navDown BtnServer2
+ wide 1120
+ xpos -8
- pin_to_sibling ButtonRowAnchor
- pin_corner_to_sibling TOP_LEFT
- pin_to_sibling_corner TOP_LEFT
+ pin_to_sibling ButtonRowAnchor
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ navUp BtnServerDummmyTop
+ navRight BtnServerJoin
+ navDown BtnServer2
}
BtnServer2
{
@@ -80,11 +1779,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 1
+ wide 1120
+
pin_to_sibling BtnServer1
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer1
navDown BtnServer3
+ navRight BtnServerJoin
}
BtnServer3
{
@@ -92,11 +1794,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 2
+ wide 1120
+
pin_to_sibling BtnServer2
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer2
navDown BtnServer4
+ navRight BtnServerJoin
}
BtnServer4
{
@@ -104,12 +1809,15 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 3
+ wide 1120
+
pin_to_sibling BtnServer3
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
//ypos 11
navUp BtnServer3
navDown BtnServer5
+ navRight BtnServerJoin
}
BtnServer5
{
@@ -117,11 +1825,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 4
+ wide 1120
+
pin_to_sibling BtnServer4
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer4
navDown BtnServer6
+ navRight BtnServerJoin
}
BtnServer6
{
@@ -129,11 +1840,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 5
+ wide 1120
+
pin_to_sibling BtnServer5
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer5
navDown BtnServer7
+ navRight BtnServerJoin
}
BtnServer7
{
@@ -141,11 +1855,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 6
+ wide 1120
+
pin_to_sibling BtnServer6
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer6
navDown BtnServer8
+ navRight BtnServerJoin
}
BtnServer8
{
@@ -153,11 +1870,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 7
+ wide 1120
+
pin_to_sibling BtnServer7
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer7
navDown BtnServer9
+ navRight BtnServerJoin
}
BtnServer9
{
@@ -165,11 +1885,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 8
+ wide 1120
+
pin_to_sibling BtnServer8
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer8
navDown BtnServer10
+ navRight BtnServerJoin
}
BtnServer10
{
@@ -177,11 +1900,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 9
+ wide 1120
+
pin_to_sibling BtnServer9
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer9
navDown BtnServer11
+ navRight BtnServerJoin
}
BtnServer11
{
@@ -189,11 +1915,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 10
+ wide 1120
+
pin_to_sibling BtnServer10
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer10
navDown BtnServer12
+ navRight BtnServerJoin
}
BtnServer12
{
@@ -201,11 +1930,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 11
+ wide 1120
+
pin_to_sibling BtnServer11
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer11
navDown BtnServer13
+ navRight BtnServerJoin
}
BtnServer13
{
@@ -213,11 +1945,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 12
+ wide 1120
+
pin_to_sibling BtnServer12
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer12
navDown BtnServer14
+ navRight BtnServerJoin
}
BtnServer14
{
@@ -225,11 +1960,14 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 13
+ wide 1120
+
pin_to_sibling BtnServer13
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer13
navDown BtnServer15
+ navRight BtnServerJoin
}
BtnServer15
{
@@ -237,28 +1975,419 @@ resource/ui/menus/mods_browse.menu
InheritProperties RuiSmallButton
classname ServerButton
scriptID 14
+ wide 1120
+
pin_to_sibling BtnServer14
pin_corner_to_sibling TOP_LEFT
pin_to_sibling_corner BOTTOM_LEFT
navUp BtnServer14
- navDown BtnServer1
+ navRight BtnServerJoin
+ navDown BtnServerDummmyBottom
+ }
+ BtnServerDummmyBottom {
+ ControlName RuiButton
+ visible 1
+ width 0
+ height 0
+ }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ BtnServerListUpArrow
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ //labelText "A"
+ wide 40
+ tall 40
+ xpos 2
+ ypos 2
+
+ image "vgui/hud/white"
+ drawColor "255 255 255 128"
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerListUpArrowPanel
+ {
+ ControlName RuiPanel
+ wide 40
+ tall 40
+ xpos 2
+ ypos 2
+
+ rui "ui/control_options_description.rpak"
+
+ visible 1
+ zpos -1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerListDownArrow
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ //labelText "V"
+ wide 40
+ tall 40
+ xpos 2
+ ypos -604
+
+ image "vgui/hud/white"
+ drawColor "255 255 255 128"
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerListDownArrowPanel
+ {
+ ControlName RuiPanel
+ wide 40
+ tall 40
+ xpos 2
+ ypos -604
+
+ rui "ui/control_options_description.rpak"
+
+ visible 1
+ zpos -1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerListSlider
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ //labelText "V"
+ wide 40
+ tall 562
+ xpos 2
+ ypos -40
+ zpos 0
+
+ image "vgui/hud/white"
+ drawColor "255 255 255 128"
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerListSliderPanel
+ {
+ ControlName RuiPanel
+ wide 40
+ tall 562
+ xpos 2
+ ypos -40
+
+ rui "ui/control_options_description.rpak"
+
+ visible 1
+ zpos -1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ // sh_menu_models.gnut has a global function which gets called when
+ // left mouse button gets called while hovering and has mouse
+ // deltaX; deltaY which we can yoink for ourselfes
+ MouseMovementCapture
+ {
+ ControlName CMouseMovementCapturePanel
+ wide 40
+ tall 562
+ xpos 2
+ ypos -40
+ zpos 1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ //MouseMovementCaptureaaaaaaa
+ //{
+ // ControlName CMouseMovementCapturePanel
+ // wide %100
+ // tall %100
+ // xpos 0
+ // ypos 0
+ // zpos 2
+ //}
+
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+
+ FilterPanel
+ {
+ ControlName RuiPanel
+ wide 1200
+ tall 153
+ xpos -8
+
+ rui "ui/control_options_description.rpak"
+
+ visible 1
+ zpos -1
+
+ pin_to_sibling FilterButtonsRowAnchor
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnSearchLabel
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#SEARCHBAR_LABEL"
+ textAlignment west
+ wide 500
+ xpos -23
+ ypos -16
+
+ wrap 1
+ visible 1
+ zpos 0
+
+ pin_to_sibling FilterButtonsRowAnchor
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+
+ navUp BtnServer15
+ navDown SwtBtnSelectMap
+ }
+
+ BtnServerSearch
+ {
+ ControlName TextEntry
+ zpos 100 // This works around input weirdness when the control is constructed by code instead of VGUI blackbox.
+ xpos -400
+ ypos -5
+ wide 390
+ tall 30
+ textHidden 0
+ editable 1
+ font Default_21
+ allowRightClickMenu 0
+ allowSpecialCharacters 0
+ unicode 0
+
+ pin_to_sibling BtnSearchLabel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+
+ navUp BtnServer15
+ navDown SwtBtnSelectMap
+ }
+
+ SwtBtnSelectMap
+ {
+ ControlName RuiButton
+ InheritProperties SwitchButton
+ labelText "#MAP_FILTER"
+ ConVar "filter_map"
+ wide 500
+
+ pin_to_sibling BtnSearchLabel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+
+ navUp BtnServerSearch
+ navDown SwtBtnSelectGamemode
+ }
+
+ SwtBtnSelectGamemode
+ {
+ ControlName RuiButton
+ InheritProperties SwitchButton
+ labelText "#GAMEMODE_FILTER"
+ ConVar "filter_gamemode"
+ wide 500
+
+ pin_to_sibling SwtBtnSelectMap
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+
+ navUp SwtBtnSelectMap
+ navDown SwtBtnHideFull
+ }
+
+ SwtBtnHideFull
+ {
+ ControlName RuiButton
+ InheritProperties SwitchButton
+ labelText "#HIDE_FULL_FILTER"
+ ConVar "filter_hide_full"
+ wide 500
+
+
+ list
+ {
+ "#SWITCH_NO" 0
+ "#SWITCH_YES" 1
+ }
+
+ pin_to_sibling BtnSearchLabel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+
+ navUp SwtBtnSelectGamemode
+ navDown SwtBtnHideEmpty
+ }
+
+ SwtBtnHideEmpty
+ {
+ ControlName RuiButton
+ InheritProperties SwitchButton
+ labelText "#HIDE_EMPTY_FILTER"
+ ConVar "filter_hide_empty"
+ wide 500
+
+
+ list
+ {
+ "#SWITCH_NO" 0
+ "#SWITCH_YES" 1
+ }
+
+ pin_to_sibling SwtBtnHideFull
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+
+ navUp SwtBtnHideFull
+ navDown SwtBtnHideProtected
+ }
+
+ SwtBtnHideProtected
+ {
+ ControlName RuiButton
+ InheritProperties SwitchButton
+ labelText "#HIDE_PROT_FILTER"
+ ConVar "filter_hide_protected"
+ wide 500
+
+ list
+ {
+ "#SWITCH_NO" 0
+ "#SWITCH_YES" 1
}
-
+
+ pin_to_sibling SwtBtnHideEmpty
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+
+ navUp SwtBtnHideEmpty
+ navDown BtnFiltersClear
+ }
+
+ BtnFiltersClear
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#CLEAR_FILTERS"
+ wide 100
+ xpos -17
+ ypos -57
+ zpos 90
+
+ scriptID 999
+
+ pin_to_sibling FilterPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner BOTTOM_RIGHT
+
+ navUp SwtBtnHideProtected
+ navDown BtnDummyAfterFilterClear
+ navLeft SwtBtnHideProtected
+ navRight BtnServerJoin
+ }
+
+ BtnDummyAfterFilterClear {
+ ControlName RuiButton
+ width 0
+ height 0
+ visible 1
+ }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- LabelDetails
+ ServerDetailsPanel
{
ControlName RuiPanel
- xpos 675
+ xpos 1300
ypos 160
tall 800
- wide 950
- rui "ui/knowledgebase_panel.rpak"
+ wide 500
+ rui "ui/control_options_description.rpak"
wrap 1
visible 1
zpos -1
}
+ //TestPanel
+ //{
+ // ControlName RuiPanel
+ // tall 420
+ // wide 500
+ // ypos -330
+ // rui "ui/control_options_description.rpak"
+ // wrap 1
+ // visible 1
+ // zpos -1
+
+ // pin_to_sibling ServerDetailsPanel
+ // pin_corner_to_sibling TOP_LEFT
+ // pin_to_sibling_corner TOP_LEFT
+ //}
+
+ LabelDescription
+ {
+ ControlName Label
+ textAlignment north
+ tall 420
+ wide 460
+ ypos -300
+ xpos -20
+
+ wrap 1
+ visible 1
+ zpos -1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ LabelMods
+ {
+ ControlName Label
+ textAlignment north
+ tall 420
+ wide 460
+ ypos -330
+ xpos -20
+
+ wrap 1
+ visible 1
+ zpos -1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
NextMapImage
{
ControlName RuiPanel
@@ -269,17 +2398,32 @@ resource/ui/menus/mods_browse.menu
rui "ui/basic_menu_image.rpak"
- pin_to_sibling LabelDetails
+ pin_to_sibling ServerDetailsPanel
pin_corner_to_sibling TOP_RIGHT
pin_to_sibling_corner TOP_RIGHT
}
+
+ NextMapBack
+ {
+ ControlName RuiPanel
+ tall 288
+ wide 500
+ rui "ui/control_options_description.rpak"
+ visible 0
+ zpos 1
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
NextMapName
{
ControlName Label
pin_to_sibling NextMapImage
pin_corner_to_sibling BOTTOM_RIGHT
pin_to_sibling_corner BOTTOM_RIGHT
-
+
xpos -12
ypos 0
zpos 1
@@ -327,8 +2471,121 @@ resource/ui/menus/mods_browse.menu
pin_to_sibling_corner TOP_RIGHT
}
+ ServerName
+ {
+ ControlName Label
+ ypos -8
+ xpos -8
+ zpos 1
+ wide 492
+ tall 88
+ wrap 1
+ textAlignment north
+
+ //labelText "Server name"
+ use_proportional_insets 1
+ textinsetx 2
+ font Default_28_DropShadow
+ allcaps 1
+ fgcolor_override "255 255 255 255"
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_LEFT
+ }
+
+ BtnServerDescription
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#DESCRIPTION"
+
+ textAlignment center
+ wide 250
+ zpos 999
+ ypos -1
+
+ pin_to_sibling NextMapImage
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+ BtnServerMods
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#MODS"
+
+ textAlignment center
+ wide 250
+ zpos 999
+
+ pin_to_sibling BtnServerDescription
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ }
+
+ BtnServerJoin
+ {
+ ControlName RuiButton
+ InheritProperties RuiSmallButton
+ labelText "#JOIN_BUTTON"
+ wide 80
+ xpos -17
+ ypos -57
+ zpos 90
+
+ scriptID 999
+
+ pin_to_sibling ServerDetailsPanel
+ pin_corner_to_sibling TOP_RIGHT
+ pin_to_sibling_corner BOTTOM_RIGHT
+
+ navLeft BtnFiltersClear
+ navRight BtnServerSearch
+ }
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+ InGamePlayerLabel
+ {
+ ControlName Label
+ auto_wide_tocontents 1
+ tall 40
+ labelText "#INGAME_PLAYERS"
+ xpos -250
+ ypos 30
+ visible 1
+ zpos 101
+
+ font Default_28_ShadowGlow
+ bgcolor_override "0 0 0 120"
+ fgcolor_override "255 255 255 175"
+ visible 1
+
+ pin_to_sibling FilterPanel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner BOTTOM_LEFT
+ }
+
+ InGamePlayerCount
+ {
+ ControlName Label
+ auto_wide_tocontents 1
+ tall 40
+ labelText ""
+ font Default_28_ShadowGlow
+ bgcolor_override "0 0 0 120"
+ fgcolor_override "107 166 196 200"
+ xpos 6
+ visible 1
+ zpos 101
+
+ pin_to_sibling InGamePlayerLabel
+ pin_corner_to_sibling TOP_LEFT
+ pin_to_sibling_corner TOP_RIGHT
+ }
+
+
FooterButtons
{
ControlName CNestedPanel
diff --git a/Northstar.Client/mod/scripts/vscripts/sh_menu_models.gnut b/Northstar.Client/mod/scripts/vscripts/sh_menu_models.gnut
index 58850e6a..cd663a06 100644
--- a/Northstar.Client/mod/scripts/vscripts/sh_menu_models.gnut
+++ b/Northstar.Client/mod/scripts/vscripts/sh_menu_models.gnut
@@ -2522,7 +2522,7 @@
while ( !clGlobal.initializedMenuModels )
WaitFrame()
-
+
// setting menu camera while our viewentity isn't player will crash
// unfortunately no way to close menu if we get our viewentity set while menu is open atm
while ( GetViewEntity().GetClassName() == "class C_BaseEntity" )
@@ -2896,11 +2896,13 @@
{
float screenScaleXModifier = 1920.0 / GetScreenSize()[0] // 1920 is base screen width
float mouseXRotateDelta = deltaX * screenScaleXModifier * MOUSE_ROTATE_MULTIPLIER
- //printt( "deltaX:", deltaX, "screenScaleModifier:", screenScaleModifier, "mouseRotateDelta:", mouseRotateDelta )
+ //printt( "deltaX:", deltaX, "deltaY:", deltaY )
float screenScaleYModifier = 1080.0 / GetScreenSize()[1] // 1920 is base screen width
float mouseYRotationDelta = deltaY * screenScaleYModifier * MOUSE_ROTATE_MULTIPLIER
+ UpdateMouseDeltaBuffer( deltaX, deltaY )
+
RunMenuClientFunction( "UpdateMouseRotateDelta", mouseXRotateDelta, mouseYRotationDelta )
}
#endif // UI
diff --git a/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
index 19a544cc..dd2f8864 100644
--- a/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
+++ b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
@@ -1,14 +1,132 @@
+untyped
+// Only way to get Hud_GetPos(sliderButton) working was to use untyped
+
global function AddNorthstarServerBrowserMenu
global function ThreadedAuthAndConnectToServer
+global function UpdateMouseDeltaBuffer
+
+// Stop peeking
+
const int BUTTONS_PER_PAGE = 15
+const float DOUBLE_CLICK_TIME_MS = 0.2 // unsure what the ideal value is
+
struct {
- int page = 0
- int lastSelectedServer = 0
+ int deltaX = 0
+ int deltaY = 0
+} mouseDeltaBuffer
+
+struct {
+ bool hideFull = false
+ bool hideEmpty = false
+ bool hideProtected = false
+ bool useSearch = false
+ string searchTerm
+ array<string> filterMaps
+ string filterMap
+ array<string> filterGamemodes
+ string filterGamemode
+} filterArguments
+
+struct {
+ // true = alphabeticaly false = reverse
+ bool serverName = true
+ bool serverPlayers = true
+ bool serverMap = true
+ bool serverGamemode = true
+ bool serverLatency = true
+ // 0 = none; 1 = name; 2 = players; 3 = map; 5 = gamemode; 6 = latency
+ int sortingBy = 0
+} filterDirection
+
+struct serverStruct {
+ int serverIndex
+ bool serverProtected
+ string serverName
+ int serverPlayers
+ int serverPlayersMax
+ string serverMap
+ string serverGamemode
+ int serverLatency
+}
+
+struct {
+ var menu
+ int lastSelectedServer = 999
+ int focusedServerIndex = 0
+ int scrollOffset = 0
bool serverListRequestFailed = false
+ float serverSelectedTime = 0
+ float serverSelectedTimeLast = 0
+ int serverButtonFocusedID = 0
+ bool shouldFocus = true
+ bool cancelConnection = false
+
+ array<serverStruct> serversArrayFiltered
+
+ array<var> serverButtons
+ array<var> serversName
+ array<var> playerCountLabels
+ array<var> serversProtected
+ array<var> serversMap
+ array<var> serversGamemode
+ array<var> serversLatency
} file
+
+
+bool function floatCompareInRange(float arg1, float arg2, float tolerance)
+{
+ if ( arg1 > arg2 - tolerance && arg1 < arg2 + tolerance) return true
+ return false
+}
+
+
+
+// Hard coded for now
+array<string> function GetNorthstarGamemodes()
+{
+ array<string> modes
+
+ //modes.append( "#PL_aitdm" )
+ modes.append( "#PL_pilot_hunter" )
+ modes.append( "#PL_hardpoint" )
+ //modes.append( "#PL_attrition" )
+ modes.append( "#PL_capture_the_flag" )
+ modes.append( "#PL_last_titan_standing" )
+ modes.append( "#PL_pilot_skirmish" )
+ modes.append( "#PL_live_fire" )
+ modes.append( "#PL_marked_for_death" )
+ modes.append( "#PL_titan_brawl" )
+ //modes.append( "#PL_fd_easy" )
+ //modes.append( "#PL_fd_normal" )
+ //modes.append( "#PL_fd_hard" )
+ //modes.append( "#PL_fd_master" )
+ //modes.append( "#PL_fd_insane" )
+ modes.append( "#PL_ffa" )
+ modes.append( "#PL_fra" )
+ modes.append( "#PL_coliseum" )
+ modes.append( "#PL_aegis_titan_brawl" )
+ modes.append( "#PL_titan_brawl_turbo" )
+ modes.append( "#PL_aegis_last_titan_standing" )
+ modes.append( "#PL_turbo_last_titan_standing" )
+ modes.append( "#PL_rocket_arena" )
+ modes.append( "#PL_all_holopilot" )
+ modes.append( "#PL_gg" )
+ modes.append( "#PL_tt" )
+ modes.append( "#PL_inf" )
+ modes.append( "#PL_kr" )
+ modes.append( "#PL_fastball" )
+ modes.append( "#GAMEMODE_hs" )
+ modes.append( "#GAMEMODE_ctf_comp" )
+
+
+ return modes
+}
+////////////////////////////
+// Init
+////////////////////////////
void function AddNorthstarServerBrowserMenu()
{
AddMenu( "ServerBrowserMenu", $"resource/ui/menus/server_browser.menu", InitServerBrowserMenu, "#MENU_SERVER_BROWSER" )
@@ -16,219 +134,795 @@ void function AddNorthstarServerBrowserMenu()
void function InitServerBrowserMenu()
{
- var menu = GetMenu( "ServerBrowserMenu" )
+ file.menu = GetMenu( "ServerBrowserMenu" )
+
+ // Get menu stuff
+ file.serverButtons = GetElementsByClassname( file.menu, "ServerButton" )
+ file.serversName = GetElementsByClassname( file.menu, "ServerName" )
+ file.playerCountLabels = GetElementsByClassname( file.menu, "PlayerCount" )
+ file.serversProtected = GetElementsByClassname( file.menu, "ServerLock" )
+ file.serversMap = GetElementsByClassname( file.menu, "ServerMap" )
+ file.serversGamemode = GetElementsByClassname( file.menu, "ServerGamemode" )
+ file.serversLatency = GetElementsByClassname( file.menu, "ServerLatency" )
+
+ // Create filter arrays
+ filterArguments.filterMaps.extend(GetPrivateMatchMaps())
+ filterArguments.filterMaps.insert(0, "SWITCH_ANY")
+ filterArguments.filterMaps.append("mp_lobby")
+
+ foreach ( int enum_, string map in filterArguments.filterMaps )
+ Hud_DialogList_AddListItem( Hud_GetChild( file.menu, "SwtBtnSelectMap" ) , map, string( enum_ ) )
+
+
+ filterArguments.filterGamemodes = GetNorthstarGamemodes()
+ filterArguments.filterGamemodes.insert(0, "SWITCH_ANY")
+
+ // GetGameModeDisplayName( mode ) requires server talk even if it can be entirely client side
+ foreach ( int enum_, string mode in filterArguments.filterGamemodes )
+ Hud_DialogList_AddListItem( Hud_GetChild( file.menu, "SwtBtnSelectGamemode" ) , mode, string( enum_ ) )
+
+
+ // Event handlers
+ AddMenuEventHandler( file.menu, eUIEvent.MENU_CLOSE, OnCloseServerBrowserMenu )
+
+
+
+ AddMenuEventHandler( file.menu, eUIEvent.MENU_OPEN, OnServerBrowserMenuOpened )
+ AddMenuFooterOption( file.menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
+ AddMenuFooterOption( file.menu, BUTTON_Y, "#Y_REFRESH_SERVERS", "#REFRESH_SERVERS", RefreshServers )
+
+ // Setup server buttons
+ var width = 1120.0 * (GetScreenSize()[1] / 1080.0)
+ foreach ( var button in GetElementsByClassname( file.menu, "ServerButton" ) )
+ {
+ AddButtonEventHandler( button, UIE_CLICK, OnServerButtonClicked )
+ AddButtonEventHandler( button, UIE_GET_FOCUS, OnServerButtonFocused )
+ Hud_SetWidth( button , width )
+ }
+
+ AddButtonEventHandler( Hud_GetChild( file.menu , "BtnServerDummmyTop" ), UIE_GET_FOCUS, OnHitDummyTop )
+ AddButtonEventHandler( Hud_GetChild( file.menu , "BtnServerDummmyBottom" ), UIE_GET_FOCUS, OnHitDummyBottom )
+
+
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerJoin"), UIE_CLICK, OnServerSelected )
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerListUpArrow"), UIE_CLICK, OnUpArrowSelected )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerListDownArrow"), UIE_CLICK, OnDownArrowSelected )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnDummyAfterFilterClear"), UIE_GET_FOCUS, OnHitDummyAfterFilterClear )
+
+
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnFiltersClear"), UIE_CLICK, OnBtnFiltersClear_Activate )
+
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerNameTab"), UIE_CLICK, SortServerListByName )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerPlayersTab"), UIE_CLICK, SortServerListByPlayers )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerMapTab"), UIE_CLICK, SortServerListByMap )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerGamemodeTab"), UIE_CLICK, SortServerListByGamemode )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerLatencyTab"), UIE_CLICK, SortServerListByLatency )
+
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnSelectMap"), UIE_CHANGE, FilterAndUpdateList )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnSelectGamemode"), UIE_CHANGE, FilterAndUpdateList )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnHideFull"), UIE_CHANGE, FilterAndUpdateList )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnHideEmpty"), UIE_CHANGE, FilterAndUpdateList )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "SwtBtnHideProtected"), UIE_CHANGE, FilterAndUpdateList )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnSearchLabel"), UIE_CHANGE, FilterAndUpdateList )
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerSearch"), UIE_CHANGE, FilterAndUpdateList )
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerDescription"), UIE_CLICK, ShowServerDescription )
+ AddButtonEventHandler( Hud_GetChild( file.menu, "BtnServerMods"), UIE_CLICK, ShowServerMods )
+
+ AddButtonEventHandler( Hud_GetChild( file.menu, "ConnectingButton"), UIE_CLICK, ConnectingButton_Activate )
+
+
+ // Hidden cause no need, if server descriptions become too long use this
+ Hud_SetEnabled( Hud_GetChild( file.menu, "BtnServerDescription"), false)
+ Hud_SetEnabled( Hud_GetChild( file.menu, "BtnServerMods"), false)
+ Hud_SetText( Hud_GetChild( file.menu, "BtnServerDescription"), "")
+ Hud_SetText( Hud_GetChild( file.menu, "BtnServerMods"), "")
+
+ // Unfinished features
+ Hud_SetLocked( Hud_GetChild( file.menu, "BtnServerLatencyTab" ), true )
+
+ // Rui is a pain
+ RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "SwtBtnHideFull")), "buttonText", "")
+ RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "SwtBtnHideEmpty")), "buttonText", "")
+ RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "SwtBtnHideProtected")), "buttonText", "")
+ RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "SwtBtnSelectMap")), "buttonText", "")
+ RuiSetString( Hud_GetRui( Hud_GetChild( file.menu, "SwtBtnSelectGamemode")), "buttonText", "")
+
+
+ ToggleConnectingHUD(false)
+
+ // UI was cut off on some aspect ratios; not perfect
+ UpdateServerInfoBasedOnRes()
+}
+
+////////////////////////////
+// Slider
+////////////////////////////
+void function UpdateMouseDeltaBuffer(int x, int y)
+{
+ mouseDeltaBuffer.deltaX += x
+ mouseDeltaBuffer.deltaY += y
+
+ SliderBarUpdate()
+}
+
+void function FlushMouseDeltaBuffer()
+{
+ mouseDeltaBuffer.deltaX = 0
+ mouseDeltaBuffer.deltaY = 0
+}
+
+
+void function SliderBarUpdate()
+{
+ if ( file.serversArrayFiltered.len() <= 15 )
+ {
+ FlushMouseDeltaBuffer()
+ return
+ }
+
+ var sliderButton = Hud_GetChild( file.menu , "BtnServerListSlider" )
+ var sliderPanel = Hud_GetChild( file.menu , "BtnServerListSliderPanel" )
+ var movementCapture = Hud_GetChild( file.menu , "MouseMovementCapture" )
+
+ Hud_SetFocused(sliderButton)
+
+ float minYPos = -40.0 * (GetScreenSize()[1] / 1080.0)
+ float maxHeight = 562.0 * (GetScreenSize()[1] / 1080.0)
+ float maxYPos = minYPos - (maxHeight - Hud_GetHeight( sliderPanel ))
+ float useableSpace = (maxHeight - Hud_GetHeight( sliderPanel ))
+
+ float jump = minYPos - (useableSpace / ( float( file.serversArrayFiltered.len())))
+
+ // got local from official respaw scripts, without untyped throws an error
+ local pos = Hud_GetPos(sliderButton)[1]
+ local newPos = pos - mouseDeltaBuffer.deltaY
+ FlushMouseDeltaBuffer()
+
+ if ( newPos < maxYPos ) newPos = maxYPos
+ if ( newPos > minYPos ) newPos = minYPos
+
+ Hud_SetPos( sliderButton , 2, newPos )
+ Hud_SetPos( sliderPanel , 2, newPos )
+ Hud_SetPos( movementCapture , 2, newPos )
+
+ file.scrollOffset = -int( ( (newPos - minYPos) / useableSpace ) * (file.serversArrayFiltered.len() - 15) )
+ UpdateShownPage()
+}
+
+void function UpdateListSliderHeight( float servers )
+{
+ var sliderButton = Hud_GetChild( file.menu , "BtnServerListSlider" )
+ var sliderPanel = Hud_GetChild( file.menu , "BtnServerListSliderPanel" )
+ var movementCapture = Hud_GetChild( file.menu , "MouseMovementCapture" )
+
+ float maxHeight = 562.0 * (GetScreenSize()[1] / 1080.0)
+
+ float height = maxHeight * (15.0 / servers )
+
+ if ( height > maxHeight ) height = maxHeight
+
+ Hud_SetHeight( sliderButton , height )
+ Hud_SetHeight( sliderPanel , height )
+ Hud_SetHeight( movementCapture , height )
+}
+
+
+void function UpdateListSliderPosition( int servers )
+{
+ var sliderButton = Hud_GetChild( file.menu , "BtnServerListSlider" )
+ var sliderPanel = Hud_GetChild( file.menu , "BtnServerListSliderPanel" )
+ var movementCapture = Hud_GetChild( file.menu , "MouseMovementCapture" )
+
+ float minYPos = -40.0 * (GetScreenSize()[1] / 1080.0)
+ float useableSpace = (562.0 * (GetScreenSize()[1] / 1080.0) - Hud_GetHeight( sliderPanel ))
+
+ float jump = minYPos - (useableSpace / ( float( servers ) - 15.0 ) * file.scrollOffset)
- AddMenuEventHandler( menu, eUIEvent.MENU_OPEN, OnServerBrowserMenuOpened )
- AddMenuFooterOption( menu, BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
- AddMenuFooterOption( menu, BUTTON_Y, "#Y_REFRESH_SERVERS", "#REFRESH_SERVERS", RefreshServers )
- AddMenuFooterOption( menu, BUTTON_SHOULDER_LEFT, "#PRIVATE_MATCH_PAGE_PREV", "#PRIVATE_MATCH_PAGE_PREV", CycleServersBack )
- AddMenuFooterOption( menu, BUTTON_SHOULDER_RIGHT, "#PRIVATE_MATCH_PAGE_NEXT", "#PRIVATE_MATCH_PAGE_NEXT", CycleServersForward )
-
- foreach ( var button in GetElementsByClassname( GetMenu( "ServerBrowserMenu" ), "ServerButton" ) )
+ //jump = jump * (GetScreenSize()[1] / 1080.0)
+
+ if ( jump > minYPos ) jump = minYPos
+
+ Hud_SetPos( sliderButton , 2, jump )
+ Hud_SetPos( sliderPanel , 2, jump )
+ Hud_SetPos( movementCapture , 2, jump )
+}
+
+void function OnScrollDown( var button )
+{
+ if (file.serversArrayFiltered.len() <= 15) return
+ file.scrollOffset += 5
+ if (file.scrollOffset + BUTTONS_PER_PAGE > file.serversArrayFiltered.len()) {
+ file.scrollOffset = file.serversArrayFiltered.len() - BUTTONS_PER_PAGE
+ }
+ UpdateShownPage()
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
+}
+
+void function OnScrollUp( var button )
+{
+ file.scrollOffset -= 5
+ if (file.scrollOffset < 0) {
+ file.scrollOffset = 0
+ }
+ UpdateShownPage()
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
+}
+
+////////////////////////////
+// Connecting pop-up
+////////////////////////////
+void function ToggleConnectingHUD( bool vis )
+{
+ foreach (e in GetElementsByClassname(file.menu, "connectingHUD")) {
+ Hud_SetEnabled( e, vis )
+ Hud_SetVisible( e, vis )
+ }
+
+ if ( vis ) Hud_SetFocused( Hud_GetChild( file.menu, "ConnectingButton" ) )
+}
+
+void function ConnectingButton_Activate( var button )
+{
+ file.cancelConnection = true
+}
+
+////////////////////////////
+// Aspect ratio compensation
+////////////////////////////
+// No way to get aspect ratio sadly
+// This doesn't werk on some obscure resolutions, mostly really small 4:3
+void function UpdateServerInfoBasedOnRes()
+{
+ if (floatCompareInRange(float(GetScreenSize()[0]) / float(GetScreenSize()[1]) , 1.6, 0.07)) // 16/10
+ {
+ Hud_SetWidth( Hud_GetChild(file.menu, "ServerName"), 392)
+ Hud_SetWidth( Hud_GetChild(file.menu, "NextMapImage"), 400)
+ Hud_SetWidth( Hud_GetChild(file.menu, "NextMapBack"), 400)
+ Hud_SetWidth( Hud_GetChild(file.menu, "LabelMods"), 360)
+ Hud_SetWidth( Hud_GetChild(file.menu, "LabelDescription"), 360)
+ Hud_SetWidth( Hud_GetChild(file.menu, "ServerDetailsPanel"), 400)
+ }
+ if(floatCompareInRange(float(GetScreenSize()[0]) / float(GetScreenSize()[1]) , 1.3, 0.055)) // 4/3
{
- AddButtonEventHandler( button, UIE_GET_FOCUS, OnServerFocused )
- AddButtonEventHandler( button, UIE_CLICK, OnServerSelected )
+ Hud_SetWidth( Hud_GetChild(file.menu, "ServerName"), 292)
+ Hud_SetWidth( Hud_GetChild(file.menu, "NextMapImage"), 300)
+ Hud_SetWidth( Hud_GetChild(file.menu, "NextMapBack"), 300)
+ Hud_SetWidth( Hud_GetChild(file.menu, "LabelMods"), 260)
+ Hud_SetWidth( Hud_GetChild(file.menu, "LabelDescription"), 260)
+ Hud_SetWidth( Hud_GetChild(file.menu, "ServerDetailsPanel"), 300)
}
}
+////////////////////////////
+// Open/close callbacks
+////////////////////////////
+void function OnCloseServerBrowserMenu()
+{
+ DeregisterButtonPressedCallback(MOUSE_WHEEL_UP , OnScrollUp)
+ DeregisterButtonPressedCallback(MOUSE_WHEEL_DOWN , OnScrollDown)
+ DeregisterButtonPressedCallback(KEY_TAB , OnKeyTabPressed)
+}
+
void function OnServerBrowserMenuOpened()
{
- Hud_SetText( Hud_GetChild( GetMenu( "ServerBrowserMenu" ), "Title" ), "#MENU_TITLE_SERVER_BROWSER" )
+ Hud_SetText( Hud_GetChild( file.menu, "Title" ), "#MENU_TITLE_SERVER_BROWSER" )
UI_SetPresentationType( ePresentationType.KNOWLEDGEBASE_MAIN )
-
- file.page = 0
+
+ file.scrollOffset = 0
// dont rerequest if we came from the connect menu
if ( !NSIsRequestingServerList() && uiGlobal.lastMenuNavDirection != MENU_NAV_BACK )
{
NSClearRecievedServerList()
NSRequestServerList()
}
-
+
thread WaitForServerListRequest()
+
+
+ RegisterButtonPressedCallback(MOUSE_WHEEL_UP , OnScrollUp)
+ RegisterButtonPressedCallback(MOUSE_WHEEL_DOWN , OnScrollDown)
+ RegisterButtonPressedCallback(KEY_TAB , OnKeyTabPressed)
}
-void function RefreshServers( var button )
+////////////////////////////
+// Arrow navigation fuckery
+////////////////////////////
+bool function IsFilterPanelElementFocused() {
+ // get name of focused element
+ var focusedElement = GetFocus();
+ var name = Hud_GetHudName(focusedElement);
+
+ print(name)
+
+ // kinda sucks but just check if any of the filter elements
+ // has focus. would be nice to have tags or sth here
+ bool match = (name == "FilterPanel") ||
+ (name == "BtnSearchLabel") ||
+ (name == "BtnServerSearch") ||
+ (name == "SwtBtnSelectMap") ||
+ (name == "SwtBtnSelectGamemode") ||
+ (name == "SwtBtnHideFull") ||
+ (name == "SwtBtnHideEmpty") ||
+ (name == "SwtBtnHideProtected") ||
+ (name == "BtnFiltersClear") ||
+ (name == "BtnDummyAfterFilterClear");
+
+
+ return match;
+}
+
+void function OnKeyTabPressed(var button) {
+ // toggle focus between server list and filter panel
+ if (IsFilterPanelElementFocused()) {
+ // print("Switching focus from filter panel to server list")
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServer1"))
+ }
+ else {
+ // print("Switching focus from server list to filter panel")
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServerSearch"))
+ HideServerInfo()
+ }
+}
+
+void function OnHitDummyTop(var button) {
+ file.scrollOffset -= 1
+ if (file.scrollOffset < 0) {
+ // was at top already
+ file.scrollOffset = 0
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServerNameTab"))
+ } else {
+ // only update if list position changed
+ UpdateShownPage()
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
+ DisplayFocusedServerInfo(file.serverButtonFocusedID)
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServer1"))
+ }
+}
+
+void function OnHitDummyBottom(var button) {
+ file.scrollOffset += 1
+ if (file.scrollOffset + BUTTONS_PER_PAGE > file.serversArrayFiltered.len())
+ {
+ // was at bottom already
+ file.scrollOffset = file.serversArrayFiltered.len() - BUTTONS_PER_PAGE
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServerSearch"))
+ } else {
+ // only update if list position changed
+ UpdateShownPage()
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
+ DisplayFocusedServerInfo(file.serverButtonFocusedID)
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServer15"))
+ }
+}
+
+void function OnHitDummyAfterFilterClear(var button) {
+ Hud_SetFocused(Hud_GetChild(file.menu, "BtnServer1"))
+}
+
+
+void function OnDownArrowSelected( var button )
{
- if ( NSIsRequestingServerList() )
- return
-
- file.page = 0
- file.serverListRequestFailed = false
- NSClearRecievedServerList()
- NSRequestServerList()
-
- thread WaitForServerListRequest()
+ if (file.serversArrayFiltered.len() <= 15) return
+ file.scrollOffset += 1
+ if (file.scrollOffset + BUTTONS_PER_PAGE > file.serversArrayFiltered.len()) {
+ file.scrollOffset = file.serversArrayFiltered.len() - BUTTONS_PER_PAGE
+ }
+ UpdateShownPage()
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
}
-void function CycleServersBack( var button )
+
+void function OnUpArrowSelected( var button )
{
- if ( file.page == 0 )
- return
-
- file.page--
+ file.scrollOffset -= 1
+ if (file.scrollOffset < 0) {
+ file.scrollOffset = 0
+ }
UpdateShownPage()
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
+}
+
+
+////////////////////////////
+// Unused
+////////////////////////////
+void function ShowServerDescription( var button )
+{
+ Hud_SetVisible( Hud_GetChild( file.menu, "LabelDescription"), true)
+ Hud_SetVisible( Hud_GetChild( file.menu, "LabelMods"), false)
+}
+
+void function ShowServerMods( var button )
+{
+ Hud_SetVisible( Hud_GetChild( file.menu, "LabelDescription"), false)
+ Hud_SetVisible( Hud_GetChild( file.menu, "LabelMods"), true)
+}
+
+////////////////////////////
+// Server list; filter,update,...
+////////////////////////////
+void function HideServerInfo() {
+ Hud_SetVisible(Hud_GetChild(file.menu, "BtnServerDescription"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "BtnServerMods"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "BtnServerJoin"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "LabelDescription"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "LabelMods"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "NextMapImage"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "NextMapBack"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "NextMapName"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "ServerName"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "NextModeIcon"), false)
+ Hud_SetVisible(Hud_GetChild(file.menu, "NextGameModeName"), false)
}
-void function CycleServersForward( var button )
+void function OnBtnFiltersClear_Activate( var button )
{
- if ( ( file.page + 1 ) * BUTTONS_PER_PAGE >= NSGetServerCount() )
+ Hud_SetText( Hud_GetChild( file.menu, "BtnServerSearch" ), "" )
+
+ SetConVarBool( "filter_hide_empty", false )
+ SetConVarBool( "filter_hide_full", false )
+ SetConVarBool( "filter_hide_protected", false )
+ SetConVarInt( "filter_map", 0 )
+ SetConVarInt( "filter_gamemode", 0 )
+
+ FilterAndUpdateList(0)
+}
+
+void function FilterAndUpdateList( var n )
+{
+ filterArguments.searchTerm = Hud_GetUTF8Text( Hud_GetChild( file.menu, "BtnServerSearch" ) )
+ if ( filterArguments.searchTerm == "" ) filterArguments.useSearch = false else filterArguments.useSearch = true
+ filterArguments.filterMap = filterArguments.filterMaps[ GetConVarInt( "filter_map" ) ]
+ filterArguments.filterGamemode = filterArguments.filterGamemodes[ GetConVarInt( "filter_gamemode" ) ]
+ filterArguments.hideEmpty = GetConVarBool( "filter_hide_empty" )
+ filterArguments.hideFull = GetConVarBool( "filter_hide_full" )
+ filterArguments.hideProtected = GetConVarBool( "filter_hide_protected" )
+
+ file.scrollOffset = 0
+ UpdateListSliderPosition( file.serversArrayFiltered.len() )
+
+ FilterServerList()
+
+ switch ( filterDirection.sortingBy )
+ {
+ case 0:
+ UpdateShownPage()
+ break
+ case 1:
+ filterDirection.serverName = !filterDirection.serverName
+ SortServerListByName(0)
+ break
+ case 2:
+ filterDirection.serverPlayers = !filterDirection.serverPlayers
+ SortServerListByPlayers(0)
+ break
+ case 3:
+ filterDirection.serverMap = !filterDirection.serverMap
+ SortServerListByMap(0)
+ break
+ case 5: // 4 skipped cause it doesn't work respawn pls fix
+ filterDirection.serverGamemode = !filterDirection.serverGamemode
+ SortServerListByGamemode(0)
+ break
+ case 6:
+ filterDirection.serverLatency = !filterDirection.serverLatency
+ SortServerListByLatency(0)
+ break
+ default:
+ printt( "How the f did you get here" )
+ }
+
+ if ( file.shouldFocus )
+ {
+ file.shouldFocus = false
+ Hud_SetFocused( Hud_GetChild( file.menu, "BtnServer1" ) )
+ }
+}
+
+
+void function RefreshServers( var button )
+{
+ if ( NSIsRequestingServerList() )
return
-
- file.page++
- UpdateShownPage()
+
+ file.serverListRequestFailed = false
+ file.scrollOffset = 0
+ NSClearRecievedServerList()
+ NSRequestServerList()
+
+ thread WaitForServerListRequest()
}
+
void function WaitForServerListRequest()
{
- var menu = GetMenu( "ServerBrowserMenu" )
- array<var> serverButtons = GetElementsByClassname( menu, "ServerButton" )
- foreach ( var button in serverButtons )
+
+ for ( int i = 0; i < 15; i++)
{
- Hud_SetEnabled( button, false )
- Hud_SetVisible( button, false )
- }
-
- Hud_SetVisible( Hud_GetChild( menu, "LabelDetails" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextMapImage" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextMapName" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextModeIcon" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextGameModeName" ), false )
-
- Hud_SetEnabled( serverButtons[ 0 ], true )
- Hud_SetVisible( serverButtons[ 0 ], true )
-
- SetButtonRuiText( serverButtons[ 0 ], "#NS_SERVERBROWSER_WAITINGFORSERVERS" )
-
+ Hud_SetVisible( file.serversProtected[ i ], false )
+ Hud_SetVisible( file.serverButtons[ i ], false )
+ Hud_SetText( file.serversName[ i ], "" )
+ Hud_SetText( file.playerCountLabels[ i ], "" )
+ Hud_SetText( file.serversMap[ i ], "" )
+ Hud_SetText( file.serversGamemode[ i ], "" )
+ Hud_SetText( file.serversLatency[ i ], "" )
+ }
+
+
+ HideServerInfo()
+
+
+ Hud_SetVisible( file.serversName[ 0 ], true )
+
+ Hud_SetText( file.serversName[ 0 ], "#NS_SERVERBROWSER_WAITINGFORSERVERS" )
+
// wait for request to complete
while ( NSIsRequestingServerList() )
WaitFrame()
-
+
file.serverListRequestFailed = !NSMasterServerConnectionSuccessful()
if ( file.serverListRequestFailed )
- SetButtonRuiText( serverButtons[ 0 ], "#NS_SERVERBROWSER_CONNECTIONFAILED" )
+ {
+ Hud_SetText( file.serversName[ 0 ], "#NS_SERVERBROWSER_CONNECTIONFAILED" )
+ }
else
- UpdateShownPage()
+ {
+ FilterAndUpdateList(0)
+ }
}
-void function UpdateShownPage()
+
+
+void function FilterServerList()
{
- var menu = GetMenu( "ServerBrowserMenu" )
+ file.serversArrayFiltered.clear()
+ int totalPlayers = 0
- // hide old ui elements
- array<var> serverButtons = GetElementsByClassname( menu, "ServerButton" )
- foreach ( var button in serverButtons )
+ for ( int i = 0; i < NSGetServerCount(); i++ )
{
- Hud_SetEnabled( button, false )
- Hud_SetVisible( button, false )
- }
-
- Hud_SetFocused( serverButtons[ serverButtons.len() - 1 ] )
-
- Hud_SetVisible( Hud_GetChild( menu, "LabelDetails" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextMapImage" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextMapName" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextModeIcon" ), false )
- Hud_SetVisible( Hud_GetChild( menu, "NextGameModeName" ), false )
-
- if ( NSGetServerCount() == 0 )
+ serverStruct tempServer
+ tempServer.serverIndex = i
+ tempServer.serverProtected = NSServerRequiresPassword( i )
+ tempServer.serverName = NSGetServerName( i )
+ tempServer.serverPlayers = NSGetServerPlayerCount( i )
+ tempServer.serverPlayersMax = NSGetServerMaxPlayerCount( i )
+ tempServer.serverMap = NSGetServerMap( i )
+ tempServer.serverGamemode = GetGameModeDisplayName( NSGetServerPlaylist ( i ) )
+
+ totalPlayers += tempServer.serverPlayers
+
+
+ // Branchless programming ;)
+ if (!(filterArguments.hideEmpty && tempServer.serverPlayers == 0) && !(filterArguments.hideFull && tempServer.serverPlayers == tempServer.serverPlayersMax) && !(filterArguments.hideProtected && tempServer.serverProtected))
+ {
+ if ( filterArguments.useSearch )
+ {
+ string sName = tempServer.serverName.tolower()
+ string sTerm = filterArguments.searchTerm.tolower()
+
+ if ( sName.find(sTerm) != null)
+ {
+ if (filterArguments.filterMap != "SWITCH_ANY" && filterArguments.filterMap == tempServer.serverMap)
+ {
+ CheckGamemode( tempServer )
+ }
+ else if (filterArguments.filterMap == "SWITCH_ANY")
+ {
+ CheckGamemode( tempServer )
+ }
+ }
+ }
+ else
+ {
+ if (filterArguments.filterMap != "SWITCH_ANY" && filterArguments.filterMap == tempServer.serverMap)
+ {
+ CheckGamemode( tempServer )
+ }
+ else if (filterArguments.filterMap == "SWITCH_ANY")
+ {
+ CheckGamemode( tempServer )
+ }
+ }
+ }
+ }
+
+
+ printt("Better.Serverbrowser:------------------------")
+ printt("Server count: ", NSGetServerCount())
+ printt("Filtered count: ", file.serversArrayFiltered.len())
+ printt("Total players: ", totalPlayers)
+ printt("This message gets shown only on full refresh")
+ printt("---------------------------------------------")
+
+ Hud_SetText( Hud_GetChild( file.menu, "InGamePlayerCount" ), string( totalPlayers ) )
+}
+
+void function CheckGamemode( serverStruct t )
+{
+ if (filterArguments.filterGamemode != "SWITCH_ANY" && filterArguments.filterGamemode == t.serverGamemode)
{
- Hud_SetEnabled( serverButtons[ 0 ], true )
- Hud_SetVisible( serverButtons[ 0 ], true )
- SetButtonRuiText( serverButtons[ 0 ], "#NS_SERVERBROWSER_NOSERVERS" )
- return
+ file.serversArrayFiltered.append( t )
}
-
- // this trycatch likely isn't necessary, but i can't test whether this'll error on higher pagecounts and want to go sleep
- try
+ else if (filterArguments.filterGamemode == "SWITCH_ANY")
{
- for ( int i = 0; ( file.page * BUTTONS_PER_PAGE ) + i < NSGetServerCount() && i < serverButtons.len(); i++ )
+ file.serversArrayFiltered.append( t )
+ }
+}
+
+
+void function UpdateShownPage()
+{
+
+ for ( int i = 0; i < 15; i++)
{
- int serverIndex = ( file.page * BUTTONS_PER_PAGE ) + i
-
- Hud_SetEnabled( serverButtons[ i ], true )
- Hud_SetVisible( serverButtons[ i ], true )
- SetButtonRuiText( serverButtons[ i ], NSGetServerName( serverIndex ) )
+ Hud_SetVisible( file.serversProtected[ i ], false )
+ Hud_SetVisible( file.serverButtons[ i ], false )
+ Hud_SetText( file.serversName[ i ], "" )
+ Hud_SetText( file.playerCountLabels[ i ], "" )
+ Hud_SetText( file.serversMap[ i ], "" )
+ Hud_SetText( file.serversGamemode[ i ], "" )
+ Hud_SetText( file.serversLatency[ i ], "" )
}
+
+ int j = file.serversArrayFiltered.len() > 15 ? 15 : file.serversArrayFiltered.len()
+
+ for ( int i = 0; i < j; i++ )
+ {
+
+ int buttonIndex = file.scrollOffset + i
+ int serverIndex = file.serversArrayFiltered[ buttonIndex ].serverIndex
+
+ Hud_SetEnabled( file.serverButtons[ i ], true )
+ Hud_SetVisible( file.serverButtons[ i ], true )
+
+ Hud_SetVisible( file.serversProtected[ i ], file.serversArrayFiltered[ buttonIndex ].serverProtected )
+ Hud_SetText( file.serversName[ i ], file.serversArrayFiltered[ buttonIndex ].serverName )
+ Hud_SetText( file.playerCountLabels[ i ], format( "%i/%i", file.serversArrayFiltered[ buttonIndex ].serverPlayers, file.serversArrayFiltered[ buttonIndex ].serverPlayersMax ) )
+ Hud_SetText( file.serversMap[ i ], GetMapDisplayName( file.serversArrayFiltered[ buttonIndex ].serverMap ) )
+ Hud_SetText( file.serversGamemode[ i ], file.serversArrayFiltered[ buttonIndex ].serverGamemode )
}
- catch(ex) {}
+
+
+ if ( NSGetServerCount() == 0 )
+ {
+ Hud_SetEnabled( file.serverButtons[ 0 ], true )
+ Hud_SetVisible( file.serverButtons[ 0 ], true )
+ Hud_SetText( file.serversName[ 0 ], "#NS_SERVERBROWSER_NOSERVERS" )
+ }
+ UpdateListSliderHeight( float( file.serversArrayFiltered.len() ) )
+}
+
+void function OnServerButtonFocused( var button )
+{
+ int scriptID = int (Hud_GetScriptID(button))
+ file.serverButtonFocusedID = scriptID
+ DisplayFocusedServerInfo(scriptID);
+
}
-void function OnServerFocused( var button )
+void function OnServerButtonClicked(var button)
{
+ int scriptID = int (Hud_GetScriptID(button))
+
+ DisplayFocusedServerInfo(scriptID)
+ CheckDoubleClick(scriptID, true)
+}
+
+void function CheckDoubleClick(int scriptID, bool wasClickNav)
+{
+ file.focusedServerIndex = file.serversArrayFiltered[ file.scrollOffset + scriptID ].serverIndex
+ int serverIndex = file.scrollOffset + scriptID
+
+ bool sameServer = false
+ if (file.lastSelectedServer == serverIndex) sameServer = true
+
+
+ file.serverSelectedTimeLast = file.serverSelectedTime
+ file.serverSelectedTime = Time()
+
+ printt(file.serverSelectedTime - file.serverSelectedTimeLast, file.lastSelectedServer, serverIndex)
+
+ file.lastSelectedServer = serverIndex
+
+
+ if (wasClickNav && (file.serverSelectedTime - file.serverSelectedTimeLast < DOUBLE_CLICK_TIME_MS) && sameServer)
+ {
+ OnServerSelected(0)
+ }
+}
+
+void function DisplayFocusedServerInfo( int scriptID)
+{
+ if (scriptID == 999 || scriptID == -1 || scriptID == 16) return
+
if ( NSIsRequestingServerList() || NSGetServerCount() == 0 || file.serverListRequestFailed )
return
var menu = GetMenu( "ServerBrowserMenu" )
- int serverIndex = file.page * BUTTONS_PER_PAGE + int ( Hud_GetScriptID( button ) )
- // text panel
- Hud_SetVisible( Hud_GetChild( menu, "LabelDetails" ), true )
- var textRui = Hud_GetRui( Hud_GetChild( menu, "LabelDetails" ) )
- RuiSetGameTime( textRui, "startTime", -99999.99 ) // make sure it skips the whole animation for showing this
- RuiSetString( textRui, "messageText", FormatServerDescription( serverIndex ) )
+ int serverIndex = file.scrollOffset + scriptID
- // map name/image
- string map = NSGetServerMap( serverIndex )
+
+ Hud_SetVisible( Hud_GetChild( menu, "BtnServerDescription" ), true )
+ Hud_SetVisible( Hud_GetChild( menu, "BtnServerMods" ), true )
+ Hud_SetVisible( Hud_GetChild( menu, "BtnServerJoin" ), true )
+ // text panels
+ Hud_SetVisible( Hud_GetChild( menu, "LabelDescription" ), true )
+ Hud_SetVisible( Hud_GetChild( menu, "LabelMods" ), false )
+ //RuiSetGameTime( textRui, "startTime", -99999.99 ) // make sure it skips the whole animation for showing this
+ Hud_SetText( Hud_GetChild( menu, "LabelDescription" ), NSGetServerDescription( file.serversArrayFiltered[ serverIndex ].serverIndex ) + "\n\nRequired Mods:\n" + FillInServerModsLabel( file.serversArrayFiltered[ serverIndex ].serverIndex ))
+ //Hud_SetText( Hud_GetChild( menu, "LabelMods" ), FillInServerModsLabel( file.serversArrayFiltered[ serverIndex ].serverIndex ) )
+
+ // map name/image/server name
+ string map = file.serversArrayFiltered[ serverIndex ].serverMap
Hud_SetVisible( Hud_GetChild( menu, "NextMapImage" ), true )
+ Hud_SetVisible( Hud_GetChild( menu, "NextMapBack" ), true )
RuiSetImage( Hud_GetRui( Hud_GetChild( menu, "NextMapImage" ) ), "basicImage", GetMapImageForMapName( map ) )
Hud_SetVisible( Hud_GetChild( menu, "NextMapName" ), true )
Hud_SetText( Hud_GetChild( menu, "NextMapName" ), GetMapDisplayName( map ) )
+ Hud_SetVisible( Hud_GetChild( menu, "ServerName" ), true )
+ Hud_SetText( Hud_GetChild( menu, "ServerName" ), NSGetServerName( file.serversArrayFiltered[ serverIndex ].serverIndex ) )
// mode name/image
- string mode = NSGetServerPlaylist( serverIndex )
+ string mode = file.serversArrayFiltered[ serverIndex ].serverGamemode
Hud_SetVisible( Hud_GetChild( menu, "NextModeIcon" ), true )
RuiSetImage( Hud_GetRui( Hud_GetChild( menu, "NextModeIcon" ) ), "basicImage", GetPlaylistThumbnailImage( mode ) )
Hud_SetVisible( Hud_GetChild( menu, "NextGameModeName" ), true )
-
- string displayName = GetGameModeDisplayName( mode )
- if ( displayName.len() != 0 )
- Hud_SetText( Hud_GetChild( menu, "NextGameModeName" ), displayName )
+
+ if ( mode.len() != 0 )
+ Hud_SetText( Hud_GetChild( menu, "NextGameModeName" ), mode )
else
Hud_SetText( Hud_GetChild( menu, "NextGameModeName" ), "#NS_SERVERBROWSER_UNKNOWNMODE" )
}
-string function FormatServerDescription( int server )
+string function FillInServerModsLabel( int server )
{
- string ret = "\n\n\n\n"
-
- ret += NSGetServerName( server ) + "\n"
- ret += format( "%i/%i players\n", NSGetServerPlayerCount( server ), NSGetServerMaxPlayerCount( server ) )
- ret += NSGetServerDescription( server ) + "\n\n"
-
- ret += "Required Mods: \n"
+ string ret
+
for ( int i = 0; i < NSGetServerRequiredModsCount( server ); i++ )
- ret += " " + NSGetServerRequiredModName( server, i ) + " v" + NSGetServerRequiredModVersion( server, i ) + "\n"
-
+ {
+ ret += " "
+ ret += NSGetServerRequiredModName( server, i ) + " v" + NSGetServerRequiredModVersion( server, i ) + "\n"
+ }
return ret
}
+
void function OnServerSelected( var button )
{
if ( NSIsRequestingServerList() || NSGetServerCount() == 0 || file.serverListRequestFailed )
return
- int serverIndex = file.page * BUTTONS_PER_PAGE + int ( Hud_GetScriptID( button ) )
+ int serverIndex = file.focusedServerIndex
+
file.lastSelectedServer = serverIndex
// check mods
- for ( int i = 0; i < NSGetServerRequiredModsCount( serverIndex ); i++ )
- {
+ for ( int i = 0; i < NSGetServerRequiredModsCount( serverIndex ); i++ )
+ {
if ( !NSGetModNames().contains( NSGetServerRequiredModName( serverIndex, i ) ) )
- {
+ {
DialogData dialogData
dialogData.header = "#ERROR"
dialogData.message = "Missing mod \"" + NSGetServerRequiredModName( serverIndex, i ) + "\" v" + NSGetServerRequiredModVersion( serverIndex, i )
dialogData.image = $"ui/menu/common/dialog_error"
-
+
#if PC_PROG
AddDialogButton( dialogData, "#DISMISS" )
-
+
AddDialogFooter( dialogData, "#A_BUTTON_SELECT" )
#endif // PC_PROG
AddDialogFooter( dialogData, "#B_BUTTON_DISMISS_RUI" )
-
+
OpenDialog( dialogData )
-
+
return
}
else
@@ -236,7 +930,7 @@ void function OnServerSelected( var button )
// this uses semver https://semver.org
array<string> serverModVersion = split( NSGetServerRequiredModVersion( serverIndex, i ), "." )
array<string> clientModVersion = split( NSGetModVersionByModName( NSGetServerRequiredModName( serverIndex, i ) ), "." )
-
+
bool semverFail = false
// if server has invalid semver don't bother checking
if ( serverModVersion.len() == 3 )
@@ -248,34 +942,38 @@ void function OnServerSelected( var button )
else if ( clientModVersion[ 0 ] != serverModVersion[ 0 ] )
semverFail = true
}
-
+
if ( semverFail )
{
DialogData dialogData
dialogData.header = "#ERROR"
- dialogData.message = "Server has mod \"" + NSGetServerRequiredModName( serverIndex, i ) + "\" v" + NSGetServerRequiredModVersion( serverIndex, i ) + " while we have v" + NSGetModVersionByModName( NSGetServerRequiredModName( serverIndex, i ) )
+ dialogData.message = "Server has mod \"" + NSGetServerRequiredModName( serverIndex, i ) + "\" v" + NSGetServerRequiredModVersion( serverIndex, i ) + " while we have v" + NSGetModVersionByModName( NSGetServerRequiredModName( serverIndex, i ) )
dialogData.image = $"ui/menu/common/dialog_error"
-
+
#if PC_PROG
AddDialogButton( dialogData, "#DISMISS" )
-
+
AddDialogFooter( dialogData, "#A_BUTTON_SELECT" )
#endif // PC_PROG
AddDialogFooter( dialogData, "#B_BUTTON_DISMISS_RUI" )
-
+
OpenDialog( dialogData )
-
+
return
}
}
}
-
+
if ( NSServerRequiresPassword( serverIndex ) )
+ {
+ OnCloseServerBrowserMenu()
AdvanceMenu( GetMenu( "ConnectWithPasswordMenu" ) )
+ }
else
thread ThreadedAuthAndConnectToServer()
}
+
void function ThreadedAuthAndConnectToServer( string password = "" )
{
if ( NSIsAuthenticatingWithServer() )
@@ -283,18 +981,32 @@ void function ThreadedAuthAndConnectToServer( string password = "" )
print( "trying to authenticate with server " + NSGetServerName( file.lastSelectedServer ) + " with password " + password )
NSTryAuthWithServer( file.lastSelectedServer, password )
-
- while ( NSIsAuthenticatingWithServer() )
+
+ ToggleConnectingHUD( true )
+
+ while ( NSIsAuthenticatingWithServer() && !file.cancelConnection)
+ {
WaitFrame()
-
+ }
+
+ ToggleConnectingHUD( false )
+
+ if (file.cancelConnection)
+ {
+ file.cancelConnection = false
+ return
+ }
+
+ file.cancelConnection = false
+
if ( NSWasAuthSuccessful() )
{
bool modsChanged
-
+
array<string> requiredMods
for ( int i = 0; i < NSGetServerRequiredModsCount( file.lastSelectedServer ); i++ )
requiredMods.append( NSGetServerRequiredModName( file.lastSelectedServer, i ) )
-
+
// unload mods we don't need, load necessary ones and reload mods before connecting
foreach ( string mod in NSGetModNames() )
{
@@ -304,27 +1016,159 @@ void function ThreadedAuthAndConnectToServer( string password = "" )
NSSetModEnabled( mod, requiredMods.contains( mod ) )
}
}
-
+
// only actually reload if we need to since the uiscript reset on reload lags hard
if ( modsChanged )
ReloadMods()
-
NSConnectToAuthedServer()
}
else
- {
+ {
DialogData dialogData
dialogData.header = "#ERROR"
dialogData.message = "Authentication Failed"
dialogData.image = $"ui/menu/common/dialog_error"
-
+
#if PC_PROG
AddDialogButton( dialogData, "#DISMISS" )
-
+
AddDialogFooter( dialogData, "#A_BUTTON_SELECT" )
#endif // PC_PROG
AddDialogFooter( dialogData, "#B_BUTTON_DISMISS_RUI" )
OpenDialog( dialogData )
}
-} \ No newline at end of file
+}
+
+//////////////////////////////////////
+// Shadow realm
+//////////////////////////////////////
+void function SortServerListByName( var button )
+{
+ filterDirection.sortingBy = 1
+
+ int n = file.serversArrayFiltered.len() - 1
+
+ serverStruct tempServer
+
+ for ( int i = 0; i < n; i++)
+ {
+ for ( int j = 0; j < n - 1; j++)
+ {
+ if ( file.serversArrayFiltered[ j ].serverName < file.serversArrayFiltered[ j + 1 ].serverName && filterDirection.serverName || file.serversArrayFiltered[ j ].serverName > file.serversArrayFiltered[ j + 1 ].serverName && !filterDirection.serverName)
+ {
+ tempServer = file.serversArrayFiltered[ j ]
+ file.serversArrayFiltered[ j ] = file.serversArrayFiltered[ j + 1 ]
+ file.serversArrayFiltered[ j + 1 ] = tempServer
+ }
+ }
+ }
+
+ filterDirection.serverName = !filterDirection.serverName
+
+ UpdateShownPage()
+}
+
+void function SortServerListByPlayers( var button )
+{
+ filterDirection.sortingBy = 2
+
+ int n = file.serversArrayFiltered.len() - 1
+
+ serverStruct tempServer
+
+ for ( int i = 0; i < n; i++)
+ {
+ for ( int j = 0; j < n - 1; j++)
+ {
+ if ( file.serversArrayFiltered[ j ].serverPlayers < file.serversArrayFiltered[ j + 1 ].serverPlayers && filterDirection.serverPlayers || file.serversArrayFiltered[ j ].serverPlayers > file.serversArrayFiltered[ j + 1 ].serverPlayers && !filterDirection.serverPlayers)
+ {
+ tempServer = file.serversArrayFiltered[ j ]
+ file.serversArrayFiltered[ j ] = file.serversArrayFiltered[ j + 1 ]
+ file.serversArrayFiltered[ j + 1 ] = tempServer
+ }
+ }
+ }
+
+ filterDirection.serverPlayers = !filterDirection.serverPlayers
+
+ UpdateShownPage()
+}
+
+void function SortServerListByMap( var button )
+{
+ filterDirection.sortingBy = 3
+
+ int n = file.serversArrayFiltered.len() - 1
+
+ serverStruct tempServer
+
+ for ( int i = 0; i < n; i++)
+ {
+ for ( int j = 0; j < n - 1; j++)
+ {
+ if ( Localize(file.serversArrayFiltered[ j ].serverMap) < Localize(file.serversArrayFiltered[ j + 1 ].serverMap) && filterDirection.serverMap || Localize(file.serversArrayFiltered[ j ].serverMap) > Localize(file.serversArrayFiltered[ j + 1 ].serverMap) && !filterDirection.serverMap)
+ {
+ tempServer = file.serversArrayFiltered[ j ]
+ file.serversArrayFiltered[ j ] = file.serversArrayFiltered[ j + 1 ]
+ file.serversArrayFiltered[ j + 1 ] = tempServer
+ }
+ }
+ }
+
+ filterDirection.serverMap = !filterDirection.serverMap
+
+ UpdateShownPage()
+}
+
+void function SortServerListByGamemode( var button )
+{
+ filterDirection.sortingBy = 5
+
+ int n = file.serversArrayFiltered.len() - 1
+
+ serverStruct tempServer
+
+ for ( int i = 0; i < n; i++)
+ {
+ for ( int j = 0; j < n - 1; j++)
+ {
+ if ( Localize(file.serversArrayFiltered[ j ].serverGamemode) < Localize(file.serversArrayFiltered[ j + 1 ].serverGamemode) && filterDirection.serverGamemode || Localize(file.serversArrayFiltered[ j ].serverGamemode) > Localize(file.serversArrayFiltered[ j + 1 ].serverGamemode) && !filterDirection.serverGamemode)
+ {
+ tempServer = file.serversArrayFiltered[ j ]
+ file.serversArrayFiltered[ j ] = file.serversArrayFiltered[ j + 1 ]
+ file.serversArrayFiltered[ j + 1 ] = tempServer
+ }
+ }
+ }
+
+ filterDirection.serverGamemode = !filterDirection.serverGamemode
+
+ UpdateShownPage()
+}
+
+void function SortServerListByLatency( var button )
+{
+ filterDirection.sortingBy = 5
+
+ int n = file.serversArrayFiltered.len() - 1
+
+ serverStruct tempServer
+
+ for ( int i = 0; i < n; i++)
+ {
+ for ( int j = 0; j < n - 1; j++)
+ {
+ if ( file.serversArrayFiltered[ j ].serverLatency < file.serversArrayFiltered[ j + 1 ].serverLatency && filterDirection.serverLatency || file.serversArrayFiltered[ j ].serverLatency > file.serversArrayFiltered[ j + 1 ].serverLatency && !filterDirection.serverLatency)
+ {
+ tempServer = file.serversArrayFiltered[ j ]
+ file.serversArrayFiltered[ j ] = file.serversArrayFiltered[ j + 1 ]
+ file.serversArrayFiltered[ j + 1 ] = tempServer
+ }
+ }
+ }
+
+ filterDirection.serverLatency = !filterDirection.serverLatency
+
+ UpdateShownPage()
+}