float CMountedGunController::CalculateAnimationTime(float aimRad)
{
	const float ANIM_ANGLE_RANGE = gf_PI*0.25f;

	float time = fmod_tpl(aimRad / ANIM_ANGLE_RANGE, 1.0f);
	time = (float)fsel(time, time, 1.0f + time);

	return time;
}
    virtual void ProcessEvent( EFlowEvent event, SActivationInfo *pActInfo )
    {
        switch (event)
        {
        case eFE_Initialize:
        {
            pActInfo->pGraph->SetRegularlyUpdated( pActInfo->myID, true );
            if (IsPortActive(pActInfo,IN_BASETIME))
                m_basetime =	GetPortFloat(pActInfo, IN_BASETIME);

            if (IsPortActive(pActInfo,IN_PERIOD))
                m_period = GetPortFloat(pActInfo, IN_PERIOD);

            m_msec=0;
        }
        break;
        case eFE_Update:
        {
            CTimeValue now=CCryAction::GetCryAction()->GetServerTime();

            if (now != m_lasttime)
            {
                uint32 msec=(uint32)((now-m_basetime).GetMilliSeconds());
                uint32 period=(uint32)(m_period.GetMilliSeconds());

                if (period>0)
                {
                    msec=msec%period;
                    if (msec<m_msec)
                        ActivateOutput( pActInfo,OUT_PERIOD, 1);

                    m_msec=msec;
                }
                ActivateOutput( pActInfo,OUT_MSECS, msec);
            }
            if (now.GetSeconds() != m_lasttime.GetSeconds())
            {
                float secs=(now-m_basetime).GetSeconds();
                float period=m_period.GetSeconds();

                if (period>0.00001f)
                    secs=fmod_tpl(secs, period);

                ActivateOutput( pActInfo,OUT_SECS, secs);
            }

            m_lasttime = now;
        }
        break;
        }
    }