From 6532e21eba6d7f790de8b48eda3be37f06b75c49 Mon Sep 17 00:00:00 2001 From: joendter <71767955+joendter@users.noreply.github.com> Date: Mon, 6 Jul 2026 16:53:02 +0200 Subject: [PATCH 1/3] fix torus difference --- seekers/game/world.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/seekers/game/world.py b/seekers/game/world.py index d968f20..cb6fc55 100644 --- a/seekers/game/world.py +++ b/seekers/game/world.py @@ -41,12 +41,19 @@ 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)) + best_x = self.width + best_y = self.height + for x_offset in range(-1,2): + right_x_offset = right.x + x_offset*self.width + dist_x = right_x_offset - left.x + if dist_x < abs(best_x) : + best_x = dist_x + for y_offset in range(-1,2): + right_y_offset = right.y + y_offset*self.height + dist_y = right_y_offset - left.y + if dist_y < abs(best_y) : + best_y = dist_y + return Vector(best_x, best_y) def torus_distance(self, left: Vector, right: Vector, /) -> float: return self.torus_difference(left, right).length() From cf2ba2c68c0488a1b21d711d5f82dd1322673831 Mon Sep 17 00:00:00 2001 From: joendter <71767955+joendter@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:16:34 +0200 Subject: [PATCH 2/3] improve torus_difference performance --- seekers/game/world.py | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/seekers/game/world.py b/seekers/game/world.py index cb6fc55..f4fab9b 100644 --- a/seekers/game/world.py +++ b/seekers/game/world.py @@ -40,21 +40,11 @@ def diameter(self) -> float: def middle(self) -> Vector: return self.geometry / 2 - def torus_difference(self, left: Vector, right: Vector, /) -> Vector: - best_x = self.width - best_y = self.height - for x_offset in range(-1,2): - right_x_offset = right.x + x_offset*self.width - dist_x = right_x_offset - left.x - if dist_x < abs(best_x) : - best_x = dist_x - for y_offset in range(-1,2): - right_y_offset = right.y + y_offset*self.height - dist_y = right_y_offset - left.y - if dist_y < abs(best_y) : - best_y = dist_y - return Vector(best_x, best_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() From 39ea947ca73e11c75ad365d94b87fbec58a7c63b Mon Sep 17 00:00:00 2001 From: joendter <71767955+joendter@users.noreply.github.com> Date: Mon, 6 Jul 2026 18:40:00 +0200 Subject: [PATCH 3/3] fix exit via KeyboardInterrupt --- run_via_grpc.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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__":