//--------------------------------------------------------------------------------- bool CWeapon::OnActionFiremode(EntityId actorId, const ActionId& actionId, int activationMode, float value) { CActor* pOwner = GetOwnerActor(); CPlayer* pPlayer = pOwner && pOwner->IsPlayer() ? static_cast<CPlayer*>(pOwner) : 0; if (pPlayer && (pPlayer->IsCinematicFlagActive(SPlayerStats::eCinematicFlag_LowerWeapon) || pPlayer->IsCinematicFlagActive(SPlayerStats::eCinematicFlag_LowerWeaponMP)) ) return true; bool incompatibleZommMode = (m_secondaryZmId != 0 && (IsZoomed() || IsZoomingInOrOut())); if (AreAnyItemFlagsSet(eIF_BlockActions) || incompatibleZommMode) { return true; } if (activationMode == eAAM_OnPress) { IFireMode* pNewFiremode = GetFireMode(GetNextFireMode(GetCurrentFireMode())); if (pNewFiremode == m_fm) { if(pPlayer && pPlayer->CanSwitchItems()) { pPlayer->SwitchToWeaponWithAccessoryFireMode(); } } else if (!IsReloading()) { StartChangeFireMode(); } } return true; }
void CJaw::StartFire() { if (!CanFire()) return; CActor* pOwner = GetOwnerActor(); #if (USE_DEDICATED_INPUT) if (!pOwner || (!pOwner->IsPlayer() || (gEnv->bMultiplayer && strcmp(pOwner->GetEntityClassName(), "DummyPlayer") == 0))) #else if (!pOwner || !pOwner->IsPlayer()) #endif { BaseClass::StartFire(); return; } if (m_controllingRocket) return; CPlayer *ownerPlayer = GetOwnerPlayer(); if (ownerPlayer) { if(ownerPlayer->IsClient() && ownerPlayer->IsWeaponUnderWater()) { return; } ownerPlayer->StateMachineHandleEventMovement( PLAYER_EVENT_FORCEEXITSLIDE ); } if (!m_firePending && m_zm && g_pGameCVars->cl_zoomToggle > 0) { m_zoomAlreadyToggled = (m_zm->IsZoomingIn() || m_zm->IsZoomed()); } else { m_zoomAlreadyToggled = false; } if(!IsZoomingInOrOut()) { if (m_zm) m_zm->ZoomIn(); } m_fireTriggerDown = true; m_firePending = true; }
//------------------------------------------------------------------------ EZoomState CIronSight::GetZoomState() const { if(IsZoomingInOrOut()) { if(IsZoomingIn()) return eZS_ZoomingIn; else return eZS_ZoomingOut; } else { if(IsZoomed()) return eZS_ZoomedIn; else return eZS_ZoomedOut; } }
//------------------------------------------------------ void CWeapon::ForcePendingActions(uint8 blockedActions) { CItem::ForcePendingActions(blockedActions); CActor* pOwner = GetOwnerActor(); if(!pOwner || !pOwner->IsClient() || s_lockActionRequests) return; //--- Lock action requests to ensure that we don't recurse back into this function but also //--- block any recursive action requests to ensure we don't repeat the actions next frame s_lockActionRequests = true; //Force start firing, if needed and possible if(IsInputFlagSet(eWeaponAction_Fire) && !(blockedActions&eWeaponAction_Fire)) { ClearInputFlag(eWeaponAction_Fire); if(IsTargetOn() || (m_fm && !m_fm->AllowZoom())) { s_lockActionRequests = false; return; } OnAction(GetOwnerId(),CCryName("attack1"),eAAM_OnHold,0.0f); } //Force zoom in if needed if(IsInputFlagSet(eWeaponAction_Zoom) && !(blockedActions&eWeaponAction_Zoom)) { if(!IsZoomed() && !IsZoomingInOrOut()) OnActionZoom(GetOwnerId(), CCryName("zoom"), eAAM_OnPress, 0.0f); ClearInputFlag(eWeaponAction_Zoom); } if(IsInputFlagSet(eWeaponAction_Reload) && !(blockedActions&eWeaponAction_Reload)) { if (!IsBusy()) ReloadWeapon(); ClearInputFlag(eWeaponAction_Reload); } s_lockActionRequests = false; }
//------------------------------------------------------------------------ void CVehicleWeapon::StopUse(EntityId userId) { if (m_owner.GetId() && userId != m_owner.GetId()) return; if(userId == g_pGame->GetIGameFramework()->GetClientActorId()) { IVehicle* pVehicle = GetVehicle(); if(pVehicle) { pVehicle->UnregisterVehicleEventListener(this); } AudioCache(true, true); //change cache to third person if it's not available } Select(false); m_stats.used = false; SetOwnerId(0); EnableUpdate(false); if(IsZoomed() || IsZoomingInOrOut()) { ExitZoom(); } m_shootCounter = 0; if (userId == g_pGame->GetIGameFramework()->GetClientActorId()) { SHUDEvent event; event.eventType = eHUDEvent_OnItemSelected; event.eventIntData = 0; CHUDEventDispatcher::CallEvent(event); } }
//------------------------------------------------------------------------ void CVehicleWeapon::StopUse(EntityId userId) { if (m_ownerId && userId != m_ownerId) return; SendMusicLogicEvent(eMUSICLOGICEVENT_WEAPON_UNMOUNT); Select(false); m_stats.used = false; UseManualBlending(false); SetOwnerId(0); EnableUpdate(false); if(IsZoomed() || IsZoomingInOrOut()) { ExitZoom(); } LowerWeapon(false); }
//------------------------------------------------------------------------ bool CIronSight::StartZoom(bool stayZoomed, bool fullZoomout, int zoomStep) { if(m_pWeapon->IsBusy() || (IsToggle() && IsZoomingInOrOut())) return false; CActor *pActor = m_pWeapon->GetOwnerActor(); CScreenEffects *pSE = pActor?pActor->GetScreenEffects():NULL; if(pSE) { pSE->EnableBlends(false, CScreenEffects::eSFX_GID_ZoomIn); pSE->EnableBlends(false, CScreenEffects::eSFX_GID_ZoomOut); pSE->EnableBlends(false, CScreenEffects::eSFX_GID_HitReaction); } if(!m_zoomed || stayZoomed) { EnterZoom(m_pShared->zoomParams.zoom_in_time, m_pShared->zoomParams.layer.c_str(), true, zoomStep); m_currentStep = zoomStep; m_pWeapon->AssistAiming(m_pShared->zoomParams.stages[m_currentStep-1], true); } else { int currentStep = m_currentStep; int nextStep = currentStep+1; if(nextStep > m_pShared->zoomParams.stages.size()) { if(!stayZoomed) { if(fullZoomout) { StopZoom(); } else { float oFoV = GetZoomFoVScale(currentStep); m_currentStep = 0; float tFoV = GetZoomFoVScale(m_currentStep); ZoomIn(m_pShared->zoomParams.stage_time, oFoV, tFoV, true); return true; } } } else { float oFoV = GetZoomFoVScale(currentStep); float tFoV = GetZoomFoVScale(nextStep); ZoomIn(m_pShared->zoomParams.stage_time, oFoV, tFoV, true); m_currentStep = nextStep; m_pWeapon->AssistAiming(m_pShared->zoomParams.stages[m_currentStep-1], true); return true; } } return false; }
//------------------------------------------------------------------------- bool CWeapon::OnActionModify(EntityId actorId, const ActionId& actionId, int activationMode, float value) { if (IsZoomed() || IsZoomingInOrOut()) return false; if (CanModify() && ((!IsReloading() && !IsBusy()) || AreAnyItemFlagsSet(eIF_Modifying))) { if (m_fm) m_fm->StopFire(); if (AreAnyItemFlagsSet(eIF_Modifying)) { m_enterModifyAction = 0; PlayAction(GetFragmentIds().leave_modify, 0); s_dofSpeed = fres(-g_pGameCVars->i_weapon_customisation_transition_time); s_dofValue = 1.0f; s_focusValue = -1.0f; GetScheduler()->TimerAction(g_pGameCVars->i_weapon_customisation_transition_time, CSchedulerAction<ScheduleLayer_Leave>::Create(this), false); SetItemFlags( eIF_Transitioning ); ClearItemFlags( eIF_Modifying ); GetGameObject()->InvokeRMI(CItem::SvRequestLeaveModify(), CItem::EmptyParams(), eRMI_ToServer); } else { gEnv->p3DEngine->SetPostEffectParam("Dof_Active", 1.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_UseMask", 0.f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusRange", -1.f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusMin", 0.5f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusMax", 1.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusLimit", 1.5f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusMinZ", 0.0f); gEnv->p3DEngine->SetPostEffectParam("Dof_FocusMinZScale", 0.0f); m_itemLowerMode = eILM_Raised; TagState tagState = TAG_STATE_EMPTY; m_enterModifyAction = new CItemAction(PP_PlayerAction, GetFragmentIds().enter_modify, tagState); PlayFragment(m_enterModifyAction); s_dofSpeed = fres(g_pGameCVars->i_weapon_customisation_transition_time); s_dofValue = 0.0f; SetItemFlags(eIF_Transitioning); GetScheduler()->TimerAction(g_pGameCVars->i_weapon_customisation_transition_time, CSchedulerAction<ScheduleLayer_Enter>::Create(this), false); SetItemFlags(eIF_Modifying); CPlayer *pPlayer = static_cast<CPlayer*>(GetOwnerActor()); if (pPlayer) { SPlayerStats *pStats = static_cast<SPlayerStats*>(pPlayer->GetActorStats()); assert(pStats); pStats->bIgnoreSprinting = true; } GetGameObject()->InvokeRMI(CItem::SvRequestEnterModify(), CItem::EmptyParams(), eRMI_ToServer); } } return true; }