//========= 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 ); }