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
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."""

View File

@ -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."""

View File

@ -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()