//------------------------------------------------------------------------ void CVehicleWeapon::StartUse(EntityId userId) { if (m_owner.GetId() && userId != m_owner.GetId()) return; if (GetEntity()->GetParent()) { const EntityId vehicleId = GetEntity()->GetParent()->GetId(); m_vehicleId = vehicleId; IVehicle* pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(vehicleId); assert(pVehicle && "Using VehicleWeapons on non-vehicles may lead to unexpected behavior."); if (pVehicle) { IVehicleSeat* pOwnerSeat = pVehicle->GetWeaponParentSeat(GetEntityId()); IVehicleSeat* pSeatUser = pVehicle->GetSeatForPassenger(userId); m_bOwnerInSeat = (pOwnerSeat == pSeatUser); if(userId == g_pGame->GetIGameFramework()->GetClientActorId()) { pVehicle->RegisterVehicleEventListener(this, "CVehicleWeapon"); } } } SetOwnerId(userId); Select(true); m_stats.used = true; EnableUpdate(true, eIUS_General); RequireUpdate(eIUS_General); if (OutOfAmmo(false)) Reload(false); m_shootCounter = 0; if(userId == g_pGame->GetIGameFramework()->GetClientActorId()) { SHUDEvent event; event.eventType = eHUDEvent_OnItemSelected; event.eventIntData = CItem::GetEntityId(); CHUDEventDispatcher::CallEvent(event); SHUDEventWrapper::FireModeChanged(this, m_firemode); } }
void SetActive(const bool bActive) { if (m_bActive == bActive) return; m_bActive = bActive; IVehicle* pVehicle; pVehicle = gEnv->pGame->GetIGameFramework()->GetIVehicleSystem()->GetVehicle(m_entityId); if (bActive) { CRY_ASSERT(pVehicle); m_fStartedTime = gEnv->pTimer->GetFrameStartTime().GetSeconds(); m_actInfo.pGraph->SetRegularlyUpdated(m_actInfo.myID, true); if (pVehicle) { pVehicle->RegisterVehicleEventListener(this, "CFlowVehicleDriveForward"); } ActivateOutput(&m_actInfo, EOP_Started, true); } else { m_bNeedsCleanup = true; // To ensure event listener gets cleaned up when its safe to do so if (pVehicle) { if (pVehicle->GetSeatCount() != 0) // Restore back { IVehicleSeat* pSeat = pVehicle->GetSeatById(1); if (pSeat) { pSeat->SetLocked(m_prevSeatLockStatus); //pSeat->ExitRemotely(); } } } } }