How can I control Throttle and Steering of Hinge2Vehicle?

Post Reply
kcjsend2
Posts: 15
Joined: Wed Jun 30, 2021 9:10 am

How can I control Throttle and Steering of Hinge2Vehicle?

Post by kcjsend2 »

first, sorry for bad english

I follow some example about Hinge2Vehicle, than I realized that Hinge2Vehicle doesn't have any Control of Throttle
So I guess that pHinge2->setTargetVelocity is might be solution of this, and this is result

Code: Select all

switch (dwBehave)
	{
		case DIR_LEFT:
		{
			m_gVehicleSteering += m_steeringIncrement;
			if (m_gVehicleSteering > m_steeringClamp)
				m_gVehicleSteering = m_steeringClamp;
			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(5, m_gVehicleSteering);
			}

			break;
		}
		case DIR_RIGHT:
		{
			m_gVehicleSteering -= m_steeringIncrement;
			if (m_gVehicleSteering < -m_steeringClamp)
				m_gVehicleSteering = -m_steeringClamp;
			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(5, m_gVehicleSteering);
			}
			break;
		}
		case DIR_FORWARD:
		{
			m_gEngineForce = m_maxEngineForce;
			m_gBreakingForce = 0.f;

			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(3, m_gEngineForce);
			}

			break;
		}
		case DIR_BACKWARD:
		{
			m_gEngineForce = -m_maxEngineForce;
			m_gBreakingForce = 0.f;

			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(3, m_gEngineForce);
			}

			break;
		}
	}
but result is very wrong - wheels are not rotates it self, but it revolution with pBodyA - chassis of the car
how can i fix this? i can't find what is wrong
kcjsend2
Posts: 15
Joined: Wed Jun 30, 2021 9:10 am

Re: How can I control Throttle and Steering of Hinge2Vehicle?

Post by kcjsend2 »

I fixed it! it was just little mistake. here's fixed code :

Code: Select all


void CVehiclePlayer::Update(float fTimeElapsed, btDiscreteDynamicsWorld* pbtDynamicsWorld, DWORD dwBehave)
{
	switch (dwBehave)
	{
		case DIR_LEFT:
		{
			m_gVehicleSteering += m_steeringIncrement * fTimeElapsed;
			if (m_gVehicleSteering > m_steeringClamp)
				m_gVehicleSteering = m_steeringClamp;
			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(5, m_gVehicleSteering);
			}

			break;
		}
		case DIR_RIGHT:
		{
			m_gVehicleSteering -= m_steeringIncrement * fTimeElapsed;
			if (m_gVehicleSteering < -m_steeringClamp)
				m_gVehicleSteering = -m_steeringClamp;
			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(5, m_gVehicleSteering);
			}
			break;
		}
		case DIR_FORWARD:
		{
			m_gEngineForce += m_EngineForceIncrement * fTimeElapsed;
			m_gBreakingForce = 0.f;

			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(3, m_gEngineForce);
			}

			break;
		}
		case DIR_BACKWARD:
		{
			m_gEngineForce -= m_EngineForceIncrement * fTimeElapsed;
			m_gBreakingForce = 0.f;

			for (int i = 0; i < 2; ++i)
			{
				m_pWheel[i]->getHinge()->setTargetVelocity(3, m_gEngineForce);
			}

			break;
		}
	}
}
Post Reply