/** * \fn bool manageEvent(SDL_Event event, Viewport* viewport) * \brief Manage an event. * * \param event The event to manage. * \param viewport The viewport that can be moved. * \return False if the the game ends, true if not. */ bool manageEvent(SDL_Event event, Viewport* viewport, Events *flags) { bool isInPlay = true; switch(event.type) { // Quit game case SDL_QUIT: isInPlay = false; break; // Key pressed case SDL_KEYDOWN: switch(event.key.keysym.sym) { // Quit game case SDLK_ESCAPE: isInPlay = false; break; // Move view case SDLK_UP: moveViewport(viewport, UP); break; case SDLK_DOWN: moveViewport(viewport, DOWN); break; case SDLK_LEFT: moveViewport(viewport, LEFT); break; case SDLK_RIGHT: moveViewport(viewport, RIGHT); break; default: break; } break; // Mouse left click case SDL_MOUSEBUTTONDOWN: if(event.button.button == SDL_BUTTON_LEFT) { Case* caseClicked = whichCase(event.button.x, event.button.y); TypeTo* simpleTowerType = flags->selectedTower; Case *viewportOffset = whichCase(viewport->mapsurface.x,viewport->mapsurface.y); int mapPositionX = caseClicked->xx + viewportOffset->xx; int mapPositionY = caseClicked->yy + viewportOffset->yy; Tower *tower = createTower(mapPositionX, mapPositionY, simpleTowerType); if(tower){ flags->enemy_Path_Calculation = true; pushList((void*)flags->towerList,tower); drawTower(tower); } } break; default: break; } return isInPlay; }
/** * \fn bool manageEvent(SDL_Event event, Viewport* viewport) * \brief Manage an event. * * \param event The event to manage. * \param viewport The viewport that can be moved. * \return False if the the game ends, true if not. */ void manageEvent(SDL_Event event, Viewport* viewport, Events *flags, Action *actionList){ switch(event.type) { // Quit game case SDL_QUIT: actionList[QUIT].boolean = (void*)1; break; // Key pressed case SDL_KEYDOWN: switch(event.key.keysym.sym) { // Quit game case SDLK_ESCAPE: actionList[QUIT].boolean = (void*)1; break; // Move view case SDLK_UP: actionList[ARROW_UP].boolean = (void*)1; break; case SDLK_DOWN: actionList[ARROW_DOWN].boolean = (void*)1; break; case SDLK_LEFT: actionList[ARROW_LEFT].boolean = (void*)1; break; case SDLK_RIGHT: actionList[ARROW_RIGHT].boolean = (void*)1; break; default: break; } break; // Key released case SDL_KEYUP: switch(event.key.keysym.sym) { // Stop Moving view case SDLK_UP: actionList[ARROW_UP].boolean = NULL; break; case SDLK_DOWN: actionList[ARROW_DOWN].boolean = NULL; break; case SDLK_LEFT: actionList[ARROW_LEFT].boolean = NULL; break; case SDLK_RIGHT: actionList[ARROW_RIGHT].boolean = NULL; break; default: break; } // Mouse left click case SDL_MOUSEBUTTONDOWN: if(event.button.button == SDL_BUTTON_LEFT) { actionList[CASE_CLICKED].boolean = whichCase(viewport->map, event.button.x, event.button.y); } break; default: break; } }