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.
107 lines
3.3 KiB
107 lines
3.3 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose: Map entity that adds a custom technology to the techtree
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "cbase.h"
|
||
|
#include "EntityOutput.h"
|
||
|
#include "EntityList.h"
|
||
|
#include "tf_team.h"
|
||
|
#include "techtree.h"
|
||
|
#include "info_customtech.h"
|
||
|
#include "tier1/strtools.h"
|
||
|
|
||
|
BEGIN_DATADESC( CInfoCustomTechnology )
|
||
|
|
||
|
// outputs
|
||
|
DEFINE_OUTPUT( m_flTechPercentage, "TechPercentage" ),
|
||
|
|
||
|
// keys
|
||
|
DEFINE_KEYFIELD_NOT_SAVED( m_iszTech , FIELD_STRING, "TechToWatch" ),
|
||
|
DEFINE_KEYFIELD_NOT_SAVED( m_iszTechTreeFile , FIELD_STRING, "NewTechFile" ),
|
||
|
|
||
|
END_DATADESC()
|
||
|
|
||
|
IMPLEMENT_SERVERCLASS_ST( CInfoCustomTechnology, DT_InfoCustomTechnology )
|
||
|
SendPropString( SENDINFO( m_szTechTreeFile ) ),
|
||
|
END_SEND_TABLE();
|
||
|
|
||
|
LINK_ENTITY_TO_CLASS( info_customtech, CInfoCustomTechnology );
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Always transmit
|
||
|
//-----------------------------------------------------------------------------
|
||
|
int CInfoCustomTechnology::ShouldTransmit( const CCheckTransmitInfo *pInfo )
|
||
|
{
|
||
|
// Don't need to transmit ones that don't add new techs
|
||
|
if ( !m_iszTechTreeFile )
|
||
|
return FL_EDICT_DONTSEND;
|
||
|
|
||
|
// Only transmit to members of my team
|
||
|
CBaseEntity* pRecipientEntity = CBaseEntity::Instance( pInfo->m_pClientEnt );
|
||
|
if ( InSameTeam( pRecipientEntity ) )
|
||
|
{
|
||
|
//Msg( "SENDING\n" );
|
||
|
return FL_EDICT_ALWAYS;
|
||
|
}
|
||
|
|
||
|
return FL_EDICT_DONTSEND;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CInfoCustomTechnology::Spawn( void )
|
||
|
{
|
||
|
m_flTechPercentage.Set( 0, this, this );
|
||
|
memset( m_szTechTreeFile.GetForModify(), 0, sizeof(m_szTechTreeFile) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Add myself to the technology tree
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CInfoCustomTechnology::Activate( void )
|
||
|
{
|
||
|
BaseClass::Activate();
|
||
|
if ( !GetTeamNumber() )
|
||
|
{
|
||
|
Msg( "ERROR: info_customtech without a specified team.\n" );
|
||
|
UTIL_Remove( this );
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Get the Team's Technology Tree
|
||
|
CTFTeam *pTeam = (CTFTeam *)GetTeam();
|
||
|
if ( pTeam )
|
||
|
{
|
||
|
CTechnologyTree *pTechTree = pTeam->GetTechnologyTree();
|
||
|
if ( pTechTree )
|
||
|
{
|
||
|
// Am I supposed to add some new technologies to the tech tree?
|
||
|
if ( m_iszTechTreeFile != NULL_STRING )
|
||
|
{
|
||
|
pTechTree->AddTechnologyFile( filesystem, GetTeamNumber(), (char*)STRING(m_iszTechTreeFile ) );
|
||
|
|
||
|
// Tell our clients about the technology
|
||
|
Q_strncpy( m_szTechTreeFile.GetForModify(), STRING(m_iszTechTreeFile), sizeof(m_szTechTreeFile) );
|
||
|
}
|
||
|
|
||
|
// Find the technology in the techtree
|
||
|
CBaseTechnology *pTechnology = pTechTree->GetTechnology( STRING(m_iszTech) );
|
||
|
// Now hook the technology up to me
|
||
|
if ( pTechnology )
|
||
|
{
|
||
|
pTechnology->RegisterWatcher( this );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: Update the amount of our technology that's owned
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CInfoCustomTechnology::UpdateTechPercentage( float flPercentage )
|
||
|
{
|
||
|
m_flTechPercentage.Set( flPercentage, this, this );
|
||
|
}
|