void GunMount::Update( ) { switch( m_eFiringState ) { case eNotFiring: break; case ePreFiring: UpdatePreFiring( ); break; case eFiring: UpdateFiring( ); break; case ePostFiring: UpdatePostFiring( ); break; default: ASSERT( !"GunMount::Update: Invalid firing state." ); break; } }
LTBOOL CAIHelicopterStrategyShoot::Update() { if ( !CAIHelicopterStrategy::Update() ) { return LTFALSE; } if ( !m_hTarget ) { return LTFALSE; } for ( int iWeapon = 0 ; iWeapon < GetAI()->GetNumWeapons() ; iWeapon++ ) { CWeapon* pWeapon = GetAI()->GetWeapon(iWeapon); if ( m_aBursts[iWeapon].m_bFired && m_aBursts[iWeapon].m_bActive ) { UpdateFiring(pWeapon, &m_aBursts[iWeapon]); m_aBursts[iWeapon].m_bFired = LTFALSE; } else { UpdateAiming(pWeapon, &m_aBursts[iWeapon]); } if ( 0 == pWeapon->GetAmmoInClip() ) { pWeapon->ReloadClip(LTFALSE); } if ( 0 == pWeapon->GetParent()->GetAmmoCount(pWeapon->GetAmmoId()) ) { pWeapon->GetParent()->AddAmmo(pWeapon->GetAmmoId(), 999999); } } return LTTRUE; }
//------------------------------------------------------------------------ void CRapid::Update(float frameTime, uint32 frameId) { FUNCTION_PROFILER( GetISystem(), PROFILE_GAME ); PlayStopRapidFireIfNeeded(); BaseClass::Update(frameTime, frameId); if (m_speed <= 0.0f && m_acceleration < 0.0001f) { FinishDeceleration(); return; } CActor* pOwnerActor = m_pWeapon->GetOwnerActor(); const bool isOwnerClient = pOwnerActor ? pOwnerActor->IsClient() : false; const bool isOwnerPlayer = pOwnerActor ? pOwnerActor->IsPlayer() : false; m_pWeapon->RequireUpdate(eIUS_FireMode); m_speed = m_speed + m_acceleration*frameTime; if (m_speed > m_fireParams->rapidparams.max_speed) { m_speed = m_fireParams->rapidparams.max_speed; m_rapidFlags &= ~eRapidFlag_accelerating; } if ((m_speed >= m_fireParams->rapidparams.min_speed) && !(m_rapidFlags & eRapidFlag_decelerating)) { float dt = 1.0f; if (cry_fabsf(m_speed)>0.001f && cry_fabsf(m_fireParams->rapidparams.max_speed)>0.001f) { dt = m_speed * (float)__fres(m_fireParams->rapidparams.max_speed); } CRY_ASSERT(m_fireParams->fireparams.rate > 0); m_next_shot_dt = 60.0f* (float)__fres((m_fireParams->fireparams.rate*dt)); if (CanFire(false)) { if (!OutOfAmmo()) { const bool firing = (m_rapidFlags & eRapidFlag_netShooting) || Shoot(true, m_fireParams->fireparams.autoReload); Firing(firing); } else { StopFire(); } } } else if (m_firing) { StopFire(); if (OutOfAmmo() && isOwnerPlayer) { m_pWeapon->Reload(); } } if ((m_speed < m_fireParams->rapidparams.min_speed) && (m_acceleration < 0.0f) && !(m_rapidFlags & eRapidFlag_decelerating)) Accelerate(m_fireParams->rapidparams.deceleration); UpdateRotation(frameTime); UpdateFiring(pOwnerActor, isOwnerClient, isOwnerPlayer, frameTime); }
WeaponState CClientWeaponDisc::UpdateModelState( bool bFire ) { WeaponState eRet = W_IDLE; // Determine what we should be doing... // (mostly updates animations, also // updates a couple supporting variables) if ( bFire ) { UpdateFiring(); } else if ( g_pLTClient->IsCommandOn( COMMAND_ID_DEFEND ) && g_pLTClient->IsCommandOn( COMMAND_ID_DEFEND_MODIFIER ) ) { UpdateSwatDefense(); } else if ( g_pLTClient->IsCommandOn( COMMAND_ID_DEFEND ) && !g_pLTClient->IsCommandOn( COMMAND_ID_DEFEND_MODIFIER ) ) { UpdateHoldDefense(); } else { UpdateIdle(); } // this is reset here just in case it was set while the hold // animation was not playing m_bPlayImpactHoldAnimation = false; if ( m_bFire ) { // gadgets...always the special case :-( bool bGadgetSpecialCase = m_pAmmo->eType != GADGET; // doesn't actually fire, just updates the // ammo and clears the m_bFire flag eRet = UpdateAmmoFromFire( bGadgetSpecialCase ); // clear the fire flag m_bFire = false; } // See if we just finished deselecting the weapon... if ( m_bWeaponDeselected ) { m_bWeaponDeselected = false; if ( m_cbDeselect ) { // call the deselect callback m_cbDeselect( m_nWeaponId, m_pcbData ); // clear out the callback data m_cbDeselect = 0; m_pcbData = 0; } // deactivate the current weapon, its not used anymore Deactivate(); } return eRet; }