| 255 | } |
| 256 | |
| 257 | void Car::update(){ |
| 258 | btTransform trans; |
| 259 | vehicleMotionState->getWorldTransform(trans); |
| 260 | car_body_model.position = Utils::bulletToGlm(trans.getOrigin()) + (car_body_model.initialPosition * glm::inverse(Utils::bulletToGlm(trans.getRotation()))); |
| 261 | car_body_model.orientation = Utils::bulletToGlm(trans.getRotation()); |
| 262 | car_body_model.update(); |
| 263 | |
| 264 | // Might as well apply the body transform to the Miscellaneous models |
| 265 | for(auto &misc_model : misc_models){ |
| 266 | misc_model.position = Utils::bulletToGlm(trans.getOrigin()) + (misc_model.initialPosition * glm::inverse(Utils::bulletToGlm(trans.getRotation()))); |
| 267 | misc_model.orientation = Utils::bulletToGlm(trans.getRotation()); |
| 268 | misc_model.update(); |
| 269 | } |
| 270 | |
| 271 | for (int i = 0; i <m_vehicle->getNumWheels(); i++) { |
| 272 | m_vehicle->updateWheelTransform(i, true); |
| 273 | trans = m_vehicle->getWheelInfo(i).m_worldTransform; |
| 274 | switch(i){ |
| 275 | case 0: |
| 276 | left_front_wheel_model.position = Utils::bulletToGlm(trans.getOrigin()); |
| 277 | left_front_wheel_model.orientation = Utils::bulletToGlm(trans.getRotation()); |
| 278 | left_front_wheel_model.update(); |
| 279 | break; |
| 280 | case 1: |
| 281 | right_front_wheel_model.position = Utils::bulletToGlm(trans.getOrigin()); |
| 282 | right_front_wheel_model.orientation = Utils::bulletToGlm(trans.getRotation()); |
| 283 | right_front_wheel_model.update(); |
| 284 | break; |
| 285 | case 2: |
| 286 | left_rear_wheel_model.position = Utils::bulletToGlm(trans.getOrigin()); |
| 287 | left_rear_wheel_model.orientation = Utils::bulletToGlm(trans.getRotation()); |
| 288 | left_rear_wheel_model.update(); |
| 289 | break; |
| 290 | case 3: |
| 291 | right_rear_wheel_model.position = Utils::bulletToGlm(trans.getOrigin()); |
| 292 | right_rear_wheel_model.orientation = Utils::bulletToGlm(trans.getRotation()); |
| 293 | right_rear_wheel_model.update(); |
| 294 | break; |
| 295 | default: |
| 296 | ASSERT(false, "More than 4 wheels currently unsupported"); |
| 297 | break; |
| 298 | } |
| 299 | } |
| 300 | |
| 301 | // Set back wheels steering value |
| 302 | int wheelIndex = 2; |
| 303 | m_vehicle->applyEngineForce(gEngineForce,wheelIndex); |
| 304 | m_vehicle->setBrake(gBreakingForce,wheelIndex); |
| 305 | |
| 306 | wheelIndex = 3; |
| 307 | m_vehicle->applyEngineForce(gEngineForce,wheelIndex); |
| 308 | m_vehicle->setBrake(gBreakingForce,wheelIndex); |
| 309 | |
| 310 | // update front wheels steering value |
| 311 | if (steerRight) |
| 312 | { |
| 313 | gVehicleSteering -= steeringIncrement; |
| 314 | if (gVehicleSteering < -steeringClamp) gVehicleSteering = -steeringClamp; |
no test coverage detected