示例#1
0
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;
	}
}
示例#2
0
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;
}