bool CJaw::CanFire() const { bool bCanFire = false; bool ai = false; bool weaponLowered = false; if (CPlayer *pOwnerPlayer = GetOwnerPlayer()) { ai = !pOwnerPlayer->IsPlayer(); weaponLowered = pOwnerPlayer->IsCinematicFlagActive(SPlayerStats::eCinematicFlag_LowerWeapon) || pOwnerPlayer->IsCinematicFlagActive(SPlayerStats::eCinematicFlag_LowerWeaponMP); } if (ai || !GetOwnerPlayer() || ((m_firedRockets == 0) && !weaponLowered)) { bCanFire = BaseClass::CanFire(); } return bCanFire; }
//--------------------------------------------------------------------- bool CWeapon::OnActionSpecial(EntityId actorId, const ActionId& actionId, int activationMode, float value) { CPlayer* pOwnerPlayer = GetOwnerPlayer(); if (pOwnerPlayer && !pOwnerPlayer->CanMelee()) return true; if(gEnv->bMultiplayer && AreAnyItemFlagsSet(eIF_Transitioning)) //Ignore the transition from attachments menu and melee immediately { ClearItemFlags( eIF_Transitioning ); } if (gEnv->bMultiplayer && !g_pGameCVars->pl_boostedMelee_allowInMP) { if (activationMode == eAAM_OnPress) { if (CanMeleeAttack()) { if (PreMeleeAttack()) MeleeAttack(); } else { CCCPOINT(Melee_PressedButMeleeNotAllowed); } } } else { if (activationMode == eAAM_OnPress) { if(CanMeleeAttack()) { if (pOwnerPlayer) { if (PreMeleeAttack()) { BoostMelee(false); MeleeAttack(); } } } else { CCCPOINT(Melee_PressedButMeleeNotAllowed); } } } return true; }
//---------------------------------------------------------- bool CWeapon::CanZoomInState(float fallingMinAirTime) const { if (const CPlayer* pPlayer = GetOwnerPlayer()) { if (gEnv->bMultiplayer) { const bool allowedWhileJumpingFalling = g_pGameCVars->i_ironsight_while_jumping_mp || (!pPlayer->IsJumping() && (g_pGameCVars->i_ironsight_while_falling_mp || !pPlayer->IsInAir() || (pPlayer->CPlayer::GetActorStats()->inAir < fallingMinAirTime))); return allowedWhileJumpingFalling && !pPlayer->IsSliding(); } else return (GetLowerMode() != eILM_Cinematic) && !pPlayer->IsSliding(); } 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; }
void CPlayerPlugin_InteractiveEntityMonitor::Register( IEntity* pEntity, uint8 initialFlags ) { if(!pEntity) return; const EntityId entityId = pEntity->GetId(); //Make sure we aren't registering twice InteractiveEntityList::iterator iter = m_interactiveEntityList.begin(); InteractiveEntityList::iterator end = m_interactiveEntityList.end(); while(iter != end) { if(iter->first == entityId) { #ifndef _RELEASE CryLog("[ERROR] InteractiveEntityMonitor. Registering the same entity twice: '%s'. Tell Gary (Really this time).", pEntity->GetName()); DesignerWarning(false, "InteractiveEntityMonitor. Registering the same entity twice: '%s'. Tell Gary (Really this time).", pEntity->GetName()); #endif //_RELEASE //Don't crash return; } ++iter; } #ifndef _RELEASE m_debugMap[pEntity->GetId()] = pEntity->GetName(); #endif //_RELEASE m_interactiveEntityList.push_back( InteractiveEntityStatus(entityId, initialFlags) ); //Check if it should already be on if(m_bEnabled && GetOwnerPlayer()->GetEntity()->GetWorldPos().GetSquaredDistance2D(pEntity->GetWorldPos()) < g_pGameCVars->g_highlightingMovementDistanceToUpdateSquared) { if(IEntityRenderProxy* pRenderProxy = static_cast<IEntityRenderProxy *>(pEntity->GetProxy(ENTITY_PROXY_RENDER))) { if( (initialFlags & EIES_ShootToInteract) == 0 ) { pRenderProxy->SetHUDSilhouettesParams(m_silhouetteInteractColor.r, m_silhouetteInteractColor.g, m_silhouetteInteractColor.b, m_silhouetteInteractColor.a); } else { pRenderProxy->SetHUDSilhouettesParams(m_silhouetteShootColor.r, m_silhouetteShootColor.g, m_silhouetteShootColor.b, m_silhouetteShootColor.a); } } } }
void CPlayerPlugin_InteractiveEntityMonitor::Update( const float dt ) { m_timeUntilRefresh -= dt; #ifndef _RELEASE //Verify entity integrity InteractiveEntityDebugMap::iterator mapIter = m_debugMap.begin(); InteractiveEntityDebugMap::iterator mapEnd = m_debugMap.end(); while(mapIter != mapEnd) { if(!gEnv->pEntitySystem->GetEntity(mapIter->first)) { CryLog("[ERROR] InteractiveEntityMonitor. About to crash. Registered entity no longer exists: '%s'. Tell Gary (Really this time).", mapIter->second.c_str()); DesignerWarning(false, "[ERROR] InteractiveEntityMonitor. About to crash. Registered entity no longer exists: '%s'. Tell Gary (Really this time).", mapIter->second.c_str()); } ++mapIter; } #endif //_RELEASE IEntitySystem* pEntitySys = gEnv->pEntitySystem; const Vec3& playerPos = GetOwnerPlayer()->GetEntity()->GetWorldTM().GetColumn3(); if(m_bEnabled && (m_timeUntilRefresh < 0.f || playerPos.GetSquaredDistance2D(m_playerPrevPos) > g_pGameCVars->g_highlightingMovementDistanceToUpdateSquared)) { for(InteractiveEntityList::iterator it = m_interactiveEntityList.begin(); it!=m_interactiveEntityList.end(); ) { const EntityId entityId = it->first; IEntity* pEntity = pEntitySys->GetEntity(entityId); if(!pEntity) { it=m_interactiveEntityList.erase(it); continue; } if (IEntityRenderProxy* pRenderProxy = static_cast<IEntityRenderProxy *>(pEntity->GetProxy(ENTITY_PROXY_RENDER))) { const Vec3& entityPos = pEntity->GetWorldTM().GetColumn3(); const float distSq = entityPos.GetSquaredDistance2D(playerPos); const bool withinHighlightDistance = distSq <= g_pGameCVars->g_highlightingMaxDistanceToHighlightSquared; if( withinHighlightDistance ) { // Apply intensity fade over outer half distance float alpha = distSq * 2.0f - g_pGameCVars->g_highlightingMaxDistanceToHighlightSquared; alpha *= __fres(g_pGameCVars->g_highlightingMaxDistanceToHighlightSquared); alpha = 1.0f - clamp(alpha, 0.0f, 1.0f); if( (it->second & EIES_ShootToInteract) == 0 ) { pRenderProxy->SetHUDSilhouettesParams(m_silhouetteInteractColor.r*alpha, m_silhouetteInteractColor.g*alpha, m_silhouetteInteractColor.b*alpha, m_silhouetteInteractColor.a*alpha); } else { pRenderProxy->SetHUDSilhouettesParams(m_silhouetteShootColor.r*alpha, m_silhouetteShootColor.g*alpha, m_silhouetteShootColor.b*alpha, m_silhouetteShootColor.a*alpha); } it->second |= EIES_Highlighted; } else if( it->second & EIES_Highlighted ) { pRenderProxy->SetHUDSilhouettesParams(0.f, 0.f, 0.f, 0.f); it->second &= ~EIES_Highlighted; } } ++it; } m_playerPrevPos = playerPos; m_timeUntilRefresh = g_pGameCVars->g_highlightingTimeBetweenForcedRefresh; } }
bool CWeapon::CanStabilize() const { CPlayer* pPlayer = GetOwnerPlayer(); return (pPlayer != NULL); }