#include "handler.h" #include "global.h" // --------------------------------------------------------------------------- // // PLAY HANDLER // // --------------------------------------------------------------------------- PlayHandler::PlayHandler() : EventHandler(), mCanFire(true), mFireCounter(0), mRateOfFire(5) { } void PlayHandler::process(double dt) { // don't process input if the player is not alive if (Global::ship->getState() != ScreenObject::ALIVE) return; // set the "can fire" flag mFireCounter += dt; if (mFireCounter >= mRateOfFire) mCanFire = true, mFireCounter = 0; // dispatch events if (mouseMotion()) { Global::ship->rotation = atan2((double) (mouseX()-(Screen::mDisplay.x>>1)), (double) ((Screen::mDisplay.y>>1)-mouseY())); Global::ship->rotate(0); } else { if (keyPressed(SDLK_RIGHT)) Global::ship->rotate(RAD(5) * dt); if (keyPressed(SDLK_LEFT)) Global::ship->rotate(RAD(-5) * dt); } if (keyPressed(SDLK_UP) || mouseButton(1)) Global::ship->accelerate(dt); if (keyPressed(SDLK_DOWN) || mouseButton(3)) Global::ship->decelerate(dt); if (mCanFire && (keyPressed(SDLK_a))) Global::ship->fire(), mCanFire = false; } // --------------------------------------------------------------------------- // // MENU HANDLER // // --------------------------------------------------------------------------- MenuHandler::MenuHandler() : EventHandler() { } extern void MenuUp(); extern void MenuDown(); extern void MenuExec(Controller*); static bool canmenu = true; static double menutm = 0; static bool mup=false, mdown=false, mexec=false; void MenuHandler::process(double dt) { menutm += dt; if (menutm > 10) { menutm = 0; canmenu = true; } if (!canmenu) return; else if (mup) MenuUp(); else if (mdown) MenuDown(); else if (mexec) MenuExec(mController); mup = false, mdown = false, mexec = false; canmenu = false; } void MenuHandler::pressKey(SDLKey c) { mup = false, mdown = false, mexec = false; switch (c) { case SDLK_RETURN: case SDLK_SPACE: case SDLK_KP_ENTER: mexec = true; break; case SDLK_UP: mup = true; break; case SDLK_DOWN: mdown = true; break; default: break; } }