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; } }