//----------------------------------------------------------------------------- void InputManager::handleStaticAction(int key, int value) { static bool control_is_pressed = false; World *world = World::getWorld(); // When no players... a cutscene if (race_manager->getNumPlayers() == 0 && world != NULL && value > 0 && (key == KEY_SPACE || key == KEY_RETURN)) { world->onFirePressed(NULL); } switch (key) { #ifdef DEBUG // Special debug options for profile mode: switch the // camera to show a different kart. case KEY_KEY_1: case KEY_KEY_2: case KEY_KEY_3: case KEY_KEY_4: case KEY_KEY_5: case KEY_KEY_6: case KEY_KEY_7: case KEY_KEY_8: case KEY_KEY_9: { if(!ProfileWorld::isProfileMode() || !world) break; int kart_id = key - KEY_KEY_1; if(kart_id<0 || kart_id>=(int)world->getNumKarts()) break; for(unsigned int i=0; i<world->getNumKarts(); i++) { if(world->getKart(i)->getCamera()) { world->getKart(i)->getCamera() ->changeOwner(world->getKart(kart_id)); } } break; } #endif case KEY_CONTROL: case KEY_RCONTROL: case KEY_LCONTROL: case KEY_RMENU: case KEY_LMENU: case KEY_LWIN: control_is_pressed = value!=0; break; case KEY_KEY_I: { if (!world || !UserConfigParams::m_artist_debug_mode) break; AbstractKart* kart = world->getLocalPlayerKart(0); if (kart == NULL) break; kart->flyUp(); break; } case KEY_KEY_K: { if (!world || !UserConfigParams::m_artist_debug_mode) break; AbstractKart* kart = world->getLocalPlayerKart(0); if (kart == NULL) break; kart->flyDown(); break; } case KEY_PRINT: if (value != 0) irr_driver->requestScreenshot(); break; case KEY_F1: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_BUBBLEGUM, 10000); #ifdef FORCE_RESCUE_ON_FIRST_KART // Can be useful for debugging places where the AI gets into // a rescue loop: rescue, drive, crash, rescue to same place world->getKart(0)->forceRescue(); #endif // FIXME: remove after testing the animated plunger world->getLocalPlayerKart(0)->blockViewWithPlunger(); } break; case KEY_F2: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_PLUNGER, 10000); } break; case KEY_F3: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_CAKE, 10000); } break; case KEY_F4: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_SWITCH, 10000); } break; case KEY_F5: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_BOWLING, 10000); } break; case KEY_F6: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_BUBBLEGUM, 10000); } break; case KEY_F7: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_ZIPPER, 10000); } break; case KEY_F8: if (UserConfigParams::m_artist_debug_mode && value && world) { if (control_is_pressed) { RaceGUIBase* gui = world->getRaceGUI(); if (gui != NULL) gui->m_enabled = !gui->m_enabled; const int count = World::getWorld()->getNumKarts(); for (int n=0; n<count; n++) { World::getWorld()->getKart(n)->getNode() ->setVisible(gui->m_enabled); } } else { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setEnergy(100.0f); } } break; case KEY_F9: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); if(control_is_pressed && race_manager->getMinorMode()!= RaceManager::MINOR_MODE_3_STRIKES) kart->setPowerup(PowerupManager::POWERUP_RUBBERBALL, 10000); else kart->setPowerup(PowerupManager::POWERUP_SWATTER, 10000); } break; case KEY_F10: if(world && value) { if(control_is_pressed && ReplayRecorder::get()) ReplayRecorder::get()->Save(); else history->Save(); } break; case KEY_F11: if (UserConfigParams::m_artist_debug_mode && value && control_is_pressed && world) { world->getPhysics()->nextDebugMode(); } break; case KEY_F12: if(value) UserConfigParams::m_display_fps = !UserConfigParams::m_display_fps; break; case KEY_KEY_P: if (UserConfigParams::m_artist_debug_mode && value && control_is_pressed) UserConfigParams::m_profiler_enabled = !UserConfigParams::m_profiler_enabled; break; default: break; } // switch }
//----------------------------------------------------------------------------- void InputManager::handleStaticAction(int key, int value) { static bool control_is_pressed = false; World *world = World::getWorld(); // When no players... a cutscene if (race_manager->getNumPlayers() == 0 && world != NULL && value > 0 && (key == KEY_SPACE || key == KEY_RETURN)) { world->onFirePressed(NULL); } if (world != NULL && UserConfigParams::m_artist_debug_mode && control_is_pressed && value > 0) { if (Debug::handleStaticAction(key)) return; } // TODO: move debug shortcuts to Debug::handleStaticAction switch (key) { #ifdef DEBUG // Special debug options for profile mode: switch the // camera to show a different kart. case KEY_KEY_1: case KEY_KEY_2: case KEY_KEY_3: case KEY_KEY_4: case KEY_KEY_5: case KEY_KEY_6: case KEY_KEY_7: case KEY_KEY_8: case KEY_KEY_9: { if(!ProfileWorld::isProfileMode() || !world) break; int kart_id = key - KEY_KEY_1; if(kart_id<0 || kart_id>=(int)world->getNumKarts()) break; Camera::getCamera(0)->setKart(world->getKart(kart_id)); break; } #endif case KEY_CONTROL: case KEY_RCONTROL: case KEY_LCONTROL: case KEY_RMENU: case KEY_LMENU: case KEY_LWIN: control_is_pressed = value!=0; break; // Flying up and down case KEY_KEY_I: { if (!world || !UserConfigParams::m_artist_debug_mode) break; AbstractKart* kart = world->getLocalPlayerKart(0); if (kart == NULL) break; kart->flyUp(); break; } case KEY_KEY_K: { if (!world || !UserConfigParams::m_artist_debug_mode) break; AbstractKart* kart = world->getLocalPlayerKart(0); if (kart == NULL) break; kart->flyDown(); break; } // Moving the first person camera case KEY_KEY_W: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *cam = Camera::getActiveCamera(); core::vector3df vel(cam->getLinearVelocity()); vel.Z = value ? cam->getMaximumVelocity() : 0; cam->setLinearVelocity(vel); } break; } case KEY_KEY_S: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *cam = Camera::getActiveCamera(); core::vector3df vel(cam->getLinearVelocity()); vel.Z = value ? -cam->getMaximumVelocity() : 0; cam->setLinearVelocity(vel); } break; } case KEY_KEY_D: { if (world && !UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *cam = Camera::getActiveCamera(); core::vector3df vel(cam->getLinearVelocity()); vel.X = value ? -cam->getMaximumVelocity() : 0; cam->setLinearVelocity(vel); } break; } case KEY_KEY_A: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *cam = Camera::getActiveCamera(); core::vector3df vel(cam->getLinearVelocity()); vel.X = value ? cam->getMaximumVelocity() : 0; cam->setLinearVelocity(vel); } break; } case KEY_KEY_R: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *cam = Camera::getActiveCamera(); core::vector3df vel(cam->getLinearVelocity()); vel.Y = value ? cam->getMaximumVelocity() : 0; cam->setLinearVelocity(vel); } break; } case KEY_KEY_F: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *cam = Camera::getActiveCamera(); core::vector3df vel(cam->getLinearVelocity()); vel.Y = value ? -cam->getMaximumVelocity() : 0; cam->setLinearVelocity(vel); } break; } // Rotating the first person camera case KEY_KEY_Q: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *active_cam = Camera::getActiveCamera(); active_cam->setAngularVelocity(value ? UserConfigParams::m_fpscam_max_angular_velocity : 0.0f); } break; } case KEY_KEY_E: { if (world && UserConfigParams::m_artist_debug_mode && Camera::isFPS() ) { Camera *active_cam = Camera::getActiveCamera(); active_cam->setAngularVelocity(value ? -UserConfigParams::m_fpscam_max_angular_velocity : 0); } break; } case KEY_SNAPSHOT: case KEY_PRINT: // on windows we don't get a press event, only release. So // save on release only (to avoid saving twice on other platforms) if (value ==0 ) irr_driver->requestScreenshot(); break; /* case KEY_F1: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); if (control_is_pressed) kart->setPowerup(PowerupManager::POWERUP_SWATTER, 10000); else kart->setPowerup(PowerupManager::POWERUP_RUBBERBALL, 10000); #ifdef FORCE_RESCUE_ON_FIRST_KART // Can be useful for debugging places where the AI gets into // a rescue loop: rescue, drive, crash, rescue to same place world->getKart(0)->forceRescue(); #endif } break; case KEY_F2: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_PLUNGER, 10000); } break; case KEY_F3: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_CAKE, 10000); } break; case KEY_F4: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_SWITCH, 10000); } break; case KEY_F5: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_BOWLING, 10000); } break; case KEY_F6: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_BUBBLEGUM, 10000); } break; case KEY_F7: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setPowerup(PowerupManager::POWERUP_ZIPPER, 10000); } break; case KEY_F8: if (UserConfigParams::m_artist_debug_mode && value && world) { if (control_is_pressed) { RaceGUIBase* gui = world->getRaceGUI(); if (gui != NULL) gui->m_enabled = !gui->m_enabled; const int count = World::getWorld()->getNumKarts(); for (int n=0; n<count; n++) { if(World::getWorld()->getKart(n)->getController()->isPlayerController()) World::getWorld()->getKart(n)->getNode() ->setVisible(gui->m_enabled); } } else { AbstractKart* kart = world->getLocalPlayerKart(0); kart->setEnergy(100.0f); } } break; case KEY_F9: if (UserConfigParams::m_artist_debug_mode && world) { AbstractKart* kart = world->getLocalPlayerKart(0); if(control_is_pressed && race_manager->getMinorMode()!= RaceManager::MINOR_MODE_3_STRIKES) kart->setPowerup(PowerupManager::POWERUP_RUBBERBALL, 10000); else kart->setPowerup(PowerupManager::POWERUP_SWATTER, 10000); } break; */ case KEY_F10: if(world && value) { if(control_is_pressed) ReplayRecorder::get()->save(); else history->Save(); } break; /* case KEY_F11: if (UserConfigParams::m_artist_debug_mode && value && control_is_pressed && world) { world->getPhysics()->nextDebugMode(); } break; */ case KEY_F12: if(value) UserConfigParams::m_display_fps = !UserConfigParams::m_display_fps; break; default: break; } // switch } // handleStaticAction