From 894d2b0707ed83d6582f1a40f8c0adb165c46ee6 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Sat, 25 Mar 2023 16:24:54 +0100 Subject: [PATCH] Player move delay --- hopper/engine.py | 7 +++++-- hopper/models/config.py | 4 ++++ settings_template.py | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/hopper/engine.py b/hopper/engine.py index 954e8f2..efb9fb8 100644 --- a/hopper/engine.py +++ b/hopper/engine.py @@ -1,3 +1,4 @@ +import asyncio import logging from hopper.enums import Direction, PlayerMoveResult @@ -68,8 +69,6 @@ class GameEngine: new_position = Position(player.position.x, player.position.y) logging.info(f"Player {player} move to {direction}") - player.move_attempt_count += 1 - if direction == Direction.LEFT: new_position.x -= 1 elif direction == Direction.RIGHT: @@ -81,6 +80,8 @@ class GameEngine: else: raise ValueError(f"Unhandled direction: {direction}") + player.move_attempt_count += 1 + if not self.position_in_board_bounds(new_position): raise PositionOutOfBounds() @@ -97,6 +98,8 @@ class GameEngine: return PlayerMoveResult.DESTINATION_REACHED self.__debug_print_board() + + await asyncio.sleep(settings.game.MOVE_DELAY) return PlayerMoveResult.OK def is_player_on_destination(self, player: Player) -> bool: diff --git a/hopper/models/config.py b/hopper/models/config.py index 32ac1cd..14a2054 100644 --- a/hopper/models/config.py +++ b/hopper/models/config.py @@ -2,6 +2,9 @@ import logging from dataclasses import dataclass from typing import Optional +@dataclass +class GameSettings: + MOVE_DELAY: int = 0.5 # seconds @dataclass class BoardSettings: @@ -31,6 +34,7 @@ class DebugSettings: @dataclass class Settings: + game: GameSettings board: BoardSettings inacivity_watchdog: InactivityWatchdogSettings ws_server: WSServerSettings diff --git a/settings_template.py b/settings_template.py index 04605ce..b80c4ba 100644 --- a/settings_template.py +++ b/settings_template.py @@ -2,12 +2,14 @@ import logging from hopper.models.config import ( BoardSettings, + GameSettings, InactivityWatchdogSettings, Settings, WSServerSettings, ) settings = Settings( + game=GameSettings(), board=BoardSettings(), inacivity_watchdog=InactivityWatchdogSettings(), log_level=logging.INFO,