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.
156 lines
4.6 KiB
156 lines
4.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#include "ModWizard_Intro.h" |
|
#include <vgui_controls/WizardPanel.h> |
|
#include <vgui/ILocalize.h> |
|
#include "ModWizard_GetModInfo.h" |
|
#include "filesystem_tools.h" |
|
#include "SourceAppInfo.h" |
|
#include "steam/steam_api.h" |
|
|
|
using namespace vgui; |
|
|
|
extern CSteamAPIContext *steamapicontext; |
|
|
|
extern char g_engineDir[50]; |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Determines whether the specified game is subscribed to |
|
// Output : Returns true on success, false on failure. |
|
//----------------------------------------------------------------------------- |
|
bool IsGameSubscribed( int nSteamAppId ) |
|
{ |
|
bool bIsSubscribed = false; |
|
|
|
if ( g_pFullFileSystem != NULL && g_pFullFileSystem->IsSteam() && steamapicontext->SteamApps() ) |
|
{ |
|
// See if specified app is installed |
|
bIsSubscribed = steamapicontext->SteamApps()->BIsSubscribedApp( nSteamAppId ); |
|
} |
|
|
|
return bIsSubscribed; |
|
} |
|
|
|
|
|
CModWizardSubPanel_Intro::CModWizardSubPanel_Intro( Panel *parent, const char *panelName ) |
|
: BaseClass( parent, panelName ) |
|
{ |
|
m_pModHL2Button = new RadioButton( this, "ModHL2Button", "" ); |
|
m_pModHL2MPButton = new RadioButton( this, "ModHL2MPButton", "" ); |
|
m_pModFromScratchButton = new RadioButton( this, "ModFromScratchButton", "" ); |
|
m_pSourceCodeOnlyButton = new RadioButton( this, "ModSourceCodeOnlyButton", "" ); |
|
|
|
LoadControlSettings( "ModWizardSubPanel_Intro.res"); |
|
|
|
// We presently don't support SDK scratch configuration using the "orangebox" codebase |
|
if ( !V_strcmp( g_engineDir, "orangebox" ) ) |
|
{ |
|
m_pModFromScratchButton->SetVisible( false ); |
|
} |
|
|
|
// |
|
// Enable and select the appropriate mod types |
|
// |
|
if ( !V_strcmp( g_engineDir, "orangebox" ) || !V_strcmp( g_engineDir, "source2007" ) ) |
|
m_pModHL2Button->SetEnabled( IsGameSubscribed( GetAppSteamAppId( k_App_HL2_EP2 ) ) ); |
|
else |
|
{ |
|
// do it without nesting. |
|
if ( ( IsGameSubscribed( GetAppSteamAppId( k_App_HL2 ) ) || IsGameSubscribed( GetAppSteamAppId( k_App_HL2_EP1 ) ) ) ) |
|
m_pModHL2Button->SetEnabled( true ); |
|
else |
|
m_pModHL2Button->SetEnabled( false ); |
|
} |
|
|
|
m_pModHL2MPButton->SetEnabled( IsGameSubscribed( GetAppSteamAppId( k_App_HL2MP ) ) ); |
|
|
|
// De-select all |
|
m_pModHL2Button->SetSelected( false ); |
|
m_pModHL2MPButton->SetSelected( false ); |
|
m_pModFromScratchButton->SetSelected( false ); |
|
|
|
// Select the most common possible option |
|
if ( m_pModHL2Button->IsEnabled() ) |
|
{ |
|
m_pModHL2Button->SetSelected( true ); |
|
} |
|
else if ( m_pModHL2MPButton->IsEnabled() ) |
|
{ |
|
m_pModHL2Button->SetSelected( true ); |
|
} |
|
else if ( m_pModFromScratchButton->IsVisible() ) |
|
{ |
|
m_pModFromScratchButton->SetSelected( true ); |
|
} |
|
} |
|
|
|
WizardSubPanel *CModWizardSubPanel_Intro::GetNextSubPanel() |
|
{ |
|
return dynamic_cast<WizardSubPanel *>(GetWizardPanel()->FindChildByName("CModWizardSubPanel_GetModInfo")); |
|
} |
|
|
|
void CModWizardSubPanel_Intro::PerformLayout() |
|
{ |
|
BaseClass::PerformLayout(); |
|
|
|
// Update the scratch button text - in orange box, the text is different, but it's the same button. |
|
if ( !V_strcmp( g_engineDir, "source2007" ) ) |
|
SetDialogVariable( "ScratchLabel", g_pVGuiLocalize->Find( "#StartFromTemplate" ) ); |
|
else |
|
SetDialogVariable( "ScratchLabel", g_pVGuiLocalize->Find( "#StartFromScratch" ) ); |
|
|
|
GetWizardPanel()->SetFinishButtonEnabled(false); |
|
} |
|
|
|
void CModWizardSubPanel_Intro::OnDisplayAsNext() |
|
{ |
|
GetWizardPanel()->SetTitle( "#ModWizard_Intro_Title", true ); |
|
} |
|
|
|
|
|
ModType_t CModWizardSubPanel_Intro::GetModType() |
|
{ |
|
if ( m_pModHL2Button && m_pModHL2Button->IsSelected() ) |
|
{ |
|
return ModType_HL2; |
|
} |
|
else if ( m_pModHL2MPButton && m_pModHL2MPButton->IsSelected() ) |
|
{ |
|
return ModType_HL2_Multiplayer; |
|
} |
|
else if ( m_pSourceCodeOnlyButton && m_pSourceCodeOnlyButton->IsSelected() ) |
|
{ |
|
return ModType_SourceCodeOnly; |
|
} |
|
else |
|
{ |
|
return ModType_FromScratch; |
|
} |
|
} |
|
|
|
|
|
bool CModWizardSubPanel_Intro::OnNextButton() |
|
{ |
|
// If we're only installing the source code, then we don't care about the game directory. |
|
bool bShowModName = true; |
|
if ( GetModType() == ModType_SourceCodeOnly ) |
|
bShowModName = false; |
|
|
|
CModWizardSubPanel_GetModInfo *pNextPanel = dynamic_cast<CModWizardSubPanel_GetModInfo*>(GetWizardPanel()->FindChildByName("CModWizardSubPanel_GetModInfo")); |
|
if ( pNextPanel ) |
|
{ |
|
if ( pNextPanel->m_pModName ) |
|
pNextPanel->m_pModName->SetVisible( bShowModName ); |
|
|
|
if ( pNextPanel->m_pModNameInfoLabel ) |
|
pNextPanel->m_pModNameInfoLabel->SetVisible( bShowModName ); |
|
|
|
pNextPanel->m_ModType = GetModType(); |
|
} |
|
|
|
return true; |
|
}
|
|
|