Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#include "BasePanel.h"
#include "LoadGameDialog.h"
#include "winlite.h"
#include "vgui/ISurface.h"
#include "EngineInterface.h"
#include "GameUI_Interface.h"
#include "ixboxsystem.h"
#include "filesystem.h"
#include "SaveGameBrowserDialog.h"
using namespace vgui;
// memdbgon must be the last include file in a .cpp file!!!
#include <tier0/memdbgon.h>
CLoadGameDialogXbox::CLoadGameDialogXbox( vgui::Panel *parent ) : BaseClass( parent ) { m_bFilterAutosaves = false; }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLoadGameDialogXbox::ApplySchemeSettings( vgui::IScheme *pScheme ) { BaseClass::ApplySchemeSettings( pScheme );
vgui::Label *pTitle = (Label *) FindChildByName( "TitleLabel" ); if ( pTitle ) { pTitle->SetText( "#GameUI_LoadGame" ); } }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLoadGameDialogXbox::PerformSelectedAction( void ) { BaseClass::PerformSelectedAction(); if ( !GetNumPanels() ) return;
SetControlDisabled( true );
// Warn the player if they're already in a map
if ( !GameUI().HasSavedThisMenuSession() && GameUI().IsInLevel() && engine->GetMaxClients() == 1 ) { BasePanel()->ShowMessageDialog( MD_SAVE_BEFORE_LOAD, this ); } else { // Otherwise just do it
OnCommand( "LoadGame" ); } }
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CLoadGameDialogXbox::PerformDeletion( void ) { // Cannot delete autosaves!
CGameSavePanel *pPanel = GetActivePanel(); if ( pPanel == NULL || ( pPanel && pPanel->IsAutoSaveType() ) ) return;
BaseClass::PerformDeletion();
SetControlDisabled( true );
vgui::surface()->PlaySound( "UI/buttonclickrelease.wav" ); BasePanel()->ShowMessageDialog( MD_DELETE_SAVE_CONFIRM, this ); }
//-----------------------------------------------------------------------------
// Purpose:
// Input : bNewSaveSelected -
//-----------------------------------------------------------------------------
void CLoadGameDialogXbox::UpdateFooterOptions( void ) { CFooterPanel *pFooter = GetFooterPanel();
// Show available buttons
pFooter->ClearButtons();
// Make sure we have panels to show
if ( HasActivePanels() ) { pFooter->AddNewButtonLabel( "#GameUI_Load", "#GameUI_Icons_A_BUTTON" ); // Don't allow deletions of autosaves!
CGameSavePanel *pPanel = GetActivePanel(); if ( pPanel && pPanel->IsAutoSaveType() == false ) { pFooter->AddNewButtonLabel( "#GameUI_Delete", "#GameUI_Icons_X_BUTTON" ); } }
// Always allow storage devices changes and cancelling
pFooter->AddNewButtonLabel( "#GameUI_Close", "#GameUI_Icons_B_BUTTON" ); pFooter->AddNewButtonLabel( "#GameUI_Console_StorageChange", "#GameUI_Icons_Y_BUTTON" ); }
//-----------------------------------------------------------------------------
// Purpose:
// Input : *command -
//-----------------------------------------------------------------------------
void CLoadGameDialogXbox::OnCommand( const char *command ) { m_KeyRepeat.Reset();
if ( !Q_stricmp( command, "LoadGame" ) ) { // Must have an active panel to perform this action
if ( GetNumPanels() == 0 ) { SetControlDisabled( false ); return; }
const SaveGameDescription_t *pSave = GetActivePanelSaveDescription();
// Load the saved game
char szCmd[ 256 ]; Q_snprintf( szCmd, sizeof( szCmd ), "xload %s", pSave->szShortName ); engine->ClientCmd_Unrestricted( szCmd );
// Ignore all other input while we're open
OnClose(); } else if ( !Q_stricmp( command, "DeleteGame" ) ) { // Must have an active panel to perform this action
if ( GetNumPanels() == 0 ) { SetControlDisabled( false ); return; }
// Delete the game they've selected
const SaveGameDescription_t *pSave = GetActivePanelSaveDescription(); DeleteSaveGame( pSave ); RemoveActivePanel(); } else if ( !Q_stricmp( command, "RefreshSaveGames" ) ) { // FIXME: At this point the rug has been pulled out from undereath us!
RefreshSaveGames(); } else if ( !Q_stricmp( command, "LoadGameCancelled" ) ) { SetControlDisabled( false ); } else if ( !Q_stricmp( command, "ReleaseModalWindow" ) ) { vgui::surface()->RestrictPaintToSinglePanel( NULL ); } else if ( !Q_stricmp( command, "DeleteGameCancelled" ) ) { SetControlDisabled( false ); } else { BaseClass::OnCommand(command); } }
//-----------------------------------------------------------------------------
// Purpose: deletes an existing save game
//-----------------------------------------------------------------------------
void CLoadGameDialogXbox::DeleteSaveGame( const SaveGameDescription_t *pSaveDesc ) { if ( pSaveDesc == NULL ) { SetControlDisabled( false ); return; }
// If we're deleting our more recent save game, we need to make sure we setup the engine to properly load the last most recent
if ( Q_stristr( engine->GetMostRecentSaveGame(), pSaveDesc->szShortName ) ) { // We must have at least two active save games that we know about
if ( GetNumPanels() > 1 ) { // The panels are sorted by how recent they are, so the first element is the most recent
const SaveGameDescription_t *pDesc = GetPanelSaveDecription( 0 ); if ( pDesc == pSaveDesc ) { // If we're deleting our most recent, we need to pick the next most recent
pDesc = GetPanelSaveDecription( 1 ); }
// Remember this filename for the next time we need to reload
if ( pDesc ) { engine->SetMostRecentSaveGame( pDesc->szShortName ); } } }
// Delete the save game file
g_pFullFileSystem->RemoveFile( pSaveDesc->szFileName, "MOD" );
vgui::surface()->PlaySound( "UI/buttonclick.wav" );
// Return control
SetControlDisabled( false ); }
|