fix prediction for hud charge meters

This commit is contained in:
wget 2025-02-25 15:20:58 +08:00 committed by GitHub
parent 0759e2e8e1
commit a328318d6e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 45 additions and 94 deletions

View file

@ -229,29 +229,8 @@ void CHudBowChargeMeter::OnTick( void )
CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon();
ITFChargeUpWeapon *pChargeupWeapon = dynamic_cast< ITFChargeUpWeapon *>( pWpn );
if ( !pWpn || !pChargeupWeapon )
if ( !pWpn || !pChargeupWeapon || !m_pChargeMeter || !pChargeupWeapon->GetChargeMaxTime() )
return;
if ( m_pChargeMeter )
{
float flChargeMaxTime = pChargeupWeapon->GetChargeMaxTime();
if ( flChargeMaxTime != 0 )
{
float flChargeBeginTime = pChargeupWeapon->GetChargeBeginTime();
if ( flChargeBeginTime > 0 )
{
float flTimeCharged = MAX( 0, gpGlobals->curtime - flChargeBeginTime );
flTimeCharged = MIN( flTimeCharged, 1.f );
float flPercentCharged = MIN( 1.0, flTimeCharged / flChargeMaxTime );
m_pChargeMeter->SetProgress( flPercentCharged );
}
else
{
m_pChargeMeter->SetProgress( 0.0f );
}
}
}
}
m_pChargeMeter->SetProgress( pChargeupWeapon->GetPercentProgress() );
}

View file

@ -115,28 +115,8 @@ void CHudDemomanChargeMeter::OnTick( void )
ITFChargeUpWeapon *pChargeupWeapon = dynamic_cast< ITFChargeUpWeapon *>( pWpn );
if ( !pWpn || !pChargeupWeapon || !pChargeupWeapon->CanCharge() )
if ( !pWpn || !pChargeupWeapon || !pChargeupWeapon->CanCharge() || !m_pChargeMeter || !pChargeupWeapon->GetChargeMaxTime() )
return;
if ( m_pChargeMeter )
{
float flChargeMaxTime = pChargeupWeapon->GetChargeMaxTime();
if ( flChargeMaxTime != 0 )
{
float flChargeBeginTime = pChargeupWeapon->GetChargeBeginTime();
if ( flChargeBeginTime > 0 )
{
float flTimeCharged = MAX( 0, gpGlobals->curtime - flChargeBeginTime );
float flPercentCharged = MIN( 1.0, flTimeCharged / flChargeMaxTime );
m_pChargeMeter->SetProgress( flPercentCharged );
}
else
{
m_pChargeMeter->SetProgress( 0.0f );
}
}
}
}
m_pChargeMeter->SetProgress( pChargeupWeapon->GetPercentProgress() );
}

View file

@ -119,28 +119,8 @@ void CHudFlameRocketChargeMeter::OnTick( void )
CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon();
ITFChargeUpWeapon *pChargeupWeapon = dynamic_cast< ITFChargeUpWeapon *>( pWpn );
if ( !pWpn || !pChargeupWeapon )
if ( !pWpn || !pChargeupWeapon || !m_pChargeMeter || !pChargeupWeapon->GetChargeMaxTime() )
return;
if ( m_pChargeMeter )
{
float flChargeMaxTime = pChargeupWeapon->GetChargeMaxTime();
if ( flChargeMaxTime != 0 )
{
float flChargeBeginTime = pChargeupWeapon->GetChargeBeginTime();
if ( flChargeBeginTime > 0 )
{
float flTimeCharged = MAX( 0, gpGlobals->curtime - flChargeBeginTime );
float flPercentCharged = MIN( 1.0, flTimeCharged / flChargeMaxTime );
m_pChargeMeter->SetProgress( flPercentCharged );
}
else
{
m_pChargeMeter->SetProgress( 0.0f );
}
}
}
m_pChargeMeter->SetProgress( pChargeupWeapon->GetPercentProgress() );
}

View file

@ -118,29 +118,8 @@ void CHudSapperChargeMeter::OnTick( void )
CTFWeaponBase *pWpn = pPlayer->GetActiveTFWeapon();
ITFChargeUpWeapon *pChargeupWeapon = dynamic_cast< ITFChargeUpWeapon *>( pWpn );
if ( !pWpn || !pChargeupWeapon )
if ( !pWpn || !pChargeupWeapon || !m_pChargeMeter || !pChargeupWeapon->GetChargeMaxTime() )
return;
if ( m_pChargeMeter )
{
float flChargeMaxTime = pChargeupWeapon->GetChargeMaxTime();
if ( flChargeMaxTime != 0 )
{
float flChargeBeginTime = pChargeupWeapon->GetChargeBeginTime();
if ( flChargeBeginTime > 0 )
{
float flTimeCharged = MAX( 0, gpGlobals->curtime - flChargeBeginTime );
flTimeCharged = MIN( flTimeCharged, flChargeMaxTime );
float flPercentCharged = MIN( 1.0, flTimeCharged / flChargeMaxTime );
m_pChargeMeter->SetProgress( flPercentCharged );
}
else
{
m_pChargeMeter->SetProgress( 0.0f );
}
}
}
}
m_pChargeMeter->SetProgress( pChargeupWeapon->GetPercentProgress() );
}

View file

@ -2462,6 +2462,31 @@ void CTFWeaponBase::ItemPostFrame( void )
{
FireFullClipAtOnce();
}
#ifdef CLIENT_DLL
ITFChargeUpWeapon *pChargeupWeapon = dynamic_cast< ITFChargeUpWeapon *>( this );
if ( pChargeupWeapon && pChargeupWeapon->CanCharge() )
{
float flChargeMaxTime = pChargeupWeapon->GetChargeMaxTime();
if ( flChargeMaxTime != 0 )
{
float flChargeBeginTime = pChargeupWeapon->GetChargeBeginTime();
if ( flChargeBeginTime > 0 )
{
float flTimeCharged = MAX( 0, gpGlobals->curtime - flChargeBeginTime );
float flPercentCharged = MIN( 1.0, flTimeCharged / flChargeMaxTime );
pChargeupWeapon->SetPercentProgress( flPercentCharged );
}
else
{
pChargeupWeapon->SetPercentProgress( 0.f );
}
}
}
#endif
}

View file

@ -118,6 +118,14 @@ public:
{
return ( gpGlobals->curtime - GetChargeBeginTime() ) / GetChargeMaxTime();
}
#ifdef CLIENT_DLL
void SetPercentProgress( float flPercentProgress ) { m_flPercentProgress = flPercentProgress; };
float GetPercentProgress( void ) { return m_flPercentProgress; };
private:
float m_flPercentProgress = 0;
#endif
};
class CTraceFilterIgnoreTeammates : public CTraceFilterSimple