]> Untitled Git - axy/ft/pacman.git/commitdiff
Input buffering
authorAxy <gilliardmarthey.axel@gmail.com>
Sat, 29 Aug 2026 11:39:11 +0000 (13:39 +0200)
committerAxy <gilliardmarthey.axel@gmail.com>
Sat, 29 Aug 2026 11:39:11 +0000 (13:39 +0200)
src/pacman/input.py

index 8a69e36bd0f33c99ad97cca9cd733429bff5ab32..5c94f89ee57d2ddaa5162baf09ea468ac63d513a 100644 (file)
@@ -1,6 +1,7 @@
 import time
 from abc import ABC
 from collections.abc import Callable
+from typing import override
 
 import pygame
 
@@ -10,10 +11,10 @@ from pacman.render import EndingRenderer, MenuRenderer
 
 class Input(ABC):
     def get_event(self, event: pygame.event.Event) -> None:
-        return
+        pass
 
     def get_key(self, keys: pygame.key.ScancodeWrapper) -> None:
-        return
+        pass
 
 
 class MenuInput(Input):
@@ -39,6 +40,7 @@ class MenuInput(Input):
     def validation(self) -> None:
         self.functions[self.index]()
 
+    @override
     def get_event(self, event: pygame.event.Event) -> None:
         if event.type == pygame.KEYDOWN:
             if event.key in [1073741906, 119]:
@@ -59,17 +61,22 @@ class GameInput(Input):
         self.player = player
         self.next_level = next_lvl
         self.kill = kill
+        self.next_move: tuple[int, int] | None = None
 
+    @override
     def get_key(self, keys: pygame.key.ScancodeWrapper) -> None:
         if keys[pygame.K_UP] or keys[pygame.K_w]:
-            self.player.go_to((0, -1))
+            self.move = (0, -1)
         elif keys[pygame.K_DOWN] or keys[pygame.K_s]:
-            self.player.go_to((0, 1))
+            self.next_move = (0, 1)
         elif keys[pygame.K_LEFT] or keys[pygame.K_a]:
-            self.player.go_to((-1, 0))
+            self.next_move = (-1, 0)
         elif keys[pygame.K_RIGHT] or keys[pygame.K_d]:
-            self.player.go_to((1, 0))
+            self.next_move = (1, 0)
+        if self.player.can_move() and self.next_move:
+            self.player.go_to(self.next_move)
 
+    @override
     def get_event(self, event: pygame.event.Event) -> None:
         if event.type == pygame.KEYDOWN:
             if event.unicode == "n":
@@ -86,6 +93,7 @@ class EndingInput(Input):
         self.add_score = add_score
         self.name = ""
 
+    @override
     def get_event(self, event: pygame.event.Event) -> None:
         if event.type == pygame.TEXTINPUT:
             c: str = event.text