//------------------------------------------------- void CHandGrenades::InitFireModes() { inherited::InitFireModes(); int firemodeCount = m_firemodes.size(); m_pThrow = NULL; int throwId = -1; for(int i = 0; i < firemodeCount; i++) { if (crygti_isof<CThrow>(m_firemodes[i])) { CRY_ASSERT_MESSAGE(!m_pThrow, "Multiple Throw firemodes assigned to weapon"); m_pThrow = crygti_cast<CThrow*>(m_firemodes[i]); throwId = i; } } CRY_ASSERT_MESSAGE(m_pThrow, "No Throw firemode assigned to weapon"); if(m_pThrow) { SetCurrentFireMode(throwId); } }
//------------------------------------------------------------------------ void CWeapon::RequestFireMode(int fmId) { if(fmId==GetCurrentFireMode()) return; CActor *pActor=GetOwnerActor(); if (gEnv->IsClient() && pActor && pActor->IsClient()) { float animationTime = GetCurrentAnimationTime(eIGS_Owner)/1000.0f; m_switchFireModeTimeStap = gEnv->pTimer->GetCurrTime() + animationTime; if(gEnv->bServer) { SetCurrentFireMode(fmId); } else { if(m_fm) { m_fm->Activate(false); } GetGameObject()->InvokeRMI(SvRequestFireMode(), SvRequestFireModeParams(fmId), eRMI_ToServer); } StartVerificationSample(gEnv->pTimer->GetAsyncCurTime()); SHUDEvent event(eHUDEvent_OnWeaponFireModeChanged); event.AddData(SHUDEventData(fmId)); CHUDEventDispatcher::CallEvent(event); } }
//------------------------------------------------------------------------ IMPLEMENT_RMI(CWeapon, SvRequestFireMode) { CHECK_OWNER_REQUEST(); SetCurrentFireMode(params.id); return true; }