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.
100 lines
3.1 KiB
100 lines
3.1 KiB
![]()
4 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
|
||
|
#include "cbase.h"
|
||
|
#include "c_tf_passtime_ball.h"
|
||
|
#include "passtime_convars.h"
|
||
|
#include "tf_shareddefs.h"
|
||
|
#include "c_tf_player.h"
|
||
|
#include "c_playerresource.h"
|
||
|
#include "c_tf_player.h"
|
||
|
#include "tf_gamerules.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
IMPLEMENT_CLIENTCLASS_DT( C_PasstimeBall, DT_PasstimeBall, CPasstimeBall )
|
||
|
RecvPropInt(RECVINFO(m_iCollisionCount)),
|
||
|
RecvPropEHandle(RECVINFO(m_hHomingTarget)),
|
||
|
RecvPropEHandle(RECVINFO(m_hCarrier)),
|
||
|
RecvPropEHandle(RECVINFO(m_hPrevCarrier)),
|
||
|
END_RECV_TABLE()
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
LINK_ENTITY_TO_CLASS( passtime_ball, C_PasstimeBall );
|
||
|
PRECACHE_REGISTER( passtime_ball );
|
||
|
|
||
|
C_TFPlayer *C_PasstimeBall::GetCarrier() { return m_hCarrier.Get(); }
|
||
|
C_TFPlayer *C_PasstimeBall::GetPrevCarrier() { return m_hPrevCarrier.Get(); }
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
C_PasstimeBall::C_PasstimeBall()
|
||
|
{
|
||
|
UseClientSideAnimation();
|
||
|
m_fDrawTime = 0.0f;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
C_PasstimeBall::~C_PasstimeBall()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
unsigned int C_PasstimeBall::PhysicsSolidMaskForEntity() const
|
||
|
{
|
||
|
return MASK_PLAYERSOLID; // must match server
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool C_PasstimeBall::ShouldCollide( int collisionGroup, int contentsMask ) const
|
||
|
{
|
||
|
// note: returning false for COLLISION_GROUP_PLAYER_MOVEMENT means the ball won't
|
||
|
// stop player movement. the only real visible effect when this function doesn't
|
||
|
// return false for COLLISION_GROUP_PLAYER_MOVEMENT is that the ball is unable
|
||
|
// to impart physics forces on the ball when the ball is blocked, since the player
|
||
|
// will set velocity to zero due to being "stuck" on the ball, even though the
|
||
|
// ball won't actually prevent the player from moving through it.
|
||
|
return (collisionGroup != COLLISION_GROUP_PLAYER_MOVEMENT);
|
||
|
// && (contentsMask & MASK_SHOT_HULL);
|
||
|
//return BaseClass::ShouldCollide( collisionGroup, contentsMask );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void C_PasstimeBall::OnDataChanged( DataUpdateType_t updateType )
|
||
|
{
|
||
|
BaseClass::OnDataChanged( updateType );
|
||
|
|
||
|
if ( updateType == DATA_UPDATE_CREATED )
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if ( TFGameRules()->IsPasstimeMode() )
|
||
|
{
|
||
|
bool bIsVisible = !(GetEffects() & EF_NODRAW);
|
||
|
if ( bIsVisible && !m_bWasVisible )
|
||
|
{
|
||
|
float nextValidTime = gpGlobals->curtime + 0.1f;
|
||
|
m_fDrawTime = nextValidTime;
|
||
|
}
|
||
|
m_bWasVisible = bIsVisible;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
int C_PasstimeBall::DrawModel( int flags )
|
||
|
{
|
||
|
if( gpGlobals->curtime < m_fDrawTime )
|
||
|
{
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
return BaseClass::DrawModel( flags );
|
||
|
}
|