Player::Player(float x, float y, float speedX, float speedY, unsigned int number, std::string sprite, PlayerModel* model, unsigned int lives ) : DynamicEntity( x, y, speedX, speedY ), _playerNumber( number ), _lives( lives ), _score( 0 ) ,_model( model ), _spriteResourceKey( sprite ), _weapon( new Weapon("Standard laser", "sprites/shot", GameManager::getInstance()->getPlayerOptions()->shotDelay ) ), _controller( GamepadController::getNewGamepad( 0 ) ), _invincible( false ), _invincibilityTimerBase(1500), _invincibilityTimer( 0 ), _alphaFlash( 0.5f ) { setCurrentWeapon( _weapon ); _weapon->setShotSpeed( GameManager::getInstance()->getPlayerOptions()->shotSpeedX, GameManager::getInstance()->getPlayerOptions()->shotSpeedY ); if (_controller == NULL) { _controller = new KeyboardController(); } GameManager* manager = GameManager::getInstance(); clan::Canvas& gc = manager->getCanvas(); _currentSprite = clan::Sprite::resource( gc, sprite, manager->getResourceManager() ); std::string descriptor = sprite.substr( sprite.find_last_of( "/" ) + 1 ); for (int i = 0; i < _currentSprite.get_frame_count(); i++) { std::string collisionResource = clan::string_format( "outlines/player/%1_00%2", descriptor, i ); _currentOutlines.push_back( clan::CollisionOutline::load( collisionResource.c_str(), manager->getResourceDocument() ) ); } }
void inputHandler() { while (isRunning()) { try { if(SDL_PollEvent(&event)) { switch (event.type) { case SDL_QUIT: setRunning(false); break; case SDL_MOUSEBUTTONDOWN: println("Mouse button pressed"); switch (event.button.button) { case SDL_BUTTON_WHEELDOWN: setCurrentWeapon(((((getCurrentWeapon() - 1) > 9001) && ((getCurrentWeapon() - 1) < 9007)) ? (getCurrentWeapon() - 1) : #if mouseWheelWeaponChangeScrollLoop 9006 #else getCurrentWeapon() #endif )); break; case SDL_BUTTON_WHEELUP: setCurrentWeapon(((((getCurrentWeapon() + 1) > 9001) && ((getCurrentWeapon() + 1) < 9007)) ? (getCurrentWeapon() + 1) : #if mouseWheelWeaponChangeScrollLoop 9006 #else getCurrentWeapon() #endif )); break; case SDL_BUTTON_LEFT: case SDL_BUTTON_RIGHT: fireWeapon(); } break; case SDL_MOUSEBUTTONUP: println("Mouse button released"); setFiring(false); break; case SDL_MOUSEMOTION: SDL_GetMouseState(&mouse_x,&mouse_y); #if debugMouseMovement printf("Mouse movement detected. X: %d Y: %d\n",mouse_x,mouse_y); #endif break; case SDL_KEYDOWN: SDLKey keyPressed = event.key.keysym.sym; switch (keyPressed) { case SDLK_ESCAPE: println("Escape key pressed."); case SDLK_F12: //in case escape doesn't get detected, we can also use F12. setRunning(false); break; case SDLK_F1: setCurrentWeapon(RIFLE); break; case SDLK_F2: setCurrentWeapon(MACHINE_GUN); break; case SDLK_F3: setCurrentWeapon(SHOTGUN); break; case SDLK_F4: setCurrentWeapon(MACHINE_SHOTGUN); break; case SDLK_F5: setCurrentWeapon(FLAMETHROWER); break; case SDLK_HOME: toggleAlphaVisible(); println("Home key pressed. Toggling alpha test visibility."); break; case SDLK_DELETE: println("Delete key pressed. Removing all damage, and resetting the game"); resetGame(); break; case SDLK_F11: println("F11 pressed. Toggling fullscreen..."); toggleFullscreen(); break; default: printf("An unhandled key was pressed: "); displayKey(&event.key); } break; } } } catch(...) { println("Exception occurred handling input..."); } } }