diff --git a/run_via_grpc.py b/run_via_grpc.py index 1303c6d..c4a14dd 100644 --- a/run_via_grpc.py +++ b/run_via_grpc.py @@ -1,3 +1,5 @@ +from time import sleep + import subprocess import argparse import time @@ -20,7 +22,14 @@ def main(): for script in args.ai_files: clients.append(subprocess.Popen(["python3", "client.py", script])) time.sleep(0.1) - server.wait() + + while server.poll() is None: + try: + time.sleep(0.2) + except KeyboardInterrupt: + server.kill() + for client in clients: + client.kill() if __name__ == "__main__": diff --git a/seekers/game/world.py b/seekers/game/world.py index d968f20..f4fab9b 100644 --- a/seekers/game/world.py +++ b/seekers/game/world.py @@ -40,14 +40,11 @@ def diameter(self) -> float: def middle(self) -> Vector: return self.geometry / 2 - def torus_difference(self, left: Vector, right: Vector, /) -> Vector: - def diff1d(length, a, b): - delta = abs(a - b) - return b - a if delta < length - delta else a - b - - return Vector(diff1d(self.width, left.x, right.x), - diff1d(self.height, left.y, right.y)) - + def torus_difference(self, left: Vector, right: Vector) -> Vector: + return Vector( + (right.x - left.x + self.width / 2) % self.width - self.width / 2, + (right.y - left.y + self.height / 2) % self.height - self.height / 2, + ) def torus_distance(self, left: Vector, right: Vector, /) -> float: return self.torus_difference(left, right).length()