//------------------------------------------------------------------------ void CVehicleSeatActionMovement::StopUsing() { IActorSystem* pActorSystem = CCryAction::GetCryAction()->GetIActorSystem(); CRY_ASSERT(pActorSystem); IVehicleMovement* pMovement = m_pVehicle->GetMovement(); if (!pMovement) return; CRY_ASSERT(m_pSeat); // default to continuing for a bit m_delayedStop = 0.8f; IActor* pActor = pActorSystem->GetActor(m_pSeat->GetPassenger()); if (pActor && pActor->IsPlayer()) { // if stopped already don't go anywhere IPhysicalEntity* pPhys = m_pVehicle->GetEntity()->GetPhysics(); pe_status_dynamics status; if (pPhys && pPhys->GetStatus(&status)) { if (status.v.GetLengthSquared() < 25.0f) m_delayedStop = 0.0f; } if (m_actionForward > 0.0f) m_delayedStop = 1.5f; if (pMovement->GetMovementType() == IVehicleMovement::eVMT_Air) m_delayedStop *= 2.0f; m_pVehicle->SetObjectUpdate(this, IVehicle::eVOU_AlwaysUpdate); // prevent full pedal being kept pressed, but give it a bit pMovement->OnAction(eVAI_MoveForward, eAAM_OnPress, 0.1f); } else { if (pMovement->GetMovementType() == IVehicleMovement::eVMT_Air) { m_delayedStop = 0.0f; m_pVehicle->SetObjectUpdate(this, IVehicle::eVOU_AlwaysUpdate); } else { pMovement->StopDriving(); } } }
//------------------------------------------------------------------------ void CVehicleSeatActionMovement::Update(const float deltaTime) { IVehicleMovement* pMovement = m_pVehicle->GetMovement(); CRY_ASSERT(pMovement); bool isReadyToStopEngine = true; if (isReadyToStopEngine) { if (m_delayedStop > 0.0f) m_delayedStop -= deltaTime; if (m_delayedStop <= 0.0f) { m_pVehicle->SetObjectUpdate(this, IVehicle::eVOU_NoUpdate); pMovement->StopDriving(); } } }
//------------------------------------------------------------------------ void CVehicleSeatActionMovement::StartUsing(EntityId passengerId) { IActorSystem* pActorSystem = CCryAction::GetCryAction()->GetIActorSystem(); CRY_ASSERT(pActorSystem); IActor* pActor = pActorSystem->GetActor(passengerId); CRY_ASSERT(pActor); IVehicleMovement* pMovement = m_pVehicle->GetMovement(); CRY_ASSERT(pMovement); if (!pMovement) return; if (m_delayedStop >= 0.0f) { m_pVehicle->SetObjectUpdate(this, IVehicle::eVOU_NoUpdate); m_delayedStop = 0.0f; pMovement->StopDriving(); } pMovement->StartDriving(passengerId); }