void RaycastCar::updateVehicle( btScalar step ) { m_currentVehicleSpeedKmHour = btScalar(3.6f) * getRigidBody()->getLinearVelocity().length(); const btTransform & chassisTrans = getChassisWorldTransform(); btVector3 forwardW(chassisTrans.getBasis()[0][m_indexForwardAxis], chassisTrans.getBasis()[1][m_indexForwardAxis], chassisTrans.getBasis()[2][m_indexForwardAxis]); if (forwardW.dot(getRigidBody()->getLinearVelocity()) < btScalar(0.0f)) m_currentVehicleSpeedKmHour *= btScalar(-1.0f); for (int i = 0; i < getNumWheels(); i++) { updateWheelTransform(i, false); btScalar depth; depth = rayCast(m_wheelInfo[i]); } update_suspension(step); update_engine(step); update_forces(step); apply_impulses(step); }
int main(int argc, char *argv[]) { int time; char method[SCREEN_UPDATE_STR_LEN]; char fps_text[16]; if (argc > 1) { if (strstr(argv[1], "help")) { printf("Type \"kwestkingdom\" to play!\n"); exit(0); } } if (!init_kwestkingdom()) { return 1; } init_engine(); /** * Reset the timers just before the game begins. */ reset_timer(); /** * BEGIN MAIN LOOP */ while (!quitting) { while (get_ticks() == 0) { rest(1); } while (get_ticks() > 0) { time = get_ticks(); /** * UPDATE */ update_engine(); decrease_timer(); if (time <= get_ticks()) { break; } } /** * DRAW */ paint_engine(grab_canvas()); /** * Show FPS */ sprintf(fps_text, "FPS %d", get_fps()); show_text(grab_canvas(), fps_text, 10, 10, WHITE, BLACK); /** * Show the method of screen updating. */ find_screen_update_method(method); show_text( grab_canvas(), method, grab_tile_size() / 5, /* x */ grab_canvas_height() - (grab_tile_size() / 2), /* y */ WHITE, BLACK ); /** * Show all of the new screen changes */ refresh_screen(); mark_frame_complete(); } /** * END MAIN LOOP */ /** * Cleanup */ stop_engine(); stop_screen(); stop_resources(); check_memory(); return 0; }