]> Untitled Git - axy/ft/pacman.git/commitdiff
Movement improvements
author= <=>
Mon, 5 Oct 2026 12:15:01 +0000 (14:15 +0200)
committer= <=>
Mon, 5 Oct 2026 12:15:01 +0000 (14:15 +0200)
src/pacman/ecs/world.py
src/pacman/game/__init__.py

index 2fcfeac639266d9a7d0b8d9aedb8fcfe06604731..28322e7cce726c70ba77971275c678539eeca305 100644 (file)
@@ -746,7 +746,7 @@ class World(FromWorld):
     def spawn[T: Components](self, ty: type[T], comp: T) -> Entity:
         return self.spawn_many(ty, [comp])[0]
 
-    def spawn_resource[T: Component](
+    def spawn_resource[T: Resource](
         self, comp: T, ty: type[T] | None = None
     ) -> Entity:
         if ty is None:
index 7c0cc3ecbfdaa1c3cb2f4af522cbae3324a08b75..afa25f884592f234c73f818c603cca33b8209120 100644 (file)
@@ -2,6 +2,7 @@ from collections.abc import Callable
 from dataclasses import dataclass
 from enum import Enum, auto
 from random import random
+from time import time
 
 from mazegenerator import MazeGenerator  # type: ignore[import-untyped]
 from pygame import K_a, K_d, K_s, K_w, Vector2
@@ -237,18 +238,19 @@ def move_to_target(
 
 @dataclass
 class Inputs(Resource):
-    inputs: set[int]
+    inputs: dict[int, float]
 
     def get_dir(self) -> int | None:
-        if K_w in self.inputs:
-            return 0
-        if K_d in self.inputs:
-            return 1
-        if K_s in self.inputs:
-            return 2
-        if K_a in self.inputs:
-            return 3
-        return None
+        lookup = {K_w: 0, K_d: 1, K_s: 2, K_a: 3}
+        res = sorted(
+            ((k, v) for k, v in self.inputs.items() if k in lookup),
+            key=lambda e: e[1],
+            reverse=True,
+        )
+        print(self.inputs)
+        if len(res) == 0:
+            return None
+        return lookup[res[0][0]]
 
 
 @dataclass
@@ -476,16 +478,16 @@ def update_ghost_anim(
 
 
 def setup_resources(world: World) -> None:
-    world.spawn_resource(Inputs(set()))
+    world.spawn_resource(Inputs({}))
     world.spawn_resource(ChaseStatus())
 
 
 def update_inputs(inputs: Inputs, events: WindowEvents) -> None:
     for key, state in events.keys_itr():
         if state:
-            inputs.inputs.add(key)
+            inputs.inputs[key] = time()
         else:
-            inputs.inputs.remove(key)
+            del inputs.inputs[key]
 
 
 def run_game() -> None: