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:
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
@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
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: