//------------------------------------------------------------------------ void CVehicleMountedWeapon::StartUse(EntityId userId) { IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId); if (!IsRippingOff() && pVehicle) { m_pOwnerSeat = pVehicle->GetWeaponParentSeat(GetEntityId()); m_pSeatUser = pVehicle->GetSeatForPassenger(userId); IActor* pOwner = GetOwnerActor(); if (pOwner && !pOwner->IsPlayer()) { SHUDEvent hudEvent(eHUDEvent_AddEntity); hudEvent.AddData((int)pVehicle->GetEntityId()); CHUDEventDispatcher::CallEvent(hudEvent); } ClearItemFlags(eIF_InformClientsAboutUse); } CHeavyMountedWeapon::StartUse(userId); CActor* pActor = GetOwnerActor(); if (pActor && pActor->IsPlayer()) { static_cast<CPlayer*>(pActor)->RefreshVisibilityState(); } }
//------------------------------------------------------------------------ void CVehicleMountedWeapon::Update( SEntityUpdateContext& ctx, int update) { CHeavyMountedWeapon::Update(ctx, update); if(update==eIUS_General) { if (m_fm && m_fm->IsFiring()) { m_dtWaterLevelCheck -= ctx.fFrameTime; if (m_dtWaterLevelCheck <= 0.f) { if (!CheckWaterLevel()) StopFire(); m_dtWaterLevelCheck = 2.0f; } } // Perform position sync if necessary if(IsRippingOff() && gEnv->bMultiplayer) { CorrectRipperEntityPosition(ctx.fFrameTime); } } m_usedThisFrame = false; }
bool CHeavyMountedWeapon::AllowInteraction( EntityId interactionEntity, EInteractionType interactionType ) { if(interactionType==eInteraction_GameRulesPickup && (IsRippingOff()||!IsRippedOff())) { return false; } return BaseClass::AllowInteraction(interactionEntity, interactionType); }
void CVehicleMountedWeapon::Use( EntityId userId ) { IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId); if (!IsRippingOff() && pVehicle) { IActor* pUserActor = gEnv->pGame->GetIGameFramework()->GetIActorSystem()->GetActor(userId); if(pUserActor && pUserActor->IsPlayer()) { CPlayer* pPlayer = static_cast<CPlayer*>(pUserActor); IInteractor* pInteractor = pPlayer->GetInteractor(); pVehicle->OnUsed(userId, pInteractor->GetOverSlotIdx()); return; } } CHeavyMountedWeapon::Use(userId); }
void CVehicleMountedWeapon::StopUse( EntityId userId ) { CActor* pOwner = GetOwnerActor(); if (pOwner && pOwner->IsPlayer()) { static_cast<CPlayer*>(pOwner)->RefreshVisibilityState(); } //Need to make sure we clean up the state here in case the normal logic has not run for some reason (E.g. Being killed during rip off) if(IsRippingOff()) { ResetState(); } else { m_usedThisFrame = true; } CHeavyMountedWeapon::StopUse(userId); }
bool CVehicleMountedWeapon::CanUse( EntityId userId ) const { if(m_usedThisFrame) { return false; } IVehicle *pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_vehicleId); //Ask the owning vehicle if we can use it if (!IsRippingOff() && pVehicle) { if(!pVehicle->IsUsable(userId)) { return false; } } //No vehicle so resort to usual use case return CHeavyMountedWeapon::CanUse(userId); }
bool CHeavyMountedWeapon::CanDeselect() const { return !IsRippingOff(); }