aboutsummaryrefslogtreecommitdiff
path: root/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
diff options
context:
space:
mode:
authorBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-08-31 23:14:58 +0100
committerBobTheBob <32057864+BobTheBob9@users.noreply.github.com>2021-08-31 23:14:58 +0100
commit9a96d0bff56f1969c68bb52a2f33296095bdc67d (patch)
tree4175928e488632705692e3cccafa1a38dd854615 /Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
parent27bd240871b7c0f2f49fef137718b2e3c208e3b4 (diff)
downloadNorthstarMods-9a96d0bff56f1969c68bb52a2f33296095bdc67d.tar.gz
NorthstarMods-9a96d0bff56f1969c68bb52a2f33296095bdc67d.zip
move to new mod format
Diffstat (limited to 'Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut')
-rw-r--r--Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut198
1 files changed, 198 insertions, 0 deletions
diff --git a/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
new file mode 100644
index 000000000..bbeb0d0b9
--- /dev/null
+++ b/Northstar.Client/mod/scripts/vscripts/ui/menu_ns_serverbrowser.nut
@@ -0,0 +1,198 @@
+global function AddNorthstarServerBrowserMenu
+global function ThreadedAuthAndConnectToServer
+
+const int BUTTONS_PER_PAGE = 15
+
+struct {
+ int page = 0
+ int lastSelectedServer = 0
+} file
+
+void function AddNorthstarServerBrowserMenu()
+{
+ AddMenu( "ServerBrowserMenu", $"resource/ui/menus/server_browser.menu", InitServerBrowserMenu, "#MENU_SERVER_BROWSER" )
+}
+
+void function InitServerBrowserMenu()
+{
+ AddMenuEventHandler( GetMenu( "ServerBrowserMenu" ), eUIEvent.MENU_OPEN, OnServerBrowserMenuOpened )
+ AddMenuFooterOption( GetMenu( "ServerBrowserMenu" ), BUTTON_B, "#B_BUTTON_BACK", "#BACK" )
+ AddMenuFooterOption( GetMenu( "ServerBrowserMenu" ), BUTTON_Y, "#Y_REFRESH_SERVERS", "#REFRESH_SERVERS", RefreshServers )
+
+ foreach ( var button in GetElementsByClassname( GetMenu( "ServerBrowserMenu" ), "ServerButton" ) )
+ {
+ AddButtonEventHandler( button, UIE_GET_FOCUS, OnServerFocused )
+ AddButtonEventHandler( button, UIE_CLICK, OnServerSelected )
+ }
+}
+
+void function OnServerBrowserMenuOpened()
+{
+ Hud_SetText( Hud_GetChild( GetMenu( "ServerBrowserMenu" ), "Title" ), "#MENU_TITLE_SERVER_BROWSER" )
+ UI_SetPresentationType( ePresentationType.KNOWLEDGEBASE_MAIN )
+
+ file.page = 0
+ // dont rerequest if we came from the connect menu
+ if ( !NSIsRequestingServerList() && uiGlobal.lastMenuNavDirection != MENU_NAV_BACK )
+ {
+ NSClearRecievedServerList()
+ NSRequestServerList()
+ }
+
+ thread WaitForServerListRequest()
+}
+
+void function RefreshServers( var button )
+{
+ if ( NSIsRequestingServerList() )
+ return
+
+ NSClearRecievedServerList()
+ NSRequestServerList()
+
+ thread WaitForServerListRequest()
+}
+
+void function WaitForServerListRequest()
+{
+ var menu = GetMenu( "ServerBrowserMenu" )
+ array<var> serverButtons = GetElementsByClassname( menu, "ServerButton" )
+ foreach ( var button in serverButtons )
+ {
+ 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" )
+
+ // wait for request to complete
+ while ( NSIsRequestingServerList() )
+ WaitFrame()
+
+ if ( !NSMasterServerConnectionSuccessful() )
+ SetButtonRuiText( serverButtons[ 0 ], "#NS_SERVERBROWSER_CONNECTIONFAILED" )
+ else
+ UpdateShownPage()
+}
+
+void function UpdateShownPage()
+{
+ var menu = GetMenu( "ServerBrowserMenu" )
+
+ // hide old ui elements
+ array<var> serverButtons = GetElementsByClassname( menu, "ServerButton" )
+ foreach ( var button in serverButtons )
+ {
+ 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 )
+
+ for ( int i = 0; i < NSGetServerCount() && i < serverButtons.len(); i++ )
+ {
+ int serverIndex = file.page * BUTTONS_PER_PAGE + i
+
+ Hud_SetEnabled( serverButtons[ i ], true )
+ Hud_SetVisible( serverButtons[ i ], true )
+ SetButtonRuiText( serverButtons[ i ], NSGetServerName( serverIndex ) )
+ }
+
+ if ( NSGetServerCount() == 0 )
+ {
+ Hud_SetEnabled( serverButtons[ 0 ], true )
+ Hud_SetVisible( serverButtons[ 0 ], true )
+ SetButtonRuiText( serverButtons[ 0 ], "#NS_SERVERBROWSER_NOSERVERS" )
+ }
+}
+
+void function OnServerFocused( var button )
+{
+ if ( NSIsRequestingServerList() || !NSMasterServerConnectionSuccessful() || NSGetServerCount() == 0 )
+ 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 ) )
+
+ // map name/image
+ string map = NSGetServerMap( serverIndex )
+ Hud_SetVisible( Hud_GetChild( menu, "NextMapImage" ), 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 ) )
+
+ // mode name/image
+ string mode = NSGetServerPlaylist( serverIndex )
+ 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 )
+ else
+ Hud_SetText( Hud_GetChild( menu, "NextGameModeName" ), "#NS_SERVERBROWSER_UNKNOWNMODE" )
+}
+
+string function FormatServerDescription( 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"
+
+ return ret
+}
+
+void function OnServerSelected( var button )
+{
+ if ( NSIsRequestingServerList() || !NSMasterServerConnectionSuccessful() )
+ return
+
+ var menu = GetMenu( "ServerBrowserMenu" )
+ int serverIndex = file.page * BUTTONS_PER_PAGE + int ( Hud_GetScriptID( button ) )
+
+ file.lastSelectedServer = serverIndex
+
+ if ( NSServerRequiresPassword( serverIndex ) )
+ AdvanceMenu( GetMenu( "ConnectWithPasswordMenu" ) )
+ else
+ thread ThreadedAuthAndConnectToServer()
+}
+
+void function ThreadedAuthAndConnectToServer( string password = "" )
+{
+ if ( NSIsAuthenticatingWithServer() )
+ return
+
+ print( "trying to authenticate with server " + NSGetServerName( file.lastSelectedServer ) + " with password " + password )
+ NSTryAuthWithServer( file.lastSelectedServer, password )
+
+ while ( NSIsAuthenticatingWithServer() )
+ WaitFrame()
+
+ if ( NSWasAuthSuccessful() )
+ NSConnectToAuthedServer()
+} \ No newline at end of file