MCPcopy Create free account
hub / github.com/OpenNFS/OpenNFS / genRaycasts

Method genRaycasts

src/Physics/Car.cpp:345–395  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

343
344
345void Car::genRaycasts(btDynamicsWorld* dynamicsWorld){
346 btTransform trans;
347 vehicleMotionState->getWorldTransform(trans);
348 glm::vec3 carBodyPosition = Utils::bulletToGlm(trans.getOrigin());
349
350 glm::vec3 carUp = car_body_model.ModelMatrix * glm::vec4(0,1,0,0);
351 glm::vec3 carRight = car_body_model.ModelMatrix * glm::vec4(1,0,0,0);
352 glm::vec3 carForward = car_body_model.ModelMatrix * glm::vec4(0,0,-1,0);
353
354 forwardCastPosition = carBodyPosition + carForward;
355 upCastPosition = carBodyPosition + carUp;
356 rightCastPosition = carBodyPosition + (carRight + carForward);
357 leftCastPosition = carBodyPosition - (carRight - carForward);
358
359 btCollisionWorld::ClosestRayResultCallback ForwardRayCallback(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(forwardCastPosition));
360 btCollisionWorld::ClosestRayResultCallback UpRayCallback(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(upCastPosition));
361 btCollisionWorld::ClosestRayResultCallback RightRayCallback(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(rightCastPosition));
362 btCollisionWorld::ClosestRayResultCallback LeftRayCallback(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(leftCastPosition));
363
364 // Don't Raycast against other opponents for now. Ghost through them.
365 ForwardRayCallback.m_collisionFilterMask = COL_TRACK;
366 UpRayCallback.m_collisionFilterMask = COL_TRACK;
367 RightRayCallback.m_collisionFilterMask = COL_TRACK;
368 LeftRayCallback.m_collisionFilterMask = COL_TRACK;
369
370 dynamicsWorld->rayTest(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(forwardCastPosition * castDistance), ForwardRayCallback);
371 dynamicsWorld->rayTest(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(upCastPosition * castDistance), UpRayCallback);
372 dynamicsWorld->rayTest(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(rightCastPosition * castDistance), RightRayCallback);
373 dynamicsWorld->rayTest(Utils::glmToBullet(carBodyPosition), Utils::glmToBullet(leftCastPosition * castDistance), LeftRayCallback);
374
375 if(ForwardRayCallback.hasHit()){
376 forwardDistance = glm::distance(carBodyPosition, glm::vec3(ForwardRayCallback.m_hitPointWorld.getX(), ForwardRayCallback.m_hitPointWorld.getY(),ForwardRayCallback.m_hitPointWorld.getZ()));
377 } else {
378 forwardDistance = castDistance;
379 }
380 if(UpRayCallback.hasHit()){
381 upDistance = glm::distance(carBodyPosition, glm::vec3(ForwardRayCallback.m_hitPointWorld.getX(), ForwardRayCallback.m_hitPointWorld.getY(),ForwardRayCallback.m_hitPointWorld.getZ()));
382 } else {
383 upDistance = castDistance;
384 }
385 if(RightRayCallback.hasHit()){
386 rightDistance = glm::distance(carBodyPosition, glm::vec3(RightRayCallback.m_hitPointWorld.getX(), RightRayCallback.m_hitPointWorld.getY(),RightRayCallback.m_hitPointWorld.getZ()));
387 } else {
388 rightDistance = castDistance;
389 }
390 if(LeftRayCallback.hasHit()){
391 leftDistance = glm::distance(carBodyPosition, glm::vec3(LeftRayCallback.m_hitPointWorld.getX(), LeftRayCallback.m_hitPointWorld.getY(),LeftRayCallback.m_hitPointWorld.getZ()));
392 } else {
393 leftDistance = castDistance;
394 }
395}
396
397void Car::applyAccelerationForce(bool accelerate, bool reverse)
398{

Callers

nothing calls this directly

Calls 2

bulletToGlmFunction · 0.85
glmToBulletFunction · 0.85

Tested by

no test coverage detected