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.

134 lines
4.0 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: Team spawnpoint handling
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "entitylist.h"
#include "entityoutput.h"
#include "player.h"
#include "eventqueue.h"
#include "gamerules.h"
#include "team_spawnpoint.h"
#include "team.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
LINK_ENTITY_TO_CLASS( info_player_teamspawn, CTeamSpawnPoint );
BEGIN_DATADESC( CTeamSpawnPoint )
// keys
DEFINE_KEYFIELD( m_iDisabled, FIELD_INTEGER, "StartDisabled" ),
// input functions
DEFINE_INPUTFUNC( FIELD_VOID, "Enable", InputEnable ),
DEFINE_INPUTFUNC( FIELD_VOID, "Disable", InputDisable ),
// outputs
DEFINE_OUTPUT( m_OnPlayerSpawn, "OnPlayerSpawn" ),
END_DATADESC()
//-----------------------------------------------------------------------------
// Purpose: Attach this spawnpoint to it's team
//-----------------------------------------------------------------------------
void CTeamSpawnPoint::Activate( void )
{
BaseClass::Activate();
if ( GetTeamNumber() > 0 && GetTeamNumber() <= MAX_TEAMS )
{
GetGlobalTeam( GetTeamNumber() )->AddSpawnpoint( this );
}
else
{
Warning( "info_player_teamspawn with invalid team number: %d\n", GetTeamNumber() );
UTIL_Remove( this );
}
}
//-----------------------------------------------------------------------------
// Purpose: Is this spawnpoint ready for a player to spawn in?
//-----------------------------------------------------------------------------
bool CTeamSpawnPoint::IsValid( CBasePlayer *pPlayer )
{
CBaseEntity *ent = NULL;
for ( CEntitySphereQuery sphere( GetAbsOrigin(), 128 ); ( ent = sphere.GetCurrentEntity() ) != NULL; sphere.NextEntity() )
{
// if ent is a client, don't spawn on 'em
CBaseEntity *plent = ent;
if ( plent && plent->IsPlayer() && plent != pPlayer )
return false;
}
return true;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTeamSpawnPoint::InputEnable( inputdata_t &inputdata )
{
m_iDisabled = FALSE;
}
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
void CTeamSpawnPoint::InputDisable( inputdata_t &inputdata )
{
m_iDisabled = TRUE;
}
//===========================================================================================================
// VEHICLE SPAWNPOINTS
//===========================================================================================================
LINK_ENTITY_TO_CLASS( info_vehicle_groundspawn, CTeamVehicleSpawnPoint );
BEGIN_DATADESC( CTeamVehicleSpawnPoint )
// outputs
DEFINE_OUTPUT( m_OnVehicleSpawn, "OnVehicleSpawn" ),
END_DATADESC()
//-----------------------------------------------------------------------------
// Purpose: Is this spawnpoint ready for a vehicle to spawn in?
//-----------------------------------------------------------------------------
bool CTeamVehicleSpawnPoint::IsValid( void )
{
CBaseEntity *ent = NULL;
for ( CEntitySphereQuery sphere( GetAbsOrigin(), 128 ); ( ent = sphere.GetCurrentEntity() ) != NULL; sphere.NextEntity() )
{
// if ent is a client, don't spawn on 'em
CBaseEntity *plent = ent;
if ( plent && plent->IsPlayer() )
return false;
}
return true;
}
//-----------------------------------------------------------------------------
// Purpose: Attach this spawnpoint to it's team
//-----------------------------------------------------------------------------
void CTeamVehicleSpawnPoint::Activate( void )
{
BaseClass::Activate();
if ( GetTeamNumber() > 0 && GetTeamNumber() <= MAX_TEAMS )
{
// Don't add vehicle spawnpoints to the team for now
//GetGlobalTeam( GetTeamNumber() )->AddSpawnpoint( this );
}
else
{
Warning( "info_vehicle_groundspawn with invalid team number: %d\n", GetTeamNumber() );
UTIL_Remove( this );
}
}