diff --git a/src/Main.cpp b/src/Main.cpp index 7ec90de..454ec87 100644 --- a/src/Main.cpp +++ b/src/Main.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -152,7 +153,9 @@ int main() int shape_height = WINDOW_HEIGHT / GRID_HEIGHT; sf::RectangleShape shape(sf::Vector2f(shape_width, shape_height)); - bool snap, rotate; + bool snap, rotate, move_left, move_right; + sf::Clock update_clock; + sf::Clock move_clock; while (window.isOpen()) { @@ -171,6 +174,12 @@ int main() case sf::Keyboard::Up: rotate = true; break; + case sf::Keyboard::Left: + move_left = true; + break; + case sf::Keyboard::Right: + move_right = true; + break; default: break; } @@ -180,13 +189,20 @@ int main() } } - window.clear(); + bool is_update_frame = update_clock.getElapsedTime().asMilliseconds() > 250; + if (is_update_frame) { + update_clock.restart(); + } - // Fast forward - window.setFramerateLimit(sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down) ? 8 : 6); + bool is_move_frame = move_clock.getElapsedTime().asMilliseconds() > 125; + if (is_move_frame) { + move_clock.restart(); + } + + window.clear(); // Rotation - if (rotate) { + if (rotate && is_move_frame) { block.rotation_state++; // Check to see if new rotation state is overlapping any tiles for (auto tile : block.get_tiles()) { @@ -199,23 +215,29 @@ int main() } // Horizontal movement - int movement = 0; - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left)) - movement--; - if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right)) - movement++; - bool obstructed = false; - if (movement != 0) { - for (auto tile : block.get_tiles()) { - if (tile.x <= 0 || tile.x >= GRID_WIDTH - 1 || grid[tile.y][tile.x + movement]) { - obstructed = true; - goto after_movement_loop; + if (is_move_frame) { + int movement = 0; + if (move_left || sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left)) { + movement--; + move_left = false; + } + if (move_right ||sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right)) { + movement++; + move_right = false; + } + bool obstructed = false; + if (movement != 0) { + for (auto tile : block.get_tiles()) { + if (tile.x + movement < 0 || tile.x + movement >= GRID_WIDTH || grid[tile.y][tile.x + movement]) { + obstructed = true; + goto after_movement_loop; + } } } - } - after_movement_loop: - if (!obstructed) { - block.position.x += movement; + after_movement_loop: + if (!obstructed) { + block.position.x += movement; + } } // Snapping @@ -278,7 +300,7 @@ int main() } } block = Block(); - } else { + } else if(is_update_frame) { block.position.y++; }