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.
141 lines
2.7 KiB
141 lines
2.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "dod_ammo_box.h" |
|
#include "dod_player.h" |
|
#include "dod_gamerules.h" |
|
|
|
BEGIN_DATADESC( CAmmoBox ) |
|
DEFINE_THINKFUNC( FlyThink ), |
|
DEFINE_ENTITYFUNC( BoxTouch ), |
|
END_DATADESC(); |
|
|
|
LINK_ENTITY_TO_CLASS( dod_ammo_box, CAmmoBox ); |
|
|
|
void CAmmoBox::Spawn( void ) |
|
{ |
|
Precache( ); |
|
SetModel( "models/ammo/ammo_us.mdl" ); |
|
BaseClass::Spawn(); |
|
|
|
SetNextThink( gpGlobals->curtime + 0.75f ); |
|
SetThink( &CAmmoBox::FlyThink ); |
|
|
|
SetTouch( &CAmmoBox::BoxTouch ); |
|
|
|
m_hOldOwner = GetOwnerEntity(); |
|
} |
|
|
|
void CAmmoBox::Precache( void ) |
|
{ |
|
PrecacheModel( "models/ammo/ammo_axis.mdl" ); |
|
PrecacheModel( "models/ammo/ammo_us.mdl" ); |
|
} |
|
|
|
CAmmoBox *CAmmoBox::Create( const Vector &vecOrigin, const QAngle &vecAngles, CBaseEntity *pOwner, int team ) |
|
{ |
|
CAmmoBox *p = static_cast<CAmmoBox *> ( CBaseAnimating::Create( "dod_ammo_box", vecOrigin, vecAngles, pOwner ) ); |
|
|
|
p->SetAmmoTeam( team ); |
|
|
|
return p; |
|
} |
|
|
|
void CAmmoBox::SetAmmoTeam( int team ) |
|
{ |
|
switch( team ) |
|
{ |
|
case TEAM_ALLIES: |
|
{ |
|
SetModel( "models/ammo/ammo_us.mdl" ); |
|
} |
|
break; |
|
case TEAM_AXIS: |
|
{ |
|
SetModel( "models/ammo/ammo_axis.mdl" ); |
|
} |
|
break; |
|
default: |
|
Assert(0); |
|
break; |
|
} |
|
|
|
m_iAmmoTeam = team; |
|
} |
|
|
|
void CAmmoBox::FlyThink( void ) |
|
{ |
|
SetOwnerEntity( NULL ); //so our owner can pick it back up |
|
} |
|
|
|
void CAmmoBox::BoxTouch( CBaseEntity *pOther ) |
|
{ |
|
Assert( pOther ); |
|
|
|
if( !pOther->IsPlayer() ) |
|
return; |
|
|
|
if( !pOther->IsAlive() ) |
|
return; |
|
|
|
//Don't let the person who threw this ammo pick it up until it hits the ground. |
|
//This way we can throw ammo to people, but not touch it as soon as we throw it ourselves |
|
if( GetOwnerEntity() == pOther ) |
|
return; |
|
|
|
CDODPlayer *pPlayer = ToDODPlayer( pOther ); |
|
|
|
Assert( pPlayer ); |
|
|
|
if( pPlayer->GetTeamNumber() != m_iAmmoTeam ) |
|
return; |
|
|
|
if( pPlayer == m_hOldOwner ) |
|
{ |
|
//don't give ammo, just give him his drop again |
|
pPlayer->ReturnGenericAmmo(); |
|
UTIL_Remove(this); |
|
} |
|
else |
|
{ |
|
//See if they can use some ammo, if so, remove the box |
|
if( pPlayer->GiveGenericAmmo() ) |
|
UTIL_Remove(this); |
|
} |
|
} |
|
|
|
bool CAmmoBox::MyTouch( CBasePlayer *pBasePlayer ) |
|
{ |
|
if ( !pBasePlayer ) |
|
{ |
|
Assert( false ); |
|
return false; |
|
} |
|
|
|
if( !pBasePlayer->IsAlive() ) |
|
return false; |
|
|
|
if( pBasePlayer->GetTeamNumber() != m_iAmmoTeam ) |
|
return false; |
|
|
|
CDODPlayer *pPlayer = ToDODPlayer( pBasePlayer ); |
|
|
|
if( pPlayer == m_hOldOwner ) |
|
{ |
|
//don't give ammo, just give him his drop again |
|
pPlayer->ReturnGenericAmmo(); |
|
UTIL_Remove(this); |
|
} |
|
else |
|
{ |
|
//See if they can use some ammo, if so, remove the box |
|
if( pPlayer->GiveGenericAmmo() ) |
|
UTIL_Remove(this); |
|
} |
|
|
|
return true; |
|
} |