feat(game): disable movement while paused

This commit is contained in:
Kristofers Solo 2024-01-16 19:07:25 +02:00
parent 36edbacbbc
commit a136a6ebf7
3 changed files with 30 additions and 20 deletions

View File

@ -1,6 +1,7 @@
from typing import Any from typing import Any
import pygame import pygame
from loguru import logger
from utils import CONFIG, Figure, GameMode from utils import CONFIG, Figure, GameMode
from .base import BaseScreen from .base import BaseScreen
@ -34,6 +35,7 @@ class Game(BaseScreen):
self.settings = settings self.settings = settings
self._initialize_game_components() self._initialize_game_components()
self._start_background_music() self._start_background_music()
self.paused = False
def draw(self) -> None: def draw(self) -> None:
""" """
@ -66,7 +68,16 @@ class Game(BaseScreen):
def pause(self) -> None: def pause(self) -> None:
"""Pause the game.""" """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: def _initialize_game_components(self) -> None:
"""Initialize game-related components.""" """Initialize game-related components."""

View File

@ -91,10 +91,11 @@ class Tetris(BaseScreen):
def handle_events(self) -> None: def handle_events(self) -> None:
"""Handle player input events.""" """Handle player input events."""
self._handle_movement_keys() if not self.paused:
self._handle_rotation_keys() self._handle_movement_keys()
self._handle_down_key() self._handle_rotation_keys()
self._handle_drop_key() self._handle_down_key()
self._handle_drop_key()
def move_down(self) -> bool: def move_down(self) -> bool:
""" """
@ -164,17 +165,15 @@ class Tetris(BaseScreen):
logger.info(f"Restarting the game. Score was {self.score}") logger.info(f"Restarting the game. Score was {self.score}")
self._reset_game_state() self._reset_game_state()
def pause(self) -> None: def freeze(self) -> None:
"""Pause the game.""" """Freeze all timers."""
self.paused: bool self.timers.freeze()
if self.paused: self.paused = True
logger.debug("Unpause")
self.paused = False def unfreeze(self) -> None:
self.timers.unpause() """Unfreeze all timers."""
else: self.timers.unfreeze()
logger.debug("Pause") self.paused = False
self.paused = True
self.timers.pause()
def mute(self) -> None: def mute(self) -> None:
"""Mute the game.""" """Mute the game."""

View File

@ -76,12 +76,12 @@ class Timers:
"""Returns an iterator over the timers.""" """Returns an iterator over the timers."""
return iter((self.vertical, self.horizontal, self.rotation, self.drop)) return iter((self.vertical, self.horizontal, self.rotation, self.drop))
def pause(self) -> None: def freeze(self) -> None:
"""Pauses all timers.""" """Freezes all timers."""
for timer in self: for timer in self:
timer.deactivate() timer.deactivate()
def unpause(self) -> None: def unfreeze(self) -> None:
"""Unpauses all timers.""" """Unfreezes all timers."""
for timer in self: for timer in self:
timer.activate() timer.activate()