Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

160 lines
5.1 KiB

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef TF_HUD_MENU_SPY_BUILD_H
#define TF_HUD_MENU_SPY_BUILD_H
#ifdef _WIN32
#pragma once
#endif
#ifdef STAGING_ONLY
#include <vgui_controls/EditablePanel.h>
#include <vgui_controls/Label.h>
#include "IconPanel.h"
#include "tf_controls.h"
#include "tf_hud_base_build_menu.h"
using namespace vgui;
#define ALL_BUILDINGS -1
#define NUM_SPY_BUILDINGS 3
enum spybuildmenulayouts_t
{
SPY_BUILDMENU_DEFAULT = 0,
};
struct SpyConstructBuilding_t
{
SpyConstructBuilding_t() {}
SpyConstructBuilding_t( bool bEnabled,
ObjectType_t type,
int iMode,
const char *pszConstructAvailableObjectRes,
const char *pszConstructAlreadyBuiltObjectRes,
const char *pszConstructCantAffordObjectRes,
const char *pszConstructUnavailableObjectRes,
const char *pszDestroyActiveObjectRes,
const char *pszDestroyInactiveObjectRes,
const char *pszDestroyUnavailableObjectRes )
: m_bEnabled( bEnabled )
, m_iObjectType ( type )
, m_iMode( iMode )
, m_pszConstructAvailableObjectRes( pszConstructAvailableObjectRes )
, m_pszConstructAlreadyBuiltObjectRes( pszConstructAlreadyBuiltObjectRes )
, m_pszConstructCantAffordObjectRes( pszConstructCantAffordObjectRes )
, m_pszConstructUnavailableObjectRes( pszConstructUnavailableObjectRes )
, m_pszDestroyActiveObjectRes( pszDestroyActiveObjectRes )
, m_pszDestroyInactiveObjectRes( pszDestroyInactiveObjectRes )
, m_pszDestroyUnavailableObjectRes( pszDestroyUnavailableObjectRes )
{}
bool m_bEnabled;
ObjectType_t m_iObjectType;
int m_iMode;
// Construction panels
const char *m_pszConstructAvailableObjectRes;
const char *m_pszConstructAlreadyBuiltObjectRes;
const char *m_pszConstructCantAffordObjectRes;
const char *m_pszConstructUnavailableObjectRes;
// Destruction panels
const char *m_pszDestroyActiveObjectRes;
const char *m_pszDestroyInactiveObjectRes;
const char *m_pszDestroyUnavailableObjectRes;
};
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
struct SpyConstructBuildingReplacement_t
{
SpyConstructBuildingReplacement_t( ObjectType_t type,
int iMode,
const char *strConstructionAvailable,
const char *strConstructionAlreadyBuilt,
const char *strConstructionCantAfford,
const char *strConstructionUnavailable,
const char *strDestructionActive,
const char *strDestructionInactive,
const char *strDestructionUnavailable,
int iReplacementSlots,
int iDisableSlots
)
: m_building( true,
type,
iMode,
strConstructionAvailable,
strConstructionAlreadyBuilt,
strConstructionCantAfford,
strConstructionUnavailable,
strDestructionActive,
strDestructionInactive,
strDestructionUnavailable )
{
m_iReplacementSlots = iReplacementSlots;
m_iDisableSlots = iDisableSlots;
}
SpyConstructBuilding_t m_building;
int m_iReplacementSlots;
int m_iDisableSlots;
};
extern const SpyConstructBuilding_t g_kSpyBuildings[];
extern const SpyConstructBuildingReplacement_t s_alternateSpyBuildings[];
class CHudMenuSpyBuild : public CHudBaseBuildMenu
{
DECLARE_CLASS_SIMPLE( CHudMenuSpyBuild, CHudBaseBuildMenu );
public:
CHudMenuSpyBuild( const char *pElementName );
virtual void ApplySchemeSettings( IScheme *scheme ) OVERRIDE;
virtual void SetVisible( bool state ) OVERRIDE;
virtual void OnTick( void ) OVERRIDE;
virtual bool ShouldDraw( void ) OVERRIDE;
int HudElementKeyInput( int down, ButtonCode_t keynum, const char *pszCurrentBinding );
virtual int GetRenderGroupPriority() { return 50; }
int CalcCustomBuildMenuLayout( void ) const;
static void ReplaceBuildings( SpyConstructBuilding_t (&targetBuildings)[ NUM_SPY_BUILDINGS ] );
static void GetBuildingIDAndModeFromSlot( int iSlot, int &iBuilding, int &iMode, const SpyConstructBuilding_t (&buildings)[ NUM_SPY_BUILDINGS ] );
private:
void SendBuildMessage( int iSlot );
bool SendDestroyMessage( int iSlot );
void SetSelectedItem( int iSlot );
void UpdateHintLabels( void ); // show/hide the bright and dim build, destroy hint labels
void InitBuildings();
bool CanBuild( int iSlot );
EditablePanel *m_pAvailableObjects[NUM_SPY_BUILDINGS];
EditablePanel *m_pAlreadyBuiltObjects[NUM_SPY_BUILDINGS];
EditablePanel *m_pCantAffordObjects[NUM_SPY_BUILDINGS];
EditablePanel *m_pUnavailableObjects[NUM_SPY_BUILDINGS];
// 360 layout only
CIconPanel *m_pActiveSelection;
CExLabel *m_pBuildLabelBright;
CExLabel *m_pBuildLabelDim;
CExLabel *m_pDestroyLabelBright;
CExLabel *m_pDestroyLabelDim;
int m_iSelectedItem;
bool m_bInConsoleMode;
spybuildmenulayouts_t m_iCurrentBuildMenuLayout;
SpyConstructBuilding_t m_Buildings[NUM_SPY_BUILDINGS];
};
#endif // STAGING_ONLY
#endif // TF_HUD_MENU_SPY_BUILD_H