mirror of
https://github.com/nillerusr/source-engine.git
synced 2025-06-08 08:18:13 +00:00
201 lines
6.1 KiB
C++
201 lines
6.1 KiB
C++
#include "cbase.h"
|
|
#include "nb_select_mission_entry.h"
|
|
#include "vgui_controls/Label.h"
|
|
#include "vgui_controls/ImagePanel.h"
|
|
#include "vgui_bitmapbutton.h"
|
|
#include "KeyValues.h"
|
|
#include "missionchooser/iasw_mission_chooser.h"
|
|
#include "missionchooser/iasw_mission_chooser_source.h"
|
|
#include "filesystem.h"
|
|
#include "nb_select_mission_panel.h"
|
|
#include "vgui/ISurface.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
CNB_Select_Mission_Entry::CNB_Select_Mission_Entry( vgui::Panel *parent, const char *name ) : BaseClass( parent, name )
|
|
{
|
|
// == MANAGED_MEMBER_CREATION_START: Do not edit by hand ==
|
|
m_pImage = new CBitmapButton( this, "Image", "" );
|
|
m_pName = new vgui::Label( this, "Name", "" );
|
|
// == MANAGED_MEMBER_CREATION_END ==
|
|
|
|
m_pImage->AddActionSignalTarget( this );
|
|
m_pImage->SetCommand( "MissionClicked" );
|
|
|
|
m_nMissionIndex = -1;
|
|
m_szMissionName[0] = 0;
|
|
m_flZoom = 0.0f;
|
|
}
|
|
|
|
CNB_Select_Mission_Entry::~CNB_Select_Mission_Entry()
|
|
{
|
|
|
|
}
|
|
|
|
void CNB_Select_Mission_Entry::ApplySchemeSettings( vgui::IScheme *pScheme )
|
|
{
|
|
BaseClass::ApplySchemeSettings( pScheme );
|
|
|
|
LoadControlSettings( "resource/ui/nb_select_mission_entry.res" );
|
|
m_szMissionName[0] = 0;
|
|
}
|
|
|
|
void CNB_Select_Mission_Entry::PerformLayout()
|
|
{
|
|
BaseClass::PerformLayout();
|
|
}
|
|
|
|
void CNB_Select_Mission_Entry::OnThink()
|
|
{
|
|
BaseClass::OnThink();
|
|
|
|
IASW_Mission_Chooser_Source *pSource = missionchooser ? missionchooser->LocalMissionSource() : NULL;
|
|
|
|
// TODO: If voting, then use:
|
|
//IASW_Mission_Chooser_Source *pSource = GetVotingMissionSource();
|
|
|
|
if ( !pSource )
|
|
{
|
|
//Warning( "Unable to select a mission as couldn't find an IASW_Mission_Chooser_Source\n" );
|
|
return;
|
|
}
|
|
|
|
color32 white;
|
|
white.r = 255;
|
|
white.g = 255;
|
|
white.b = 255;
|
|
white.a = 255;
|
|
|
|
ASW_Mission_Chooser_Mission *pMission = pSource->GetMission( m_nMissionIndex, true );
|
|
if ( pMission )
|
|
{
|
|
if ( Q_strcmp( pMission->m_szMissionName, m_szMissionName ) )
|
|
{
|
|
Q_snprintf(m_szMissionName, sizeof(m_szMissionName), "%s", pMission->m_szMissionName);
|
|
|
|
if (m_szMissionName[0] == '\0')
|
|
{
|
|
m_pName->SetText( "" );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
return;
|
|
}
|
|
|
|
// strip off the extension
|
|
char stripped[MAX_PATH];
|
|
V_StripExtension( m_szMissionName, stripped, MAX_PATH );
|
|
|
|
KeyValues *pMissionKeys = new KeyValues( stripped );
|
|
|
|
char tempfile[MAX_PATH];
|
|
Q_snprintf( tempfile, sizeof( tempfile ), "resource/overviews/%s.txt", stripped );
|
|
|
|
bool bNoOverview = false;
|
|
if ( !pMissionKeys->LoadFromFile( g_pFullFileSystem, tempfile, "GAME" ) )
|
|
{
|
|
// try to load it directly from the maps folder
|
|
Q_snprintf( tempfile, sizeof( tempfile ), "maps/%s.txt", stripped );
|
|
if ( !pMissionKeys->LoadFromFile( g_pFullFileSystem, tempfile, "GAME" ) )
|
|
{
|
|
bNoOverview = true;
|
|
}
|
|
}
|
|
if (bNoOverview)
|
|
{
|
|
m_pName->SetText(stripped);
|
|
if (m_pImage)
|
|
{
|
|
//Msg("setting image for %s to unknown pic\n", m_m_szMissionName);
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED_MOUSE_OVER, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_PRESSED, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
m_pImage->SetVisible( true );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
const char *szTitle = pMissionKeys->GetString("missiontitle");
|
|
if (szTitle[0] == '\0')
|
|
m_pName->SetText( stripped );
|
|
else
|
|
m_pName->SetText( szTitle );
|
|
if (m_pImage)
|
|
{
|
|
const char *szImage = pMissionKeys->GetString("image");
|
|
if (szImage[0] == '\0')
|
|
{
|
|
//Msg("setting image for %s to unknown pic\n", m_m_szMissionName);
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED_MOUSE_OVER, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_PRESSED, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
}
|
|
else
|
|
{
|
|
//Msg("setting image for %s to %s\n", m_m_szMissionName, szImage);
|
|
char imagename[MAX_PATH];
|
|
Q_snprintf( imagename, sizeof(imagename), "vgui/%s", szImage );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED, imagename, white );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED_MOUSE_OVER, imagename, white );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_PRESSED, imagename, white );
|
|
}
|
|
m_pImage->SetVisible(true);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_pName->SetText( "" );
|
|
m_pImage->SetImage( CBitmapButton::BUTTON_ENABLED, "vgui/swarm/MissionPics/UnknownMissionPic", white );
|
|
}
|
|
|
|
float flTargetZoom = m_pImage->IsCursorOver() ? 1.0f : 0;
|
|
if ( flTargetZoom == 1.0f && m_flZoom == 0.0f )
|
|
{
|
|
vgui::surface()->PlaySound( "UI/menu_focus.wav" );
|
|
}
|
|
m_flZoom = Approach( flTargetZoom, m_flZoom, gpGlobals->frametime * 10.0f );
|
|
|
|
float flZoom = 1.0f; // m_flZoom;
|
|
float flZoomDistX = YRES( 10 );
|
|
float flZoomDistY = YRES( 7 );
|
|
int x = flZoomDistX - flZoomDistX * flZoom;
|
|
int y = YRES( 34 ) + flZoomDistY - flZoomDistY * flZoom;
|
|
int w = YRES( 133 ) - ( flZoomDistX * 2 ) + ( flZoomDistX * 2 * flZoom );
|
|
int h = YRES( 100 ) - ( flZoomDistY * 2 ) + ( flZoomDistY * 2 * flZoom );
|
|
// "xpos" "0"
|
|
// "ypos" "34"
|
|
// "wide" "133"
|
|
// "tall" "100"
|
|
|
|
if ( flTargetZoom == 1.0f )
|
|
{
|
|
m_pName->SetFgColor( Color( 255, 255, 255, 255 ) );
|
|
}
|
|
else
|
|
{
|
|
m_pName->SetFgColor( Color( 83, 148, 192, 255 ) );
|
|
}
|
|
|
|
m_pImage->SetBounds( x, y, w, h );
|
|
}
|
|
|
|
void CNB_Select_Mission_Entry::OnCommand( const char *command )
|
|
{
|
|
if ( !Q_stricmp( "MissionClicked", command ) )
|
|
{
|
|
IASW_Mission_Chooser_Source *pSource = missionchooser ? missionchooser->LocalMissionSource() : NULL;
|
|
if ( pSource )
|
|
{
|
|
ASW_Mission_Chooser_Mission *pMission = pSource->GetMission( m_nMissionIndex, true );
|
|
if ( pMission )
|
|
{
|
|
CNB_Select_Mission_Panel *pPanel = dynamic_cast<CNB_Select_Mission_Panel*>( GetParent()->GetParent()->GetParent() );
|
|
if ( pPanel )
|
|
{
|
|
pPanel->MissionSelected( pMission );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |