diff options
Diffstat (limited to 'game/server/team_spawnpoint.cpp')
| -rw-r--r-- | game/server/team_spawnpoint.cpp | 133 |
1 files changed, 133 insertions, 0 deletions
diff --git a/game/server/team_spawnpoint.cpp b/game/server/team_spawnpoint.cpp new file mode 100644 index 0000000..ab3699e --- /dev/null +++ b/game/server/team_spawnpoint.cpp @@ -0,0 +1,133 @@ +//========= 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 ); + } +} |