这篇教程C++ GetFireRate函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中GetFireRate函数的典型用法代码示例。如果您正苦于以下问题:C++ GetFireRate函数的具体用法?C++ GetFireRate怎么用?C++ GetFireRate使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了GetFireRate函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: clamp//-----------------------------------------------------------------------------// Purpose: Make enough sound events to fill the estimated think interval// returns: number of shots needed//-----------------------------------------------------------------------------int CHLMachineGun::WeaponSoundRealtime( WeaponSound_t shoot_type ){ int numBullets = 0; // ran out of time, clamp to current if (m_flNextSoundTime < gpGlobals->curtime) { m_flNextSoundTime = gpGlobals->curtime; } // make enough sound events to fill up the next estimated think interval float dt = clamp( m_flAnimTime - m_flPrevAnimTime, 0, 0.2 ); if (m_flNextSoundTime < gpGlobals->curtime + dt) { WeaponSound( SINGLE_NPC, m_flNextSoundTime ); m_flNextSoundTime += GetFireRate(); numBullets++; } if (m_flNextSoundTime < gpGlobals->curtime + dt) { WeaponSound( SINGLE_NPC, m_flNextSoundTime ); m_flNextSoundTime += GetFireRate(); numBullets++; } return numBullets;}
开发者ID:Adidasman1,项目名称:source-sdk-2013,代码行数:31,
示例2: WeaponSound//-----------------------------------------------------------------------------// Purpose: //-----------------------------------------------------------------------------void CWeaponCombatLaserRifle::PrimaryAttack( void ){ CBaseTFPlayer *pPlayer = (CBaseTFPlayer*)GetOwner(); if (!pPlayer) return; WeaponSound(SINGLE); // Fire the bullets Vector vecSrc = pPlayer->Weapon_ShootPosition( ); Vector vecAiming; pPlayer->EyeVectors( &vecAiming ); PlayAttackAnimation( GetPrimaryAttackActivity() ); // Reduce the spread if the player's ducking Vector vecSpread = GetBulletSpread(); vecSpread *= m_flInaccuracy; TFGameRules()->FireBullets( CTakeDamageInfo( this, pPlayer, weapon_combat_laserrifle_damage.GetFloat(), DMG_PLASMA), 1, vecSrc, vecAiming, vecSpread, weapon_combat_laserrifle_range.GetFloat(), m_iPrimaryAmmoType, 0, entindex(), 0 ); m_flInaccuracy += 0.3; m_flInaccuracy = clamp(m_flInaccuracy, 0, 1); m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_iClip1 = m_iClip1 - 1;}
开发者ID:Axitonium,项目名称:SourceEngine2007,代码行数:31,
示例3: ToBasePlayervoid CWeaponStickyLauncher::PrimaryAttack( void ){ // Only the player fires this way so we can cast CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return; m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); WeaponSound(SINGLE); pPlayer->m_fEffects |= EF_MUZZLEFLASH; SendWeaponAnim( GetPrimaryAttackActivity() ); // player "shoot" animation pPlayer->SetAnimation( PLAYER_ATTACK1 ); Vector vecSrc = pPlayer->Weapon_ShootPosition( ); Vector vecAiming = pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); m_iClip1 = m_iClip1 - 1; LaunchStickyBomb( pPlayer, vecSrc, vecAiming ); AddViewKick();}
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:25,
示例4: ToBasePlayervoid CWeaponCombatKnife::SecondaryAttack( void ){ CBasePlayer* pOwner = ToBasePlayer( GetOwner() ); Assert( pOwner ); //Can't throw last knife if ( pOwner->GetAmmoCount(GetPrimaryAmmoType()) <= 0 ) { m_flNextSecondaryAttack = gpGlobals->curtime + 0.1f; return; } #ifndef CLIENT_DLL CDHLProjectile* pKnife = (CDHLProjectile*)(CreateEntityByName( "dhl_projectile" )); Assert( pKnife ); pKnife->SetOwnerEntity( pOwner ); pKnife->Spawn(); //This is just an easy way of getting an eye vector, there isn't really any autoaim in MP Vector vecDir = pOwner->GetAutoaimVector( AUTOAIM_SCALE_DEFAULT ); //HACK - move it forward so it doesn't appear to spawn inside the player's face Vector vecSrc = pOwner->Weapon_ShootPosition() + ( vecDir * 6.0f ); pKnife->Fire( vecSrc, vecDir * 1232.0f /*70mph*/, GetHL2MPWpnData().m_iPlayerDamage, this, pOwner, -1 ); if ( dhl_flamingknives.GetBool() ) pKnife->Ignite( 30.0f, false ); #endif //Make sure this is done after the call to Fire() int iAmmo = pOwner->GetAmmoCount(GetPrimaryAmmoType()); pOwner->RemoveAmmo( 1, GetPrimaryAmmoType() ); if ( iAmmo <= 0 ) { AddEffects( EF_NODRAW ); #ifndef CLIENT_DLL pOwner->Weapon_Drop( this, NULL, NULL ); Remove(); #endif } else { SendWeaponAnim( ACT_VM_THROW ); //Need to be able to predict this pOwner->SetAnimation( PLAYER_ATTACK1 ); //Use the primary attack anim for now ToHL2MPPlayer(pOwner)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); m_flNextSecondaryAttack = gpGlobals->curtime + GetFireRate(); } /*IPhysicsObject* pPhysObj = VPhysicsGetObject(); if ( pPhysObj ) { pPhysObj->Sleep(); pPhysObj->EnableMotion( false ); pPhysObj->EnableCollisions( false ); } m_bAllowPickup = false;*/}
开发者ID:dreckard,项目名称:dhl2,代码行数:60,
示例5: GetFireRate//-----------------------------------------------------------------------------// Purpose: Place the combat object//-----------------------------------------------------------------------------void CWeaponBaseCombatObject::PrimaryAttack( void ){ CBaseTFPlayer *pPlayer = dynamic_cast<CBaseTFPlayer*>((CBaseEntity*)GetOwner()); if ( !pPlayer ) return; if ( pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) return; m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); Vector vecPlaceOrigin; QAngle angPlaceAngles; if ( GetPlacePosition( pPlayer, &vecPlaceOrigin, &angPlaceAngles ) == false ) { WeaponSound( DOUBLE ); return; } // Place the combat object PlaceCombatObject( pPlayer, vecPlaceOrigin, angPlaceAngles ); WeaponSound( SINGLE ); pPlayer->RemoveAmmo( 1, m_iPrimaryAmmoType ); // If I'm now out of ammo, switch away if ( !HasPrimaryAmmo() ) { pPlayer->SelectLastItem(); }}
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:33,
示例6: ToBasePlayer//-----------------------------------------------------------------------------// Purpose: Spawn a grenade with no velocity and a timer of 0//-----------------------------------------------------------------------------void CGEWeaponGrenade::ExplodeInHand( void ){ CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return;#ifndef CLIENT_DLL Vector vecEye = pPlayer->EyePosition(); CGEGrenade *pGrenade = (CGEGrenade *)CBaseEntity::Create( "npc_grenade", vecEye, vec3_angle, NULL ); if ( pGrenade ) { pGrenade->SetThrower( GetOwner() ); pGrenade->SetOwnerEntity( GetOwner() ); pGrenade->SetSourceWeapon(this); pGrenade->SetVelocity( 0, NULL ); pGrenade->m_bHitSomething = true; //I'm not gonna just give it to you! pGrenade->SetDamage( GetGEWpnData().m_iDamage ); pGrenade->SetDamageRadius( GetGEWpnData().m_flDamageRadius ); pGrenade->SetTimer( 0 ); }#endif m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); // Remove the grenade from our ammo pool pPlayer->RemoveAmmo( 1, m_iPrimaryAmmoType );}
开发者ID:Entropy-Soldier,项目名称:ges-legacy-code,代码行数:34,
示例7: OnSerpentinevoid Sinkhole_Top::OnSerpentine(DispenseList& dispenseList){ for (auto& throwableQuantity : dispenseList) { int amount = throwableQuantity->GetQuantity(); int total = amount; // Shoot a number proportional to the total number being shot out. This will reduce times for large amounts of coins to a maximum number of shot const int maxPerShot = (amount / k_MultishotQuantityThreshold) + 1; int launchAmount = amount; if (launchAmount > maxPerShot) launchAmount = maxPerShot; int slotNum = 0; int n = m_SingleShotTicker/GetFireRate() % (12*2); slotNum = (n < 12) ? n : ((12*2)-1) - n; Position startOffset = Position(2*TILE_SIZE, 3*TILE_SIZE); Position start = Position(x + startOffset.x, y + startOffset.y); Position launchPos(start.x + slotNum*TILE_SIZE/2, start.y); throwableQuantity->Throw(launchPos, std::bind(&Sinkhole_Top::GetLaunchTo, this), launchAmount); amount -= launchAmount; }}
开发者ID:JordanBell,项目名称:Cash-Grab,代码行数:30,
示例8: ToBasePlayer//-----------------------------------------------------------------------------// Purpose: Allows firing as fast as button is pressed//-----------------------------------------------------------------------------void CWeaponMosinNagant::ItemPostFrame( void ){ BaseClass::ItemPostFrame(); if ( m_bInReload ) return; CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner == NULL ) return; if ( pOwner->m_nButtons & IN_ATTACK2 ) { m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); } if ( ( pOwner->m_nButtons & IN_ATTACK ) && ( m_flNextPrimaryAttack < gpGlobals->curtime ) && ( m_iClip1 <= 0 ) ) { DryFire(); }#ifdef CLIENT_DLL if ( m_bInZoom ) //Can't let them switch to third person { if ( ::input->CAM_IsThirdPerson() ) { ::input->CAM_ToFirstPerson(); m_bWantsThirdPerson = !m_bWantsThirdPerson; } }#endif}
开发者ID:dreckard,项目名称:dhl2,代码行数:36,
示例9: switch//-----------------------------------------------------------------------------// Purpose: //////-----------------------------------------------------------------------------void CHLSelectFireMachineGun::PrimaryAttack( void ){ if (m_bFireOnEmpty) { return; } switch( m_iFireMode ) { case FIREMODE_FULLAUTO: BaseClass::PrimaryAttack(); // Msg("%.3f/n", m_flNextPrimaryAttack.Get() ); SetWeaponIdleTime( gpGlobals->curtime + 3.0f ); break; case FIREMODE_3RNDBURST: m_iBurstSize = GetBurstSize(); // Call the think function directly so that the first round gets fired immediately. BurstThink(); SetThink( &CHLSelectFireMachineGun::BurstThink ); m_flNextPrimaryAttack = gpGlobals->curtime + GetBurstCycleRate(); m_flNextSecondaryAttack = gpGlobals->curtime + GetBurstCycleRate(); // Pick up the rest of the burst through the think function. SetNextThink( gpGlobals->curtime + GetFireRate() ); break; } CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner ) { m_iPrimaryAttacks++; gamestats->Event_WeaponFired( pOwner, true, GetClassname() ); }}
开发者ID:Adidasman1,项目名称:source-sdk-2013,代码行数:40,
示例10: WeaponSound//-----------------------------------------------------------------------------// Purpose: //-----------------------------------------------------------------------------void CWeaponCombatPlasmaGrenadeLauncher::PrimaryAttack( void ){ CBaseTFPlayer *pPlayer = (CBaseTFPlayer*)GetOwner(); if (!pPlayer) return; WeaponSound(SINGLE); // Fire the bullets Vector vecSrc = pPlayer->Weapon_ShootPosition( ); PlayAttackAnimation( GetPrimaryAttackActivity() ); // Launch the grenade Vector vecForward; pPlayer->EyeVectors( &vecForward ); Vector vecOrigin = pPlayer->EyePosition(); vecOrigin += (vecForward);#if !defined( CLIENT_DLL ) float flSpeed = 1200; CGrenadeAntiPersonnel* pGrenade = CGrenadeAntiPersonnel::Create(vecOrigin, vecForward * flSpeed, pPlayer ); pGrenade->SetModel( "models/weapons/w_grenade.mdl" ); pGrenade->SetBounceSound( "PlasmaGrenade.Bounce" ); pGrenade->SetDamage( weapon_combat_plasmagrenadelauncher_damage.GetFloat() ); pGrenade->SetDamageRadius( weapon_combat_plasmagrenadelauncher_radius.GetFloat() ); pGrenade->SetExplodeOnContact( true );#endif m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_iClip1 = m_iClip1 - 1;}
开发者ID:Axitonium,项目名称:SourceEngine2007,代码行数:36,
示例11: GetCommandervoid CASW_Weapon_Freeze_Grenades::DelayedAttack( void ){ m_bShotDelayed = false; CASW_Player *pPlayer = GetCommander(); if ( !pPlayer ) return; CASW_Marine *pMarine = GetMarine(); if ( !pMarine || pMarine->GetWaterLevel() == 3 ) return; #ifndef CLIENT_DLL Vector vecSrc = pMarine->GetOffhandThrowSource(); Vector vecDest = pPlayer->GetCrosshairTracePos(); Vector newVel = UTIL_LaunchVector( vecSrc, vecDest, GetThrowGravity() ) * 28.0f; float fGrenadeRadius = GetBoomRadius( pMarine ); if (asw_debug_marine_damage.GetBool()) { Msg( "Freeze grenade radius = %f /n", fGrenadeRadius ); } pMarine->GetMarineSpeech()->Chatter( CHATTER_GRENADE ); // freeze aliens completely, plus the freeze duration float flFreezeAmount = 1.0f + MarineSkills()->GetSkillBasedValueByMarine(pMarine, ASW_MARINE_SKILL_GRENADES, ASW_MARINE_SUBSKILL_GRENADE_FREEZE_DURATION); if (ASWGameRules()) ASWGameRules()->m_fLastFireTime = gpGlobals->curtime; CASW_Grenade_Freeze *pGrenade = CASW_Grenade_Freeze::Freeze_Grenade_Create( 1.0f, flFreezeAmount, fGrenadeRadius, 0, vecSrc, pMarine->EyeAngles(), newVel, AngularImpulse(0,0,0), pMarine, this ); if ( pGrenade ) { pGrenade->SetGravity( GetThrowGravity() ); pGrenade->SetExplodeOnWorldContact( true ); } #endif // decrement ammo m_iClip1 -= 1;#ifndef CLIENT_DLL DestroyIfEmpty( true );#endif m_flSoonestPrimaryAttack = gpGlobals->curtime + ASW_FLARES_FASTEST_REFIRE_TIME; if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime;}
开发者ID:detoxhby,项目名称:SwarmDirector2,代码行数:57,
示例12: GetFireRatevoid CWeaponUzi::PrimaryAttack( void ){ BaseClass::PrimaryAttack(); m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); //BP muzzlefash de la mort /*Vector vecShootOrigin; QAngle angShootDir; GetAttachment(LookupAttachment("muzzle"), vecShootOrigin, angShootDir); DispatchParticleEffect("muzzleflash_final_uzi", vecShootOrigin, angShootDir);*/ /*if(!GetOwner()->IsAlive()) ToBasePlayer( GetOwner() )->DoMuzzleFlash();*/ #define EASY_DAMPEN 0.5f #define MAX_VERTICAL_KICK 1.0f //Degrees #define SLIDE_LIMIT 2.0f //Seconds //Get the view kick CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if ( pPlayer == NULL ) return; //pPlayer->DoMuzzleFlash(); Vector vForward, vRight, vUp; pPlayer->EyeVectors( &vForward, &vRight, &vUp ); Vector vecShootOrigin; QAngle angShootDir; GetAttachment(LookupAttachment("muzzle"), vecShootOrigin, angShootDir);#ifdef CLIENT_DLL Vector muzzlePoint = pPlayer->Weapon_ShootPosition() + vForward * 18.0f + vRight * 6.0f + vUp * -3.0f;#else Vector muzzlePoint = vecShootOrigin;#endif DispatchParticleEffect("muzzleflash_final_uzi", muzzlePoint, angShootDir);#ifdef CLIENT_DLL dlight_t *el = effects->CL_AllocDlight( LIGHT_INDEX_MUZZLEFLASH + index ); el->origin = muzzlePoint; el->radius = random->RandomInt( 32, 64 ); el->decay = el->radius / 0.05f; el->die = gpGlobals->curtime + 0.2f; el->color.r = 255; el->color.g = 192; el->color.b = 64; el->color.exponent = 5;#endif DoMachineGunKick( pPlayer, EASY_DAMPEN, MAX_VERTICAL_KICK, m_fFireDuration, SLIDE_LIMIT );}
开发者ID:Orygin,项目名称:BisounoursParty,代码行数:51,
示例13: GetCommandervoid CASW_Weapon_Bait::DelayedAttack(){ m_bShotDelayed = false; CASW_Player *pPlayer = GetCommander(); if ( !pPlayer ) return; CASW_Marine *pMarine = GetMarine(); if ( !pMarine || pMarine->GetWaterLevel() == 3 ) return; // sets the animation on the marine holding this weapon //pMarine->SetAnimation( PLAYER_ATTACK1 );#ifndef CLIENT_DLL Vector vecSrc = pMarine->GetOffhandThrowSource(); AngularImpulse rotSpeed(0,0,720); Vector vecDest = pPlayer->GetCrosshairTracePos(); Vector newVel = UTIL_LaunchVector( vecSrc, vecDest, GetThrowGravity() ) * 28.0f; CASW_Bait *pEnt = CASW_Bait::Bait_Create( vecSrc, QAngle(90,0,0), newVel, rotSpeed, pMarine ); if ( pEnt ) { float flDuration = pEnt->GetDuration(); //CALL_ATTRIB_HOOK_FLOAT( flDuration, mod_duration ); pEnt->SetDuration( flDuration ); pEnt->SetGravity( GetThrowGravity() ); }#endif // decrement ammo m_iClip1 -= 1;#ifndef CLIENT_DLL DestroyIfEmpty( true );#endif m_flSoonestPrimaryAttack = gpGlobals->curtime + ASW_BAIT_FASTEST_REFIRE_TIME; if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime;}
开发者ID:BenLubar,项目名称:SwarmDirector2,代码行数:46,
示例14: ToBasePlayervoid CWeaponSAA::ItemPostFrame( void ){ BaseClass::ItemPostFrame(); if ( m_bInReload ) return; CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner == NULL ) return; if ( pOwner->m_nButtons & IN_ATTACK2 ) m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); if ( ( pOwner->m_nButtons & IN_ATTACK ) && ( m_flNextPrimaryAttack < gpGlobals->curtime ) && ( m_iClip1 <= 0 ) ) DryFire();}
开发者ID:dreckard,项目名称:dhl2,代码行数:17,
示例15: SetThink//-----------------------------------------------------------------------------// Purpose: //////-----------------------------------------------------------------------------void CHLSelectFireMachineGun::BurstThink( void ){ CHLMachineGun::PrimaryAttack(); m_iBurstSize--; if( m_iBurstSize == 0 ) { // The burst is over! SetThink(NULL); // idle immediately to stop the firing animation SetWeaponIdleTime( gpGlobals->curtime ); return; } SetNextThink( gpGlobals->curtime + GetFireRate() );}
开发者ID:Adidasman1,项目名称:source-sdk-2013,代码行数:23,
示例16: ToBasePlayervoid CWeaponShotgun::PrimaryAttack( void ){ // Only the player fires this way so we can cast CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return; // MUST call sound before removing a round from the clip of a CMachineGun WeaponSound(SINGLE); pPlayer->DoMuzzleFlash(); SendWeaponAnim( ACT_VM_PRIMARYATTACK ); ToGEPlayer(pPlayer)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); // Don't fire again until our ROF expires m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_flSoonestPrimaryAttack = gpGlobals->curtime + GetClickFireRate(); m_iClip1 -= 1; // player "shoot" animation pPlayer->SetAnimation( PLAYER_ATTACK1 ); Vector vecSrc = pPlayer->Weapon_ShootPosition( ); Vector vecAiming = pPlayer->GetAutoaimVector( AUTOAIM_10DEGREES ); // FireBulletsInfo_t info( 5, vecSrc, vecAiming, pGEPlayer->GetAttackSpread(this), MAX_TRACE_LENGTH, m_iPrimaryAmmoType );// info.m_pAttacker = pPlayer; // Knock the player's view around AddViewKick(); RecordShotFired(); // Fire the bullets, and force the first shot to be perfectly accuracy PrepareFireBullets(5, pPlayer, vecSrc, vecAiming, true); if (!m_iClip1 && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0) { // HEV suit - indicate out of ammo condition pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); }}
开发者ID:djoslin0,项目名称:ges-legacy-code,代码行数:44,
示例17: WeaponSound//-----------------------------------------------------------------------------// Purpose: Firing//-----------------------------------------------------------------------------void CWeaponRocketLauncher::PrimaryAttack( void ){ CBaseTFPlayer *pPlayer = ( CBaseTFPlayer* )GetOwner(); if ( !pPlayer ) return; if ( !ComputeEMPFireState() ) return; // Weapon "Fire" sound. WeaponSound( SINGLE ); // Play the attack animation (need one for rocket launcher - deploy?) PlayAttackAnimation( GetPrimaryAttackActivity() ); // Fire the rocket (Get the position and angles). Vector vecFirePos = pPlayer->Weapon_ShootPosition(); Vector vecFireAng; pPlayer->EyeVectors( &vecFireAng ); // Shift it down a bit so the firer can see it Vector vecRight; AngleVectors( pPlayer->EyeAngles() + pPlayer->m_Local.m_vecPunchAngle, NULL, &vecRight, NULL ); vecFirePos += Vector( 0, 0, -8 ) + vecRight * 12; // Create the rocket.#if !defined( CLIENT_DLL ) CWeaponGrenadeRocket *pRocket = CWeaponGrenadeRocket::Create( vecFirePos, vecFireAng, weapon_rocket_launcher_range.GetFloat(), pPlayer );#else CWeaponGrenadeRocket *pRocket = CWeaponGrenadeRocket::Create( vecFirePos, vecFireAng, 0, pPlayer );#endif if ( pRocket ) { pRocket->SetRealOwner( pPlayer );#if !defined( CLIENT_DLL ) pRocket->SetDamage( weapon_rocket_launcher_damage.GetFloat() );#endif } // Essentially you are done! m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_iClip1 = m_iClip1 - 1;}
开发者ID:RaisingTheDerp,项目名称:raisingthebar,代码行数:46,
示例18: WeaponSound//-----------------------------------------------------------------------------// Purpose: //-----------------------------------------------------------------------------void CWeaponCombat_ChargeablePlasma::PrimaryAttack( void ){ CBaseTFPlayer *pPlayer = (CBaseTFPlayer*)GetOwner(); if (!pPlayer) return; WeaponSound(SINGLE); // Fire the bullets Vector vecSrc = pPlayer->Weapon_ShootPosition( ); Vector vecAiming; pPlayer->EyeVectors( &vecAiming ); // If we already have a lock target from button down, see if we shouldn't try and get a new one // Only do this is the button was released immediately if ( !m_hLockTarget || ( m_flLockedAt < gpGlobals->curtime ) ) { m_hLockTarget = GetLockTarget(); } PlayAttackAnimation( GetPrimaryAttackActivity() ); // Shift it down a bit so the firer can see it Vector right; AngleVectors( pPlayer->EyeAngles() + pPlayer->m_Local.m_vecPunchAngle, NULL, &right, NULL ); Vector vecStartSpot = vecSrc + Vector(0,0,-8) + right * 12; CGuidedPlasma *pShot = CGuidedPlasma::Create(vecStartSpot, vecAiming, m_hLockTarget, m_vecTargetOffset, pPlayer); // Set it's charged power level if (m_bHasCharge) m_flPower = min( MAX_CHARGED_TIME, gpGlobals->curtime - m_flChargeStartTime ); else m_flPower = 0.0f; float flDamageMult = RemapVal( m_flPower, 0, MAX_CHARGED_TIME, 1.0, MAX_CHARGED_POWER ); pShot->SetPowerLevel( flDamageMult ); m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_iClip1 = m_iClip1 - 1; m_hLockTarget = NULL;}
开发者ID:Axitonium,项目名称:SourceEngine2007,代码行数:45,
示例19: ToBasePlayer//-----------------------------------------------------------------------------// Purpose: //-----------------------------------------------------------------------------void CWeaponGauss::PrimaryAttack( void ){ CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( pOwner == NULL ) return; WeaponSound( SINGLE ); WeaponSound( SPECIAL2 ); SendWeaponAnim( ACT_VM_PRIMARYATTACK ); m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); pOwner->RemoveAmmo( 1, m_iPrimaryAmmoType ); Fire(); m_flCoilMaxVelocity = 0.0f; m_flCoilVelocity = 1000.0f;return;}
开发者ID:Sub-Zero1324,项目名称:HL2-DM-Gauss-Gun-Code,代码行数:24,
示例20: ToBasePlayer//-----------------------------------------------------------------------------// Purpose: Prepare the launcher to fire//-----------------------------------------------------------------------------void CGEWeaponRocketLauncher::PrimaryAttack( void ){ CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return; // If my clip is empty (and I use clips) start reload if ( UsesClipsForAmmo1() && !m_iClip1 ) { Reload(); return; } // Bring us back to center view pPlayer->ViewPunchReset(); // Note that this is a primary attack and prepare the grenade attack to pause. m_bPreLaunch = true; SendWeaponAnim( GetPrimaryAttackActivity() ); ToGEPlayer(pPlayer)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); m_flRocketSpawnTime = gpGlobals->curtime + GetFireDelay(); m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate();}
开发者ID:Entropy-Soldier,项目名称:ges-legacy-code,代码行数:27,
示例21: GetMarinevoid CASW_Weapon_Hornet_Barrage::PrimaryAttack(){ CASW_Marine *pMarine = GetMarine(); if ( !pMarine ) return; CASW_Player *pPlayer = GetCommander(); if ( !pPlayer ) return; if ( m_iRocketsToFire.Get() > 0 ) return; // mine weapon is lost when all mines are gone if ( UsesClipsForAmmo1() && !m_iClip1 ) { return; } SetRocketsToFire(); m_flFireInterval = GetRocketFireInterval(); m_flNextLaunchTime = gpGlobals->curtime; const char *pszSound = "ASW_Hornet_Barrage.Fire"; CPASAttenuationFilter filter( this, pszSound ); if ( IsPredicted() && CBaseEntity::GetPredictionPlayer() ) { filter.UsePredictionRules(); } EmitSound( filter, entindex(), pszSound ); // decrement ammo m_iClip1 -= 1; m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate();}
开发者ID:BenLubar,项目名称:SwarmDirector2,代码行数:36,
示例22: ToBasePlayer//-----------------------------------------------------------------------------// Purpose: //////-----------------------------------------------------------------------------void CHLMachineGun::PrimaryAttack( void ){ // Only the player fires this way so we can cast CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return; // Abort here to handle burst and auto fire modes if ( (UsesClipsForAmmo1() && m_iClip1 == 0) || ( !UsesClipsForAmmo1() && !pPlayer->GetAmmoCount(m_iPrimaryAmmoType) ) ) return; m_nShotsFired++; pPlayer->DoMuzzleFlash(); // To make the firing framerate independent, we may have to fire more than one bullet here on low-framerate systems, // especially if the weapon we're firing has a really fast rate of fire. int iBulletsToFire = 0; float fireRate = GetFireRate(); // MUST call sound before removing a round from the clip of a CHLMachineGun while ( m_flNextPrimaryAttack <= gpGlobals->curtime ) { WeaponSound(SINGLE, m_flNextPrimaryAttack); m_flNextPrimaryAttack = m_flNextPrimaryAttack + fireRate; iBulletsToFire++; } // Make sure we don't fire more than the amount in the clip, if this weapon uses clips if ( UsesClipsForAmmo1() ) { if ( iBulletsToFire > m_iClip1 ) iBulletsToFire = m_iClip1; m_iClip1 -= iBulletsToFire; } m_iPrimaryAttacks++; gamestats->Event_WeaponFired( pPlayer, true, GetClassname() ); // Fire the bullets FireBulletsInfo_t info; info.m_iShots = iBulletsToFire; info.m_vecSrc = pPlayer->Weapon_ShootPosition( ); info.m_vecDirShooting = pPlayer->GetAutoaimVector( AUTOAIM_SCALE_DEFAULT ); info.m_vecSpread = pPlayer->GetAttackSpread( this ); info.m_flDistance = MAX_TRACE_LENGTH; info.m_iAmmoType = m_iPrimaryAmmoType; info.m_iTracerFreq = 2; FireBullets( info ); //Factor in the view kick AddViewKick(); CSoundEnt::InsertSound( SOUND_COMBAT, GetAbsOrigin(), SOUNDENT_VOLUME_MACHINEGUN, 0.2, pPlayer ); if (!m_iClip1 && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0) { // HEV suit - indicate out of ammo condition pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } SendWeaponAnim( GetPrimaryAttackActivity() ); pPlayer->SetAnimation( PLAYER_ATTACK1 ); // Register a muzzleflash for the AI pPlayer->SetMuzzleFlashTime( gpGlobals->curtime + 0.5 );}
开发者ID:Adidasman1,项目名称:source-sdk-2013,代码行数:72,
示例23: ToBasePlayer//------------------------------------------------------------------------------// Purpose : Starts the swing of the weapon and determines the animation// Input : bIsSecondary - is this a secondary attack?//------------------------------------------------------------------------------void CBaseHL2MPBludgeonWeapon::Swing( int bIsSecondary ){ trace_t traceHit; // Try a ray CBasePlayer *pOwner = ToBasePlayer( GetOwner() ); if ( !pOwner ) return; Vector swingStart = pOwner->Weapon_ShootPosition( ); Vector forward; pOwner->EyeVectors( &forward, NULL, NULL ); Vector swingEnd = swingStart + forward * GetRange(); UTIL_TraceLine( swingStart, swingEnd, MASK_SHOT_HULL, pOwner, COLLISION_GROUP_NONE, &traceHit ); Activity nHitActivity = ACT_VM_HITCENTER;#ifndef CLIENT_DLL // Like bullets, bludgeon traces have to trace against triggers. CTakeDamageInfo triggerInfo( GetOwner(), GetOwner(), GetDamageForActivity( nHitActivity ), DMG_CLUB ); TraceAttackToTriggers( triggerInfo, traceHit.startpos, traceHit.endpos, vec3_origin );#endif if ( traceHit.fraction == 1.0 ) { float bludgeonHullRadius = 1.732f * BLUDGEON_HULL_DIM; // hull is +/- 16, so use cuberoot of 2 to determine how big the hull is from center to the corner point // Back off by hull "radius" swingEnd -= forward * bludgeonHullRadius; UTIL_TraceHull( swingStart, swingEnd, g_bludgeonMins, g_bludgeonMaxs, MASK_SHOT_HULL, pOwner, COLLISION_GROUP_NONE, &traceHit ); if ( traceHit.fraction < 1.0 && traceHit.m_pEnt ) { Vector vecToTarget = traceHit.m_pEnt->GetAbsOrigin() - swingStart; VectorNormalize( vecToTarget ); float dot = vecToTarget.Dot( forward ); // YWB: Make sure they are sort of facing the guy at least... if ( dot < 0.70721f ) { // Force amiss traceHit.fraction = 1.0f; } else { nHitActivity = ChooseIntersectionPointAndActivity( traceHit, g_bludgeonMins, g_bludgeonMaxs, pOwner ); } } } WeaponSound( SINGLE ); // ------------------------- // Miss // ------------------------- if ( traceHit.fraction == 1.0f ) { nHitActivity = bIsSecondary ? ACT_VM_MISSCENTER2 : ACT_VM_MISSCENTER; // We want to test the first swing again Vector testEnd = swingStart + forward * GetRange(); // See if we happened to hit water ImpactWater( swingStart, testEnd ); } else { Hit( traceHit, nHitActivity ); } // Send the anim SendWeaponAnim( nHitActivity ); pOwner->SetAnimation( PLAYER_ATTACK1 ); ToHL2MPPlayer(pOwner)->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY ); //Setup our next attack times m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); m_flNextSecondaryAttack = gpGlobals->curtime + SequenceDuration();}
开发者ID:dreckard,项目名称:dhl2,代码行数:87,
示例24: GetCommandervoid CASW_Weapon_Buff_Grenade::PrimaryAttack( void ){ // Only the player fires this way so we can cast CASW_Player *pPlayer = GetCommander(); if (!pPlayer) return; CASW_Marine *pMarine = GetMarine();#ifndef CLIENT_DLL bool bThisActive = (pMarine && pMarine->GetActiveWeapon() == this);#endif // mine weapon is lost when all mines are gone if ( UsesClipsForAmmo1() && !m_iClip1 ) { //Reload();#ifndef CLIENT_DLL if (pMarine) { pMarine->Weapon_Detach(this); if (bThisActive) pMarine->SwitchToNextBestWeapon(NULL); } Kill();#endif return; } if ( !pMarine || pMarine->GetWaterLevel() == 3 ) return; // MUST call sound before removing a round from the clip of a CMachineGun //WeaponSound(SINGLE); // tell the marine to tell its weapon to draw the muzzle flash //pMarine->DoMuzzleFlash(); // sets the animation on the weapon model iteself SendWeaponAnim( GetPrimaryAttackActivity() ); //pMarine->DoAnimationEvent(PLAYERANIMEVENT_HEAL); // sets the animation on the marine holding this weapon //pMarine->SetAnimation( PLAYER_ATTACK1 );#ifndef CLIENT_DLL Vector vecSrc = pMarine->Weapon_ShootPosition( ); Vector vecAiming = pPlayer->GetAutoaimVectorForMarine(pMarine, GetAutoAimAmount(), GetVerticalAdjustOnlyAutoAimAmount()); // 45 degrees = 0.707106781187 if ( !pMarine->IsInhabited() && vecSrc.DistTo( pMarine->m_vecOffhandItemSpot ) < 150.0f ) { vecSrc.x = pMarine->m_vecOffhandItemSpot.x; vecSrc.y = pMarine->m_vecOffhandItemSpot.y; vecSrc.z += 50.0f; } QAngle ang = pPlayer->EyeAngles(); ang.x = 0; ang.z = 0; CShotManipulator Manipulator( vecAiming ); AngularImpulse rotSpeed(0,0,720); // create a pellet at some random spread direction Vector newVel = Manipulator.ApplySpread(GetBulletSpread()); newVel *= ASW_MINE_VELOCITY; if ( !pMarine->IsInhabited() ) { newVel = vec3_origin; } float flRadius = asw_damage_amp_radius.GetFloat(); float flDuration = asw_damage_amp_duration.GetFloat(); CASW_BuffGrenade_Projectile::Grenade_Projectile_Create( vecSrc, ang, newVel, rotSpeed, pMarine, flRadius, flDuration ); pMarine->OnWeaponFired( this, 1 ); pMarine->GetMarineSpeech()->Chatter(CHATTER_MINE_DEPLOYED);#endif // decrement ammo m_iClip1 -= 1;#ifndef CLIENT_DLL DestroyIfEmpty( true );#endif m_flSoonestPrimaryAttack = gpGlobals->curtime + ASW_FLARES_FASTEST_REFIRE_TIME; if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime;}
开发者ID:jtanx,项目名称:ch1ckenscoop,代码行数:92,
示例25: GetCommandervoid CASW_Weapon_HealGrenade::PrimaryAttack( void ){ CASW_Player *pPlayer = GetCommander(); if (!pPlayer) return; CASW_Marine *pMarine = GetMarine();#ifndef CLIENT_DLL bool bThisActive = (pMarine && pMarine->GetActiveWeapon() == this);#endif if ( !pMarine ) return; // MUST call sound before removing a round from the clip of a CMachineGun WeaponSound(SINGLE); // sets the animation on the weapon model iteself SendWeaponAnim( GetPrimaryAttackActivity() ); // sets the animation on the marine holding this weapon //pMarine->SetAnimation( PLAYER_ATTACK1 );#ifndef CLIENT_DLL Vector vecSrc = pMarine->Weapon_ShootPosition( ); Vector vecAiming = pPlayer->GetAutoaimVectorForMarine(pMarine, GetAutoAimAmount(), GetVerticalAdjustOnlyAutoAimAmount()); // 45 degrees = 0.707106781187 if ( !pMarine->IsInhabited() && vecSrc.DistTo( pMarine->m_vecOffhandItemSpot ) < 150.0f ) { vecSrc.x = pMarine->m_vecOffhandItemSpot.x; vecSrc.y = pMarine->m_vecOffhandItemSpot.y; vecSrc.z += 50.0f; } QAngle ang = pPlayer->EyeAngles(); ang.x = 0; ang.z = 0; CShotManipulator Manipulator( vecAiming ); AngularImpulse rotSpeed(0,0,720); // create a pellet at some random spread direction Vector newVel = Manipulator.ApplySpread(GetBulletSpread()); if ( pMarine->GetWaterLevel() != 3 ) { CreateProjectile( vecSrc, ang, newVel, rotSpeed, pMarine ); pMarine->OnWeaponFired( this, 1 ); } pMarine->GetMarineSpeech()->Chatter(CHATTER_MEDKIT);#endif // decrement ammo m_iClip1 -= 1;#ifndef CLIENT_DLL // destroy if empty if ( UsesClipsForAmmo1() && !m_iClip1 ) { ASWFailAdvice()->OnMedSatchelEmpty(); pMarine->GetMarineSpeech()->Chatter( CHATTER_MEDS_NONE ); if ( pMarine ) { pMarine->Weapon_Detach(this); if ( bThisActive ) pMarine->SwitchToNextBestWeapon(NULL); } Kill(); return; }#endif m_flSoonestPrimaryAttack = gpGlobals->curtime + GetRefireTime(); if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime; //m_flLastFireTime = gpGlobals->curtime;}
开发者ID:Cre3per,项目名称:hl2sdk-csgo,代码行数:81,
示例26: GetPlayerOwner//=====================================================================================//// Purpose: Swing the weapon. bIsSecondary determines which Attack() function was used//=====================================================================================//void CTDPWeaponMaul::Swing( int bIsSecondary ){ // Do we have a valid owner holding the weapon? CTDPPlayer *pPlayer = GetPlayerOwner(); if ( !pPlayer ) return; // Get the player's position Vector vSwingStart = pPlayer->Weapon_ShootPosition( ); Vector vForward; pPlayer->EyeVectors( &vForward, NULL, NULL ); // Get the attack end position by using the weapon's range Vector vSwingEnd = vSwingStart + vForward * GetRange(); trace_t tr; UTIL_TraceLine( vSwingStart, vSwingEnd, MASK_SHOT_HULL, pPlayer, COLLISION_GROUP_NONE, &tr ); // Let's get our animation sequence depending on the attack type Activity nHitActivity = ( bIsSecondary ) ? GetSecondaryAttackActivity() : GetPrimaryAttackActivity();#if defined( GAME_DLL ) // Like bullets, bludgeon traces have to trace against triggers. CTakeDamageInfo triggerInfo( GetOwner(), GetOwner(), GetDamageForActivity( nHitActivity ), DMG_CLUB ); TraceAttackToTriggers( triggerInfo, tr.startpos, tr.endpos, vec3_origin );#endif // We didn't hit anything. Let's check for hull trace now if ( tr.fraction == 1.0f ) { // hull is +/- 16, so use cuberoot of 2 to determine how big the hull is from center to the corner point float bludgeonHullRadius = 1.732f * BLUDGEON_HULL_DIM; // Back off by hull "radius" vSwingEnd -= vForward * bludgeonHullRadius; UTIL_TraceHull( vSwingStart, vSwingEnd, g_bludgeonMins, g_bludgeonMaxs, MASK_SHOT_HULL, pPlayer, COLLISION_GROUP_NONE, &tr ); // Check if we hit something and if we have hit an entity if ( tr.fraction < 1.0 && tr.m_pEnt ) { // Get the position of the entity we just hit Vector vToTarget = tr.m_pEnt->GetAbsOrigin() - vSwingStart; VectorNormalize( vToTarget ); float dot = vToTarget.Dot( vForward ); // Make sure they are sort of facing the guy at least... if ( dot < 0.70721f ) { // Force a miss tr.fraction = 1.0f; } else { // We are sort of facing something. Let's see we should impact based on the melee swing trajectory BaseClass::ChooseIntersectionPointAndActivity( tr, g_bludgeonMins, g_bludgeonMaxs, pPlayer ); } } } // See if we happened to hit water along the way BaseClass::ImpactWater( vSwingStart, tr.endpos ); // Check for hit results if ( tr.fraction == 1.0f ) { // We didn't hit anything so let's change the animation sequence to full swing nHitActivity = ( bIsSecondary ) ? GetSecondaryMissActivity() : GetPrimaryMissActivity(); } else { // We hit something. We can keep the same animation sequence. BaseClass::Hit( tr, nHitActivity ); } //Play swing sound WeaponSound( SINGLE ); // Send the anim SendWeaponAnim( nHitActivity ); // Setup our next attack times m_flNextPrimaryAttack = m_flNextSecondaryAttack = gpGlobals->curtime + GetFireRate(); // Setup our next time to idle m_flTimeWeaponIdle = gpGlobals->curtime + GetTime2Idle();}
开发者ID:jrbedard,项目名称:troy-divine-playground,代码行数:92,
示例27: Reload//.........这里部分代码省略......... // MUST call sound before removing a round from the clip of a CMachineGun WeaponSound(SINGLE); if (m_iClip1 <= AmmoClickPoint()) BaseClass::WeaponSound( EMPTY ); m_bIsFiring = true; // tell the marine to tell its weapon to draw the muzzle flash pMarine->DoMuzzleFlash(); // sets the animation on the weapon model iteself //SendWeaponAnim( GetPrimaryAttackActivity() ); // sets the animation on the marine holding this weapon //pMarine->SetAnimation( PLAYER_ATTACK1 );#ifdef GAME_DLL // check for turning on lag compensation if (pPlayer && pMarine->IsInhabited()) { CASW_Lag_Compensation::RequestLagCompensation( pPlayer, pPlayer->GetCurrentUserCommand() ); }#endif FireBulletsInfo_t info; info.m_vecSrc = pMarine->Weapon_ShootPosition( ); if ( pPlayer && pMarine->IsInhabited() ) { info.m_vecDirShooting = pPlayer->GetAutoaimVectorForMarine(pMarine, GetAutoAimAmount(), GetVerticalAdjustOnlyAutoAimAmount()); // 45 degrees = 0.707106781187 } else {#ifdef CLIENT_DLL Msg("Error, clientside firing of a weapon that's being controlled by an AI marine/n");#else info.m_vecDirShooting = pMarine->GetActualShootTrajectory( info.m_vecSrc );#endif } info.m_iShots = 1; // Make sure we don't fire more than the amount in the clip if ( UsesClipsForAmmo1() ) { info.m_iShots = MIN( info.m_iShots, m_iClip1 ); m_iClip1 -= info.m_iShots;#ifdef GAME_DLL CASW_Marine *pMarine = GetMarine(); if (pMarine && m_iClip1 <= 0 && pMarine->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) { // check he doesn't have ammo in an ammo bay CASW_Weapon_Ammo_Bag* pAmmoBag = dynamic_cast<CASW_Weapon_Ammo_Bag*>(pMarine->GetASWWeapon(0)); if (!pAmmoBag) pAmmoBag = dynamic_cast<CASW_Weapon_Ammo_Bag*>(pMarine->GetASWWeapon(1)); if (!pAmmoBag || !pAmmoBag->CanGiveAmmoToWeapon(this)) pMarine->OnWeaponOutOfAmmo(true); }#endif } else { info.m_iShots = MIN( info.m_iShots, pMarine->GetAmmoCount( m_iPrimaryAmmoType ) ); pMarine->RemoveAmmo( info.m_iShots, m_iPrimaryAmmoType ); } info.m_flDistance = asw_weapon_max_shooting_distance.GetFloat(); info.m_iAmmoType = m_iPrimaryAmmoType; info.m_iTracerFreq = 1; info.m_flDamageForceScale = asw_weapon_force_scale.GetFloat(); info.m_vecSpread = GetBulletSpread(); info.m_flDamage = GetWeaponDamage();#ifndef CLIENT_DLL if (asw_debug_marine_damage.GetBool()) Msg("Weapon dmg = %f/n", info.m_flDamage); info.m_flDamage *= pMarine->GetMarineResource()->OnFired_GetDamageScale();#endif int iPenetration = 1; if ( pMarine->GetDamageBuffEndTime() > gpGlobals->curtime ) // sniper rifle penetrates more targets when marine is in a damage amp { iPenetration = 3; } pMarine->FirePenetratingBullets( info, iPenetration, 3.5f, 0, true, NULL, false ); // increment shooting stats#ifndef CLIENT_DLL if (pMarine && pMarine->GetMarineResource()) { pMarine->GetMarineResource()->UsedWeapon(this, 1); pMarine->OnWeaponFired( this, 1 ); }#endif if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime; m_fSlowTime = gpGlobals->curtime + 0.03f;}
开发者ID:BenLubar,项目名称:riflemod,代码行数:101,
示例28: GetCommandervoid CASW_Weapon_T75::PrimaryAttack( void ){ // Only the player fires this way so we can cast CASW_Player *pPlayer = GetCommander(); if (!pPlayer) return; CASW_Marine *pMarine = GetMarine();#ifndef CLIENT_DLL bool bThisActive = (pMarine && pMarine->GetActiveWeapon() == this);#endif // weapon is lost when all charges are gone if ( UsesClipsForAmmo1() && !m_iClip1 ) { //Reload();#ifndef CLIENT_DLL if (pMarine) { pMarine->Weapon_Detach(this); if (bThisActive) pMarine->SwitchToNextBestWeapon(NULL); } Kill();#endif return; } if ( !pMarine || pMarine->GetWaterLevel() == 3 ) // firing from a marine return; // sets the animation on the weapon model iteself SendWeaponAnim( GetPrimaryAttackActivity() );#ifndef CLIENT_DLL Vector vecSrc = pMarine->Weapon_ShootPosition( ); // TODO: Fix for AI Vector vecAiming = pPlayer->GetAutoaimVectorForMarine(pMarine, GetAutoAimAmount(), GetVerticalAdjustOnlyAutoAimAmount()); if ( !pMarine->IsInhabited() && vecSrc.DistTo( pMarine->m_vecOffhandItemSpot ) < 150.0f ) { vecSrc.x = pMarine->m_vecOffhandItemSpot.x; vecSrc.y = pMarine->m_vecOffhandItemSpot.y; vecSrc.z += 50.0f; } QAngle ang = pPlayer->EyeAngles(); ang.x = 0; ang.z = 0; CShotManipulator Manipulator( vecAiming ); AngularImpulse rotSpeed(0,0,720); Vector newVel = Manipulator.ApplySpread(GetBulletSpread()); newVel *= ASW_MINE_VELOCITY; if ( !pMarine->IsInhabited() ) { newVel = vec3_origin; } CASW_T75 *pT75 = CASW_T75::ASW_T75_Create( vecSrc, ang, newVel, rotSpeed, pMarine, this ); if ( pT75 && !pMarine->IsInhabited() ) { pT75->ActivateUseIcon( pMarine, ASW_USE_RELEASE_QUICK ); } //pMarine->GetMarineSpeech()->Chatter(CHATTER_MINE_DEPLOYED);#endif // decrement ammo m_iClip1 -= 1;#ifndef CLIENT_DLL DestroyIfEmpty( true );#endif m_flSoonestPrimaryAttack = gpGlobals->curtime + ASW_FLARES_FASTEST_REFIRE_TIME; if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime;}
开发者ID:BenLubar,项目名称:riflemod,代码行数:82,
示例29: Reload//.........这里部分代码省略......... if ( pPlayer && pMarine->IsInhabited() ) { vecAiming = pPlayer->GetAutoaimVectorForMarine(pMarine, GetAutoAimAmount(), GetVerticalAdjustOnlyAutoAimAmount()); // 45 degrees = 0.707106781187 } else {#ifndef CLIENT_DLL vecAiming = pMarine->GetActualShootTrajectory( vecSrc );#endif } if (true) // hitscan pellets {#ifndef CLIENT_DLL if (asw_DebugAutoAim.GetBool()) { NDebugOverlay::Line(vecSrc, vecSrc + vecAiming * asw_weapon_max_shooting_distance.GetFloat(), 64, 0, 64, false, 120.0); }#endif int iPellets = GetNumPellets(); for (int i=0;i<iPellets;i++) { FireBulletsInfo_t info( 1, vecSrc, vecAiming, GetAngularBulletSpread(), asw_weapon_max_shooting_distance.GetFloat(), m_iPrimaryAmmoType ); info.m_pAttacker = pMarine; info.m_iTracerFreq = 1; info.m_nFlags = FIRE_BULLETS_NO_PIERCING_SPARK | FIRE_BULLETS_HULL | FIRE_BULLETS_ANGULAR_SPREAD; info.m_flDamage = GetWeaponDamage(); info.m_flDamageForceScale = asw_weapon_force_scale.GetFloat(); #ifndef CLIENT_DLL if (asw_debug_marine_damage.GetBool()) Msg("Weapon dmg = %f/n", info.m_flDamage); info.m_flDamage *= pMarine->GetMarineResource()->OnFired_GetDamageScale(); #endif // shotgun bullets have a base 50% chance of piercing //float fPiercingChance = 0.5f; //if (pMarine->GetMarineResource() && pMarine->GetMarineProfile() && pMarine->GetMarineProfile()->GetMarineClass() == MARINE_CLASS_SPECIAL_WEAPONS) //fPiercingChance += MarineSkills()->GetSkillBasedValueByMarine(pMarine, ASW_MARINE_SKILL_PIERCING); //pMarine->FirePenetratingBullets(info, 5, fPiercingChance); //pMarine->FirePenetratingBullets(info, 5, 1.0f, i, false ); pMarine->FirePenetratingBullets(info, 0, 1.0f, i, false ); } } else // projectile pellets {#ifndef CLIENT_DLL CShotManipulator Manipulator( vecAiming ); int iPellets = GetNumPellets(); for (int i=0;i<iPellets;i++) { // create a pellet at some random spread direction //CASW_Shotgun_Pellet *pPellet = Vector newVel = Manipulator.ApplySpread(GetBulletSpread()); //Vector newVel = ApplySpread( vecAiming, GetBulletSpread() ); if ( pMarine->GetWaterLevel() == 3 ) newVel *= PELLET_WATER_VELOCITY; else newVel *= PELLET_AIR_VELOCITY; newVel *= (1.0 + (0.1 * random->RandomFloat(-1,1))); CreatePellet(vecSrc, newVel, pMarine); //CASW_Shotgun_Pellet_Predicted::CreatePellet(vecSrc, newVel, pPlayer, pMarine); }#endif } // increment shooting stats#ifndef CLIENT_DLL if (pMarine && pMarine->GetMarineResource()) { pMarine->GetMarineResource()->UsedWeapon(this, 1); pMarine->OnWeaponFired( this, GetNumPellets() ); }#endif // decrement ammo m_iClip1 -= 1;#ifdef GAME_DLL CASW_Marine *pMarine = GetMarine(); if (pMarine && m_iClip1 <= 0 && pMarine->GetAmmoCount(m_iPrimaryAmmoType) <= 0 ) { // check he doesn't have ammo in an ammo bay CASW_Weapon_Ammo_Bag* pAmmoBag = dynamic_cast<CASW_Weapon_Ammo_Bag*>(pMarine->GetASWWeapon(0)); if (!pAmmoBag) pAmmoBag = dynamic_cast<CASW_Weapon_Ammo_Bag*>(pMarine->GetASWWeapon(1)); if (!pAmmoBag || !pAmmoBag->CanGiveAmmoToWeapon(this)) pMarine->OnWeaponOutOfAmmo(true); }#endif } if (m_iClip1 > 0) // only force the fire wait time if we have ammo for another shot m_flNextPrimaryAttack = gpGlobals->curtime + GetFireRate(); else m_flNextPrimaryAttack = gpGlobals->curtime; m_fSlowTime = gpGlobals->curtime + 0.1f;}
开发者ID:Cre3per,项目名称:hl2sdk-csgo,代码行数:101,
示例30: ToBasePlayervoid CWeaponSMG1::PrimaryAttack( void ){ // Only the player fires this way so we can cast CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); if (!pPlayer) return; // Abort here to handle burst and auto fire modes if ( (UsesClipsForAmmo1() && m_iClip1 == 0) || ( !UsesClipsForAmmo1() && !pPlayer->GetAmmoCount(m_iPrimaryAmmoType) ) ) return; m_nShotsFired++; pPlayer->DoMuzzleFlash(); // To make the firing framerate independent, we may have to fire more than one bullet here on low-framerate systems, // especially if the weapon we're firing has a really fast rate of fire. int iBulletsToFire = 0; float fireRate = GetFireRate(); while ( m_flNextPrimaryAttack <= gpGlobals->curtime ) { // MUST call sound before removing a round from the clip of a CHLMachineGun WeaponSound(SINGLE, m_flNextPrimaryAttack); m_flNextPrimaryAttack = gpGlobals->curtime + fireRate; iBulletsToFire++; } // Make sure we don't fire more than the amount in the clip, if this weapon uses clips if ( UsesClipsForAmmo1() ) { if ( iBulletsToFire > m_iClip1 ) iBulletsToFire = m_iClip1; m_iClip1 -= iBulletsToFire; } CSDKPlayer *pSDKPlayer = ToSDKPlayer( pPlayer ); // Fire the bullets FireBulletsInfo_t info; info.m_iShots = iBulletsToFire; info.m_vecSrc = pSDKPlayer->Weapon_ShootPosition( ); info.m_vecDirShooting = pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); info.m_vecSpread = GetBulletSpread(); info.m_flDistance = MAX_TRACE_LENGTH; info.m_iAmmoType = m_iPrimaryAmmoType; info.m_iTracerFreq = 2; info.m_iDamage = GetSDKWpnData().m_iDamage; pPlayer->FireBullets( info ); //Factor in the view kick AddViewKick(); if (!m_iClip1 && pPlayer->GetAmmoCount(m_iPrimaryAmmoType) <= 0) { // HEV suit - indicate out of ammo condition pPlayer->SetSuitUpdate("!HEV_AMO0", FALSE, 0); } SendWeaponAnim( GetPrimaryAttackActivity() ); pPlayer->SetAnimation( PLAYER_ATTACK1 ); pSDKPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );}
开发者ID:hekar,项目名称:luminousforts-codebase,代码行数:63,
注:本文中的GetFireRate函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ GetFirmwareParams函数代码示例 C++ GetFileVersionInfoSize函数代码示例 |