global function InitTeamTitanSelectMenu global function TeamTitanSelectMenuIsOpen global function ServerCallback_OpenTeamTitanMenu global function ServerCallback_CloseTeamTitanMenu global function ServerCallback_UpdateTeamTitanMenuTime global function ServerCallback_RegisterTeamTitanMenuButtons global function TTSUpdateDoubleXP global function TTSUpdateDoubleXPStatus global function TTSMenuModeFD global function TTSMenuModeDefault global function TTSMenu_UpdateGameMode global function EnableDoubleXP const float SELECT_DELAY = 0.2 enum eTTSMenuMode { DEFAULT, FD } struct { var menu bool allowManualClose = false bool isReady = false bool menuOpened = false bool allowSelection = false array titanButtons array titanUpgradeButtons var editButton var readyPanel var cover var doubleXPButton var chatBox bool buttonsRegistered = false int menuMode float nextAllowSoundTime = 0.0 } file void function InitTeamTitanSelectMenu() { file.menu = GetMenu( "TeamTitanSelectMenu" ) AddMenuEventHandler( file.menu, eUIEvent.MENU_NAVIGATE_BACK, OnTeamTitanSelectMenu_NavigateBack ) AddMenuEventHandler( file.menu, eUIEvent.MENU_OPEN, OnTeamTitanSelectMenu_Open ) AddMenuEventHandler( file.menu, eUIEvent.MENU_SHOW, OnTeamTitanSelectMenu_Open ) AddMenuEventHandler( file.menu, eUIEvent.MENU_HIDE, OnTeamTitanSelectMenu_Hide ) AddMenuEventHandler( file.menu, eUIEvent.MENU_CLOSE, OnTeamTitanSelectMenu_Close ) RegisterSignal( "TTSMenuClosed" ) RegisterSignal( "Delayed_RequestTitanLoadout" ) float margin = 10.0 float totalWidth = 0.0 for ( int i=0; i 5 ) file.allowSelection = true thread UpdateSubText( Time() + endTime ) } void function ServerCallback_OpenTeamTitanMenu( float endTime ) { if ( TeamTitanSelectMenuIsOpen() ) return if ( uiGlobal.activeMenu != null ) CloseAllMenus() RunClientScript( "PlayTTSMusic" ) file.allowManualClose = false file.allowSelection = true file.isReady = true // set to true so selection mode kicks in thread MenuFadeIn() BeginSelectionMode() AdvanceMenu( file.menu ) thread UpdateSubText( Time() + endTime ) } void function MenuFadeIn() { Hud_SetEnabled( file.cover, true ) Hud_SetAlpha( file.cover, 255 ) Hud_Show( file.cover ) wait 1.0 Hud_FadeOverTime( file.cover, 0, 1.0 ) wait 1.0 Hud_Hide( file.cover ) Hud_SetEnabled( file.cover, false ) } void function UpdateSubText( float endTime ) { EndSignal( uiGlobal.signalDummy, "TTSMenuClosed" ) var subText = Hud_GetChild( file.menu, "MenuSubTitle" ) var rui = Hud_GetRui( file.readyPanel ) RuiSetBool( rui, "isReady", true ) thread Countdown( endTime ) while ( Time() < endTime ) { int countdownTime = int( ceil( endTime - Time() ) ) Hud_SetText( subText, Localize( "#MENU_STARTS_IN", countdownTime ) ) RuiSetInt( rui, "timer", countdownTime ) WaitFrame() } Hud_SetText( subText, Localize( "#MENU_STARTS_IN", 0 ) ) RuiSetInt( rui, "timer", 0 ) } void function Countdown( float endTime ) { EndSignal( uiGlobal.signalDummy, "TTSMenuClosed" ) float countdownTime = 5.0 float startCountdownTime = endTime - countdownTime if ( Time() > startCountdownTime ) return wait startCountdownTime - Time() while ( Time() < endTime ) { EmitUISound( "UI_InGame_MarkedForDeath_CountdownToMarked" ) wait 1.0 } file.allowSelection = false BeginEditMode(null) Hud_SetAlpha( file.cover, 0 ) Hud_SetEnabled( file.cover, true ) Hud_Show( file.cover ) Hud_FadeOverTime( file.cover, 255, 1.0 ) float soundTime = DoPrematchWarpSound() ? PICK_LOADOUT_SOUND_TIME : 1.5 wait soundTime thread ServerCallback_CloseTeamTitanMenu() } void function ServerCallback_CloseTeamTitanMenu() { if ( TeamTitanSelectMenuIsOpen() ) { file.allowManualClose = true UI_SetPresentationType( ePresentationType.INACTIVE ) CloseAllMenus() OnTeamTitanSelectMenu_Close() } } void function OnTeamTitanSelectMenu_NavigateBack() { if ( file.allowManualClose ) { CloseActiveMenu() return } if ( file.isReady && file.allowSelection ) { BeginSelectionMode() return } LeaveDialog() return } void function TTSMenu_UpdateGameMode( string modeName ) { var title = Hud_GetChild( file.menu, "MenuTitle" ) Hud_SetText( title, Localize( modeName ) ) } void function ServerCallback_RegisterTeamTitanMenuButtons() { RegisterButtonCallbacks() } void function RegisterButtonCallbacks() { if ( file.buttonsRegistered ) return file.buttonsRegistered = true RegisterButtonPressedCallback( BUTTON_BACK, EnableDoubleXP ) RegisterButtonPressedCallback( KEY_RSHIFT, EnableDoubleXP ) } void function OnTeamTitanSelectMenu_Open() { file.menuOpened = true var dataTable = GetDataTable( $"datatable/titan_properties.rpak" ) int loadoutIconCol = GetDataTableColumnByName( dataTable, "loadoutIconFD" ) int titanCol = GetDataTableColumnByName( dataTable, "titanRef" ) entity player = GetUIPlayer() var nextMapImage = Hud_GetChild( file.menu, "NextMapImage" ) string mapName = GetActiveLevel() asset mapImage = GetMapImageForMapName( mapName ) RefreshCreditsAvailable() RuiSetImage( Hud_GetRui( nextMapImage ), "basicImage", mapImage ) Hud_Show( nextMapImage ) Hud_SetText( Hud_GetChild( file.menu, "NextMapName" ), GetMapDisplayName( mapName ) ) Hud_Show( Hud_GetChild( file.menu, "NextMapName" ) ) var buttonToFocus for ( int i=0; i titanUpgrades = FD_GetUpgradesForTitanClass( loadout.titanClass ) if ( file.menuMode == eTTSMenuMode.FD ) { RuiSetString( rui, "titanLevelString", Localize( "#FD_TITAN_LEVEL", titanLevel ) ) RuiSetString( rui, "titanRole", Localize( "#FD_ROLE", Localize(role) ) ) foreach ( index, item in titanUpgrades ) { var button = file.titanUpgradeButtons[index] var upgradeRui = Hud_GetRui( button ) bool locked = IsSubItemLocked( GetUIPlayer(), item.ref, item.parentRef ) if ( locked ) RuiSetImage( upgradeRui, "buttonImage", expect asset( item.i.lockedImage ) ) else RuiSetImage( upgradeRui, "buttonImage", item.image ) Hud_SetLocked( button, locked ) } } if ( !Hud_IsLocked( button ) ) { uiGlobal.titanSpawnLoadoutIndex = scriptID thread Delayed_RequestTitanLoadout( uiGlobal.titanSpawnLoadoutIndex ) SetLabelRuiText( Hud_GetChild( file.menu, "TitanSelectTitle" ), "#MENU_TITAN_SELECT" ) } else { RuiSetString( rui, "titanLevelString", GetItemUnlockReqText( loadout.titanClass ) ) } SetLabelRuiText( Hud_GetChild( file.menu, "TitanSelectTitle" ), GetTitanAvailableText( player, loadout.titanClass) ) RunMenuClientFunction( "UpdateTitanModel", scriptID ) RunClientScript( "TTS_UpdateLocalPlayerTitan", loadout.setFile, loadout.primary, loadout.passive1, loadout.passive2 ) } string function GetTitanAvailableText( entity player, string titanClass ) { int titanAvailableState = GetTitanLoadAvailableState( player, titanClass ) if ( titanAvailableState == TITAN_CLASS_LOCK_STATE_AVAILABLE ) return "#MENU_TITAN_SELECT_HINT" if ( titanAvailableState == TITAN_CLASS_LOCK_STATE_LEVELREQUIRED || titanAvailableState == TITAN_CLASS_LOCK_STATE_LEVELRECOMMENDED ) { int difficultyLevel = GetCurrentPlaylistVarInt( "fd_difficulty", 0 ) int requiredTitanLevel = 0 switch ( difficultyLevel ) { case eFDDifficultyLevel.EASY: if ( GetItemUnlockType( "fd_easy" ) == eUnlockType.STAT ) requiredTitanLevel = int( GetStatUnlockStatVal( "fd_easy" ) ) break case eFDDifficultyLevel.NORMAL: if ( GetItemUnlockType( "fd_normal" ) == eUnlockType.STAT ) requiredTitanLevel = int( GetStatUnlockStatVal( "fd_normal" ) ) break case eFDDifficultyLevel.HARD: if ( GetItemUnlockType( "fd_hard" ) == eUnlockType.STAT ) requiredTitanLevel = int( GetStatUnlockStatVal( "fd_hard" ) ) break case eFDDifficultyLevel.MASTER: if ( GetItemUnlockType( "fd_master" ) == eUnlockType.STAT ) requiredTitanLevel = int( GetStatUnlockStatVal( "fd_master" ) ) break case eFDDifficultyLevel.INSANE: if ( GetItemUnlockType( "fd_insane" ) == eUnlockType.STAT ) requiredTitanLevel = int( GetStatUnlockStatVal( "fd_insane" ) ) break } if ( titanAvailableState == TITAN_CLASS_LOCK_STATE_LEVELREQUIRED ) return Localize( "#MENU_TITAN_SELECT_LEVELREQUIRED", requiredTitanLevel ) else return Localize( "#MENU_TITAN_SELECT_LEVELRECOMMENDED", requiredTitanLevel ) } if ( titanAvailableState == TITAN_CLASS_LOCK_STATE_INUSE ) return "#MENU_TITAN_SELECT_INUSE" if ( titanAvailableState == TITAN_CLASS_LOCK_STATE_LOCKED ) return "#MENU_TITAN_SELECT_LOCKED" return "#MENU_TITAN_SELECT_HINT" } void function Delayed_RequestTitanLoadout( int index ) { Signal( uiGlobal.signalDummy, "Delayed_RequestTitanLoadout" ) EndSignal( uiGlobal.signalDummy, "Delayed_RequestTitanLoadout" ) wait 0.5 ClientCommand( "RequestTitanLoadout " + uiGlobal.titanSpawnLoadoutIndex ) } void function TitanUpgradeButton_OnFocused( var button ) { if ( file.menuMode == eTTSMenuMode.DEFAULT ) return int scriptID = int( Hud_GetScriptID( button ) ) TitanLoadoutDef loadout = GetCachedTitanLoadout( uiGlobal.titanSpawnLoadoutIndex ) array titanUpgrades = FD_GetUpgradesForTitanClass( loadout.titanClass ) ItemDisplayData item = titanUpgrades[ scriptID ] var panel = Hud_GetChild( file.menu, "UpgradeName" ) Hud_Show( panel ) var rui = Hud_GetRui( panel ) RuiSetString( rui, "upgradeName", item.name ) RuiSetString( rui, "upgradeDesc", item.desc ) RuiSetBool( rui, "isLocked", IsSubItemLocked( GetUIPlayer(), item.ref, item.parentRef ) ) } void function TitanUpgradeButton_OnLoseFocus( var button ) { Hud_Hide( Hud_GetChild( file.menu, "UpgradeName" ) ) } void function BeginEditMode( var button ) { if ( file.isReady ) return file.isReady = true EmitUISound( "UI_InGame_FD_TitanSelected" ) SetLabelRuiText( Hud_GetChild( file.menu, "TitanSelectTitle" ), "#MENU_TITAN_SELECTED" ) Hud_Hide( Hud_GetChild( file.menu, "TitanSelectTitle" ) ) Hud_Show( file.readyPanel ) var rui = Hud_GetRui( file.readyPanel ) RuiSetBool( rui, "isReady", true ) foreach ( b in file.titanButtons ) { Hud_Hide( b ) } //Hud_Show( file.editButton ) //Hud_SetFocused( file.editButton ) Hud_SetFocused( file.titanUpgradeButtons[0] ) TitanLoadoutDef loadout = GetCachedTitanLoadout( uiGlobal.titanSpawnLoadoutIndex ) string primeTitanString = "" if ( loadout.isPrime == "titan_is_prime" ) primeTitanString = "_prime" string modifiedAlias = "diag_gs_titan" + loadout.titanClass + primeTitanString + "_embark" EmitUISound( modifiedAlias ) if ( uiGlobal.activeMenu == file.menu ) UI_SetPresentationType( ePresentationType.TITAN_CENTER_SELECTED ) Signal( uiGlobal.signalDummy, "Delayed_RequestTitanLoadout" ) ClientCommand( "RequestTitanLoadout " + uiGlobal.titanSpawnLoadoutIndex ) RunMenuClientFunction( "UpdateTitanModel", uiGlobal.titanSpawnLoadoutIndex ) var subText = Hud_GetChild( file.menu, "MenuSubTitle" ) // Hud_Hide( subText ) } void function BeginSelectionMode() { if ( !file.isReady ) return file.isReady = false //Hud_Hide( file.editButton ) SetLabelRuiText( Hud_GetChild( file.menu, "TitanSelectTitle" ), "#MENU_TITAN_SELECT_HINT" ) Hud_Show( Hud_GetChild( file.menu, "TitanSelectTitle" ) ) Hud_Hide( file.readyPanel ) var rui = Hud_GetRui( file.readyPanel ) RuiSetBool( rui, "isReady", false ) Hud_SetFocused( FindValidTitanButton() ) for ( int i=0; i