From: = <=> Date: Mon, 5 Oct 2026 12:15:01 +0000 (+0200) Subject: Movement improvements X-Git-Url: https://git.uwuaxy.net/?a=commitdiff_plain;h=6a76737425ad8c6a332f1f3a8f745eaf7a3b4da3;p=axy%2Fft%2Fpacman.git Movement improvements --- diff --git a/src/pacman/ecs/world.py b/src/pacman/ecs/world.py index 2fcfeac..28322e7 100644 --- a/src/pacman/ecs/world.py +++ b/src/pacman/ecs/world.py @@ -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: diff --git a/src/pacman/game/__init__.py b/src/pacman/game/__init__.py index 7c0cc3e..afa25f8 100644 --- a/src/pacman/game/__init__.py +++ b/src/pacman/game/__init__.py @@ -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: