| 343 | |
| 344 | |
| 345 | void 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 | |
| 397 | void Car::applyAccelerationForce(bool accelerate, bool reverse) |
| 398 | { |
nothing calls this directly
no test coverage detected