void buttonDown(Gosu::Button btn) { if (onStartScreen) { onStartScreen = false; level = 1; player.resetPlayer(); loadLevel(level, true); } else if (player.isDead()) { onStartScreen = true; level = 0; round = 1; loadLevel(level, true); } else { if (btn == Gosu::kbEscape) close(); else if ((btn == Gosu::kbReturn || btn == Gosu::kbEnter) && !transitioning) { if (paused) paused = false; else paused = true; } if (!paused && !shot.active() && !player.isOnFire()) { if (btn == Gosu::kbSpace && player.isStandingStill()) { player.shoot(shot, enemies, environment); } else if (btn == Gosu::kbW) { player.moveGunUp(); player.moveGunUp(); } else if (btn == Gosu::kbS) { player.moveGunDown(); player.moveGunDown(); } else if (btn == Gosu::kbA) { player.moveGunUp(); player.moveGunUp(); player.moveGunDown(); player.turnLeft(); } else if (btn == Gosu::kbD) { player.moveGunUp(); player.moveGunUp(); player.moveGunDown(); player.turnRight(); } } } }
void update() { if (transitioning) { if (difftime(time(NULL), startTime) >= 5) { transitioning = false; player.setAscending(true); player.setStandingStill(); round += 1; level = 1; loadLevel(1, true); } } else if (!onStartScreen && !paused) { player.songUpdate(); std::list<Enemy>::iterator cur; // Check if the player is on a set of stairs if (playerOnStairs(player, up) && player.isAscending()) { if (level < 3) { level += 1; player.setScore(player.getScore() + 5); } loadLevel(level, true); } if (playerOnStairs(player, down) && (player.isAscending() == false)) { if (level > 1) { level -= 1; player.setScore(player.getScore() + 5); } else { time(&startTime); transitioning = true; level = -1; } loadLevel(level, false); } // Check for collisions player.checkForEnemyCollisions(enemies); player.checkForItemCollisions(items); if (!shot.active() && !player.isOnFire()) { // Move the player if (input().down(Gosu::kbUp) || input().down(Gosu::gpUp)) { if (canMoveDirection(player.x(), player.y(), environment, UP)) player.moveUp(); } else if (input().down(Gosu::kbDown) || input().down(Gosu::gpDown)) { if (canMoveDirection(player.x(), player.y(), environment, DOWN)) player.moveDown(); } else if (input().down(Gosu::kbLeft) || input().down(Gosu::gpLeft)) { if (canMoveDirection(player.x(), player.y(), environment, LEFT) && player.getCurrentWalkCycleDirection() == LEFT) player.moveLeft(); else player.turnLeft(); } else if (input().down(Gosu::kbRight) || input().down(Gosu::gpRight)) { if (canMoveDirection(player.x(), player.y(), environment, RIGHT) && player.getCurrentWalkCycleDirection() == RIGHT) player.moveRight(); else player.turnRight(); } } // Move the player player.move(); // Move the enemy cur = enemies.begin(); while (cur != enemies.end()) { cur->move(environment); ++cur; } } }