diff options
Diffstat (limited to 'Northstar.Client')
-rw-r--r-- | Northstar.Client/mod.json | 23 | ||||
-rw-r--r-- | Northstar.Client/mod/resource/northstar_client_localisation_english.txt | bin | 18414 -> 20042 bytes | |||
-rw-r--r-- | Northstar.Client/mod/resource/ui/menus/server_browser.menu | 2319 | ||||
-rw-r--r-- | Northstar.Client/mod/scripts/vscripts/sh_menu_models.gnut | 6 | ||||
-rw-r--r-- | Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut | 1124 |
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 Binary files differindex a0a8026e..b37afef3 100644 --- a/Northstar.Client/mod/resource/northstar_client_localisation_english.txt +++ b/Northstar.Client/mod/resource/northstar_client_localisation_english.txt 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() +} |