//--------------------------------------------------------------------------------- bool CWeapon::OnActionFiremode(EntityId actorId, const ActionId& actionId, int activationMode, float value) { if (activationMode==eAAM_OnPress) { bool isDualWield = false; CWeapon *dualWield = NULL; GetDualWieldInfo(this,isDualWield,&dualWield); if (isDualWield) { if(IsWeaponRaised()) RaiseWeapon(false,true); if(dualWield->IsWeaponRaised()) dualWield->RaiseWeapon(false,true); StartChangeFireMode(); } else { if(m_weaponRaised) RaiseWeapon(false,true); StartChangeFireMode(); } } return true; }
//--------------------------------------------------------- bool CWeapon::OnActionReload(EntityId actorId, const ActionId& actionId, int activationMode, float value) { if(activationMode==eAAM_OnPress) { COffHand * offHandWeapon = NULL; bool isOffHandSelected = false; GetOffHandInfo(this,isOffHandSelected,&offHandWeapon); if (!IsBusy() && !m_modifying && !isOffHandSelected) { bool isDualWield = false; CWeapon *dualWield = NULL; GetDualWieldInfo(this,isDualWield,&dualWield); if(IsWeaponRaised() && m_fm && m_fm->CanReload()) RaiseWeapon(false); Reload(); if (isDualWield) { if(dualWield->IsWeaponRaised() && dualWield->CanReload()) dualWield->RaiseWeapon(false); dualWield->Reload(); } } } return true; }
//------------------------------------------------------------------------- bool CWeapon::OnActionModify(EntityId actorId, const ActionId& actionId, int activationMode, float value) { COffHand * offHandWeapon = NULL; bool isOffHandSelected = false; GetOffHandInfo(this,isOffHandSelected,&offHandWeapon); if (!IsBusy() && !isOffHandSelected) { if (m_fm) m_fm->StopFire(); if(m_zm && m_zm->IsZoomed()) m_zm->StopZoom(); if(m_weaponRaised) RaiseWeapon(false,true); if (m_modifying && !m_transitioning) { StopLayer(g_pItemStrings->modify_layer, eIPAF_Default, false); PlayAction(g_pItemStrings->leave_modify, 0); m_dofSpeed = -1.0f/((float)GetCurrentAnimationTime(eIGS_FirstPerson)/1000.0f); m_dofValue = 1.0f; m_focusValue = -1.0f; GetScheduler()->TimerAction(GetCurrentAnimationTime(eIGS_FirstPerson), CSchedulerAction<ScheduleLayer_Leave>::Create(this), false); m_transitioning = true; SAFE_HUD_FUNC(WeaponAccessoriesInterface(false)); m_modifying = false; GetGameObject()->InvokeRMI(CItem::SvRequestLeaveModify(), CItem::EmptyParams(), eRMI_ToServer); } else if (!m_modifying && !m_transitioning) { gEnv->p3DEngine->SetPostEffectParam("Dof_Active", 1.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusRange", -1.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusMin", 0.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusMax", 5.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusLimit", 20.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_UseMask", 0.0f); PlayAction(g_pItemStrings->enter_modify, 0, false, eIPAF_Default | eIPAF_RepeatLastFrame); m_dofSpeed = 1.0f/((float)GetCurrentAnimationTime(eIGS_FirstPerson)/1000.0f); m_dofValue = 0.0f; m_transitioning = true; GetScheduler()->TimerAction(GetCurrentAnimationTime(eIGS_FirstPerson), CSchedulerAction<ScheduleLayer_Enter>::Create(this), false); m_modifying = true; GetGameObject()->InvokeRMI(CItem::SvRequestEnterModify(), CItem::EmptyParams(), eRMI_ToServer); } } return true; }
//---------------------------------------------------------- bool CWeapon::OnActionZoom(EntityId actorId, const ActionId& actionId, int activationMode, float value) { COffHand * offHandWeapon = NULL; bool isOffHandSelected = false; GetOffHandInfo(this,isOffHandSelected,&offHandWeapon); if (!m_modifying && (!isOffHandSelected || (offHandWeapon->GetOffHandState()&eOHS_TRANSITIONING))) { bool isDualWield = false; CWeapon *dualWield = NULL; GetDualWieldInfo(this,isDualWield,&dualWield); if (!isDualWield) { if (m_fm && !m_fm->IsReloading()) { if (activationMode == eAAM_OnPress) { if(!m_fm->AllowZoom()) { if(IsTargetOn()) m_fm->Cancel(); else return false; } if(m_weaponRaised) { RaiseWeapon(false,true); } //Use mouse wheel for scopes with several steps/stages if (m_zm && m_zm->IsZoomed() && m_zm->GetMaxZoomSteps()>1) m_zm->StopZoom(); else StartZoom(actorId,1); } else if (activationMode == eAAM_OnRelease) { if(m_zm && !m_zm->IsToggle()) m_zm->StopZoom(); } } } } return true; }
//--------------------------------------------------------------------- bool CWeapon::OnActionSpecial(EntityId actorId, const ActionId& actionId, int activationMode, float value) { if (activationMode == eAAM_OnPress) { if(m_weaponRaised) { RaiseWeapon(false,true); } COffHand * offHandWeapon = NULL; bool isOffHandSelected = false; GetOffHandInfo(this,isOffHandSelected,&offHandWeapon); if (CanMeleeAttack() && (!isOffHandSelected || (offHandWeapon->GetOffHandState()&(eOHS_HOLDING_NPC|eOHS_TRANSITIONING)))) MeleeAttack(); } return true; }
//--------------------------------------------------------------------- bool CWeapon::OnActionSpecial(EntityId actorId, const ActionId& actionId, int activationMode, float value) { if (activationMode == eAAM_OnPress) { if(m_weaponRaised) RaiseWeapon(false,true); CActor* pOwnerActor = GetOwnerActor(); if (pOwnerActor && g_pGameCVars->dt_enable) { CPlayer *pPlayer = static_cast<CPlayer*>(pOwnerActor); pPlayer->GetNanoSuit()->Tap(eNA_Melee); } COffHand * offHandWeapon = NULL; bool isOffHandSelected = false; GetOffHandInfo(this,isOffHandSelected,&offHandWeapon); if (CanMeleeAttack() && (!isOffHandSelected || (offHandWeapon->GetOffHandState()&(eOHS_HOLDING_NPC|eOHS_TRANSITIONING)))) MeleeAttack(); } return true; }