From a136a6ebf71c285b06a5cb4b940d093e86dcfcf7 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Tue, 16 Jan 2024 19:07:25 +0200 Subject: [PATCH] feat(game): disable movement while paused --- src/game/screens/game.py | 13 ++++++++++++- src/game/screens/tetris.py | 29 ++++++++++++++--------------- src/game/timer.py | 8 ++++---- 3 files changed, 30 insertions(+), 20 deletions(-) diff --git a/src/game/screens/game.py b/src/game/screens/game.py index 6ef5d11..42026f0 100644 --- a/src/game/screens/game.py +++ b/src/game/screens/game.py @@ -1,6 +1,7 @@ from typing import Any import pygame +from loguru import logger from utils import CONFIG, Figure, GameMode from .base import BaseScreen @@ -34,6 +35,7 @@ class Game(BaseScreen): self.settings = settings self._initialize_game_components() self._start_background_music() + self.paused = False def draw(self) -> None: """ @@ -66,7 +68,16 @@ class Game(BaseScreen): def pause(self) -> None: """Pause the game.""" - self.tetris.pause() + if self.paused: + logger.debug("Unpause") + self.paused = False + self.tetris.unfreeze() + self.music.play(-1, fade_ms=100) + else: + logger.debug("Pause") + self.paused = True + self.tetris.freeze() + self.music.fadeout(100) def _initialize_game_components(self) -> None: """Initialize game-related components.""" diff --git a/src/game/screens/tetris.py b/src/game/screens/tetris.py index 9be94b6..b45e8bf 100644 --- a/src/game/screens/tetris.py +++ b/src/game/screens/tetris.py @@ -91,10 +91,11 @@ class Tetris(BaseScreen): def handle_events(self) -> None: """Handle player input events.""" - self._handle_movement_keys() - self._handle_rotation_keys() - self._handle_down_key() - self._handle_drop_key() + if not self.paused: + self._handle_movement_keys() + self._handle_rotation_keys() + self._handle_down_key() + self._handle_drop_key() def move_down(self) -> bool: """ @@ -164,17 +165,15 @@ class Tetris(BaseScreen): logger.info(f"Restarting the game. Score was {self.score}") self._reset_game_state() - def pause(self) -> None: - """Pause the game.""" - self.paused: bool - if self.paused: - logger.debug("Unpause") - self.paused = False - self.timers.unpause() - else: - logger.debug("Pause") - self.paused = True - self.timers.pause() + def freeze(self) -> None: + """Freeze all timers.""" + self.timers.freeze() + self.paused = True + + def unfreeze(self) -> None: + """Unfreeze all timers.""" + self.timers.unfreeze() + self.paused = False def mute(self) -> None: """Mute the game.""" diff --git a/src/game/timer.py b/src/game/timer.py index 55fc401..1d65ad7 100644 --- a/src/game/timer.py +++ b/src/game/timer.py @@ -76,12 +76,12 @@ class Timers: """Returns an iterator over the timers.""" return iter((self.vertical, self.horizontal, self.rotation, self.drop)) - def pause(self) -> None: - """Pauses all timers.""" + def freeze(self) -> None: + """Freezes all timers.""" for timer in self: timer.deactivate() - def unpause(self) -> None: - """Unpauses all timers.""" + def unfreeze(self) -> None: + """Unfreezes all timers.""" for timer in self: timer.activate()