//----------------------------------------------------------------------------- // Super-powers the entities //----------------------------------------------------------------------------- void CTriggerSuperArmor::RechargeThink() { Assert( m_hTouchingEntities.Count() == 1 ); for ( int i = m_hTouchingEntities.Count(); --i >= 0; ) { CBasePlayer *pPlayer = assert_cast<CBasePlayer*>( m_hTouchingEntities[i].Get() ); if (( pPlayer->ArmorValue() < MAX_SUPER_ARMOR ) || ( pPlayer->GetHealth() < 100 )) { pPlayer->TakeHealth( 5, DMG_GENERIC ); pPlayer->IncrementArmorValue( 15, MAX_SUPER_ARMOR ); if ( pPlayer->ArmorValue() >= MAX_SUPER_ARMOR ) { pPlayer->EmitSound( "TriggerSuperArmor.DoneCharging" ); StopLoopingSounds(); } else { if ( m_flLoopingSoundTime < gpGlobals->curtime ) { StartLoopingSounds( m_hTouchingEntities[i] ); } } } } SetContextThink( &CTriggerSuperArmor::RechargeThink, gpGlobals->curtime + 0.1f, s_pRechargeThinkContext ); }
void CNewRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // if it's not a player, ignore if ( !pActivator || !pActivator->IsPlayer() ) return; CBasePlayer *pPlayer = static_cast<CBasePlayer *>(pActivator); // Reset to a state of continuous use. m_iCaps = FCAP_CONTINUOUS_USE; if ( m_iOn ) { float flCharges = CHARGES_PER_SECOND; float flCalls = CALLS_PER_SECOND; if ( HasSpawnFlags( SF_CITADEL_RECHARGER ) ) flCharges = CITADEL_CHARGES_PER_SECOND; m_flJuice -= flCharges / flCalls; StudioFrameAdvance(); } // Only usable if you have the HEV suit on if ( !pPlayer->IsSuitEquipped() ) { if (m_flSoundTime <= gpGlobals->curtime) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } // if there is no juice left, turn it off if ( m_iJuice <= 0 ) { // Start our deny animation over again ResetSequence( LookupSequence( "emptyclick" ) ); m_nState = 1; // Shut off Off(); // Play a deny sound if ( m_flSoundTime <= gpGlobals->curtime ) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } // Get our maximum armor value int nMaxArmor = 100; if ( HasSpawnFlags( SF_CITADEL_RECHARGER ) ) { nMaxArmor = sk_suitcharger_citadel_maxarmor.GetInt(); } int nIncrementArmor = 1; // The citadel charger gives more per charge and also gives health if ( HasSpawnFlags( SF_CITADEL_RECHARGER ) ) { nIncrementArmor = 10; #ifdef HL2MP nIncrementArmor = 2; #endif // Also give health for the citadel version. if ( pActivator->GetHealth() < pActivator->GetMaxHealth() && m_flNextCharge < gpGlobals->curtime ) { pActivator->TakeHealth( 5, DMG_GENERIC ); } } // If we're over our limit, debounce our keys if ( pPlayer->ArmorValue() >= nMaxArmor) { // Citadel charger must also be at max health if ( !HasSpawnFlags(SF_CITADEL_RECHARGER) || ( HasSpawnFlags( SF_CITADEL_RECHARGER ) && pActivator->GetHealth() >= pActivator->GetMaxHealth() ) ) { // Make the user re-use me to get started drawing health. pPlayer->m_afButtonPressed &= ~IN_USE; m_iCaps = FCAP_IMPULSE_USE; EmitSound( "SuitRecharge.Deny" ); return; } } // This is bumped out if used within the time period SetNextThink( gpGlobals->curtime + CHARGE_RATE ); SetThink( &CNewRecharge::Off ); // Time to recharge yet? if ( m_flNextCharge >= gpGlobals->curtime ) return; // Play the on sound or the looping charging sound if ( !m_iOn ) { m_iOn++; EmitSound( "SuitRecharge.Start" ); m_flSoundTime = 0.56 + gpGlobals->curtime; m_OnPlayerUse.FireOutput( pActivator, this ); } if ((m_iOn == 1) && (m_flSoundTime <= gpGlobals->curtime)) { m_iOn++; CPASAttenuationFilter filter( this, "SuitRecharge.ChargingLoop" ); filter.MakeReliable(); EmitSound( filter, entindex(), "SuitRecharge.ChargingLoop" ); } // Give armor if we need it if ( pPlayer->ArmorValue() < nMaxArmor ) { UpdateJuice( m_iJuice - nIncrementArmor ); pPlayer->IncrementArmorValue( nIncrementArmor, nMaxArmor ); } // Send the output. float flRemaining = m_iJuice / MaxJuice(); m_OutRemainingCharge.Set(flRemaining, pActivator, this); // govern the rate of charge m_flNextCharge = gpGlobals->curtime + 0.1; }
void CRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // if it's not a player, ignore if ( !pActivator || !pActivator->IsPlayer() ) return; // Only usable if you have the HEV suit on if ( !((CBasePlayer *)pActivator)->IsSuitEquipped() ) { if (m_flSoundTime <= gpGlobals->curtime) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } // if there is no juice left, turn it off if (m_iJuice <= 0) { m_nState = 1; Off(); } // if the player doesn't have the suit, or there is no juice left, make the deny noise if ( m_iJuice <= 0 ) { if (m_flSoundTime <= gpGlobals->curtime) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } SetNextThink( gpGlobals->curtime + 0.25 ); SetThink(&CRecharge::Off); // Time to recharge yet? if (m_flNextCharge >= gpGlobals->curtime) return; // Make sure that we have a caller if (!pActivator) return; m_hActivator = pActivator; //only recharge the player if (!m_hActivator->IsPlayer() ) return; // Play the on sound or the looping charging sound if (!m_iOn) { m_iOn++; EmitSound( "SuitRecharge.Start" ); m_flSoundTime = 0.56 + gpGlobals->curtime; m_OnPlayerUse.FireOutput( pActivator, this ); } if ((m_iOn == 1) && (m_flSoundTime <= gpGlobals->curtime)) { m_iOn++; CPASAttenuationFilter filter( this, "SuitRecharge.ChargingLoop" ); filter.MakeReliable(); EmitSound( filter, entindex(), "SuitRecharge.ChargingLoop" ); } CBasePlayer *pl = (CBasePlayer *) m_hActivator.Get(); // charge the player int nMaxArmor = 100; int nIncrementArmor = 1; if ( HasSpawnFlags( SF_CITADEL_RECHARGER ) ) { nMaxArmor = sk_suitcharger_citadel_maxarmor.GetInt(); nIncrementArmor = 10; // Also give health for the citadel version. if( pActivator->GetHealth() < pActivator->GetMaxHealth() ) { pActivator->TakeHealth( 5, DMG_GENERIC ); } } if (pl->ArmorValue() < nMaxArmor) { UpdateJuice( m_iJuice - nIncrementArmor ); pl->IncrementArmorValue( nIncrementArmor, nMaxArmor ); } // Send the output. float flRemaining = m_iJuice / MaxJuice(); m_OutRemainingCharge.Set(flRemaining, pActivator, this); // govern the rate of charge m_flNextCharge = gpGlobals->curtime + 0.1; }
void CRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // if it's not a player, ignore if ( !pActivator->IsPlayer() ) return; // if there is no juice left, turn it off if (m_iJuice <= 0) { SetTextureFrameIndex( 1 ); Off(); } // if the player doesn't have the suit, or there is no juice left, make the deny noise if ( m_iJuice <= 0 ) { if (m_flSoundTime <= gpGlobals->curtime) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } SetNextThink( gpGlobals->curtime + 0.25 ); SetThink(Off); // Time to recharge yet? if (m_flNextCharge >= gpGlobals->curtime) return; // Make sure that we have a caller if (!pActivator) return; m_hActivator = pActivator; //only recharge the player if (!m_hActivator->IsPlayer() ) return; // Play the on sound or the looping charging sound if (!m_iOn) { m_iOn++; EmitSound( "SuitRecharge.Start" ); m_flSoundTime = 0.56 + gpGlobals->curtime; } if ((m_iOn == 1) && (m_flSoundTime <= gpGlobals->curtime)) { m_iOn++; CPASAttenuationFilter filter( this, "SuitRecharge.ChargingLoop" ); filter.MakeReliable(); EmitSound( filter, entindex(), "SuitRecharge.ChargingLoop" ); } CBasePlayer *pl = (CBasePlayer *) m_hActivator.Get(); // charge the player if (pl->ArmorValue() < 100) { m_iJuice--; pl->IncrementArmorValue( 1, 100 ); } // Send the output. float flRemaining = m_iJuice / sk_suitcharger.GetFloat(); m_OutRemainingCharge.Set(flRemaining, pActivator, this); // govern the rate of charge m_flNextCharge = gpGlobals->curtime + 0.1; }
void CRecharge::Use( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) { // Make sure that we have a caller if (!pActivator) return; // if it's not a player, ignore if ( !pActivator->IsPlayer() ) return; CBasePlayer *pPlayer = dynamic_cast<CBasePlayer *>( pActivator ); if ( pPlayer == NULL ) return; // Reset to a state of continuous use. m_iCaps = FCAP_CONTINUOUS_USE; // if there is no juice left, turn it off if (m_iJuice <= 0) { SetTextureFrameIndex( 1 ); Off(); } // if the player doesn't have the suit, or there is no juice left, make the deny noise if ( m_iJuice <= 0 ) { if (m_flSoundTime <= gpGlobals->curtime) { m_flSoundTime = gpGlobals->curtime + 0.62; EmitSound( "SuitRecharge.Deny" ); } return; } // If we're over our limit, debounce our keys if ( pPlayer->ArmorValue() >= HL1_MAX_ARMOR) { // Make the user re-use me to get started drawing health. pPlayer->m_afButtonPressed &= ~IN_USE; m_iCaps = FCAP_IMPULSE_USE; EmitSound( "SuitRecharge.Deny" ); return; } SetNextThink( gpGlobals->curtime + 0.25 ); SetThink(&CRecharge::Off); // Time to recharge yet? if (m_flNextCharge >= gpGlobals->curtime) return; m_hActivator = pActivator; // Play the on sound or the looping charging sound if (!m_iOn) { m_iOn++; EmitSound( "SuitRecharge.Start" ); m_flSoundTime = 0.56 + gpGlobals->curtime; } if ((m_iOn == 1) && (m_flSoundTime <= gpGlobals->curtime)) { m_iOn++; CPASAttenuationFilter filter( this, "SuitRecharge.ChargingLoop" ); filter.MakeReliable(); EmitSound( filter, entindex(), "SuitRecharge.ChargingLoop" ); } CBasePlayer *pl = (CBasePlayer *) m_hActivator.Get(); // charge the player if (pl->ArmorValue() < HL1_MAX_ARMOR) { m_iJuice--; pl->IncrementArmorValue( 1, HL1_MAX_ARMOR ); } // Send the output. float flRemaining = m_iJuice / sk_suitcharger.GetFloat(); m_OutRemainingCharge.Set(flRemaining, pActivator, this); // govern the rate of charge m_flNextCharge = gpGlobals->curtime + 0.1; }