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
160 lines
5.1 KiB
5 years ago
|
//========= 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
|