aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/shared/basecombatweapon_shared.cpp
diff options
context:
space:
mode:
authorJohn Schoenick <[email protected]>2015-09-09 18:35:41 -0700
committerJohn Schoenick <[email protected]>2015-09-09 18:35:41 -0700
commit0d8dceea4310fde5706b3ce1c70609d72a38efdf (patch)
treec831ef32c2c801a5c5a80401736b52c7b5a528ec /mp/src/game/shared/basecombatweapon_shared.cpp
parentUpdated the SDK with the latest code from the TF and HL2 branches. (diff)
downloadsource-sdk-2013-0d8dceea4310fde5706b3ce1c70609d72a38efdf.tar.xz
source-sdk-2013-0d8dceea4310fde5706b3ce1c70609d72a38efdf.zip
Updated the SDK with the latest code from the TF and HL2 branches.HEADmaster
Diffstat (limited to 'mp/src/game/shared/basecombatweapon_shared.cpp')
-rw-r--r--mp/src/game/shared/basecombatweapon_shared.cpp67
1 files changed, 56 insertions, 11 deletions
diff --git a/mp/src/game/shared/basecombatweapon_shared.cpp b/mp/src/game/shared/basecombatweapon_shared.cpp
index 4ab20c12..616dcf47 100644
--- a/mp/src/game/shared/basecombatweapon_shared.cpp
+++ b/mp/src/game/shared/basecombatweapon_shared.cpp
@@ -1149,7 +1149,7 @@ float CBaseCombatWeapon::GetViewModelSequenceDuration()
return vm->SequenceDuration();
}
-bool CBaseCombatWeapon::IsViewModelSequenceFinished( void )
+bool CBaseCombatWeapon::IsViewModelSequenceFinished( void ) const
{
// These are not valid activities and always complete immediately
if ( GetActivity() == ACT_RESET || GetActivity() == ACT_INVALID )
@@ -1452,7 +1452,12 @@ selects and deploys each weapon as you pass it. (sjb)
bool CBaseCombatWeapon::Deploy( )
{
MDLCACHE_CRITICAL_SECTION();
- return DefaultDeploy( (char*)GetViewModel(), (char*)GetWorldModel(), GetDrawActivity(), (char*)GetAnimPrefix() );
+ bool bResult = DefaultDeploy( (char*)GetViewModel(), (char*)GetWorldModel(), GetDrawActivity(), (char*)GetAnimPrefix() );
+
+ // override pose parameters
+ PoseParameterOverride( false );
+
+ return bResult;
}
Activity CBaseCombatWeapon::GetDrawActivity( void )
@@ -1511,6 +1516,9 @@ bool CBaseCombatWeapon::Holster( CBaseCombatWeapon *pSwitchingTo )
RescindReloadHudHint();
}
+ // reset pose parameters
+ PoseParameterOverride( true );
+
return true;
}
@@ -1775,8 +1783,8 @@ void CBaseCombatWeapon::ItemPostFrame( void )
// -----------------------
// Reload pressed / Clip Empty
- // -----------------------
- if ( ( pOwner->m_nButtons & IN_RELOAD ) && UsesClipsForAmmo1() && !m_bInReload )
+ // Can only start the Reload Cycle after the firing cycle
+ if ( ( pOwner->m_nButtons & IN_RELOAD ) && m_flNextPrimaryAttack <= gpGlobals->curtime && UsesClipsForAmmo1() && !m_bInReload )
{
// reload when reload is pressed, or if no buttons are down and weapon is empty.
Reload();
@@ -2440,23 +2448,53 @@ bool CBaseCombatWeapon::IsLocked( CBaseEntity *pAsker )
//-----------------------------------------------------------------------------
Activity CBaseCombatWeapon::ActivityOverride( Activity baseAct, bool *pRequired )
{
- acttable_t *pTable = ActivityList();
- int actCount = ActivityListCount();
+ int actCount = 0;
+ acttable_t *pTable = ActivityList( actCount );
- for ( int i = 0; i < actCount; i++, pTable++ )
+ for ( int i = 0; i < actCount; i++ )
{
- if ( baseAct == pTable->baseAct )
+ const acttable_t& act = pTable[i];
+ if ( baseAct == act.baseAct )
{
if (pRequired)
{
- *pRequired = pTable->required;
+ *pRequired = act.required;
}
- return (Activity)pTable->weaponAct;
+ return (Activity)act.weaponAct;
}
}
return baseAct;
}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CBaseCombatWeapon::PoseParameterOverride( bool bReset )
+{
+ CBaseCombatCharacter *pOwner = GetOwner();
+ if ( !pOwner )
+ return;
+
+ CStudioHdr *pStudioHdr = pOwner->GetModelPtr();
+ if ( !pStudioHdr )
+ return;
+
+ int iCount = 0;
+ poseparamtable_t *pPoseParamList = PoseParamList( iCount );
+ if ( pPoseParamList )
+ {
+ for ( int i=0; i<iCount; ++i )
+ {
+ int iPoseParam = pOwner->LookupPoseParameter( pStudioHdr, pPoseParamList[i].pszName );
+
+ if ( iPoseParam != -1 )
+ pOwner->SetPoseParameter( iPoseParam, bReset ? 0 : pPoseParamList[i].flValue );
+ }
+ }
+}
+
+
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
@@ -2745,6 +2783,13 @@ void* SendProxy_SendNonLocalWeaponDataTable( const SendProp *pProp, const void *
}
REGISTER_SEND_PROXY_NON_MODIFIED_POINTER( SendProxy_SendNonLocalWeaponDataTable );
+#else
+void CBaseCombatWeapon::RecvProxy_WeaponState( const CRecvProxyData *pData, void *pStruct, void *pOut )
+{
+ CBaseCombatWeapon *pWeapon = (CBaseCombatWeapon*)pStruct;
+ pWeapon->m_iState = pData->m_Value.m_Int;
+ pWeapon->UpdateVisibility();
+}
#endif
#if PREDICTION_ERROR_CHECK_LEVEL > 1
@@ -2818,7 +2863,7 @@ BEGIN_NETWORK_TABLE(CBaseCombatWeapon, DT_BaseCombatWeapon)
RecvPropDataTable("LocalActiveWeaponData", 0, 0, &REFERENCE_RECV_TABLE(DT_LocalActiveWeaponData)),
RecvPropInt( RECVINFO(m_iViewModelIndex)),
RecvPropInt( RECVINFO(m_iWorldModelIndex)),
- RecvPropInt( RECVINFO(m_iState )),
+ RecvPropInt( RECVINFO(m_iState), 0, &CBaseCombatWeapon::RecvProxy_WeaponState ),
RecvPropEHandle( RECVINFO(m_hOwner ) ),
#endif
END_NETWORK_TABLE()