diff --git a/overcooked_simulator/main.py b/overcooked_simulator/main.py index 3029f1933fd3210a1c7156a845f4038b9e3f0b74..b783eaa3594e673246a5f9890e4a926386ceb679 100644 --- a/overcooked_simulator/main.py +++ b/overcooked_simulator/main.py @@ -1,10 +1,10 @@ from player import Player import sys from simulation_runner import Simulator - +from overcooked_environment import Environment def main(): - simulator = Simulator() + simulator = Simulator(Environment, 300) simulator.register_player(Player("p1", [100, 200])) simulator.register_player(Player("p2", [200, 100])) diff --git a/overcooked_simulator/simulation_runner.py b/overcooked_simulator/simulation_runner.py index f2bef1421f17ebfbf6e025c8c4d6d925c85e4751..1808898d1e0b887924096b1f5b627c031e11b9a8 100644 --- a/overcooked_simulator/simulation_runner.py +++ b/overcooked_simulator/simulation_runner.py @@ -17,13 +17,13 @@ class Simulator(Thread): sim.start() """ - def __init__(self): + def __init__(self, env_class: type, frequency: int): self.finished: bool = False - self.step_frequency: float = 300 + self.step_frequency: int = frequency self.prefered_sleeptime_ns: float = 1e9 / self.step_frequency - self.env: Environment = Environment() + self.env = env_class() super().__init__() @@ -59,6 +59,7 @@ class Simulator(Thread): return self.env.get_state_json() def register_player(self, player: Player): + print(f"Added player {player.name} to the game.") """Adds a player to the environment. Args: @@ -98,4 +99,5 @@ class Simulator(Thread): def stop(self): """Stops the simulator """ + print("Stopping the simulation.") self.finished = True diff --git a/tests/test_start.py b/tests/test_start.py index 79a1690cb65367c93a046b843ed78d6f331a6db5..89211c89d91497d8b6fd78a0a62a33fc3060e1ea 100644 --- a/tests/test_start.py +++ b/tests/test_start.py @@ -1,6 +1,45 @@ +from overcooked_simulator.simulation_runner import Simulator +from overcooked_simulator.player import Player +from overcooked_simulator.overcooked_environment import Environment, Action +import numpy as np +import time -def test_dummy(): - assert "overcooked".startswith("over"), "overcooked does not start with 'over'" +def test_player_registration(): -def test_failure(): - assert False, "What does happen now?" + sim = Simulator() + p1 = Player("player", np.array([0, 0])) + sim.register_player(p1) + + assert len(sim.env.players) != 0 + assert len(sim.env.players) == 1 + + p2 = Player("player", np.array([100, 100])) + sim.register_player(p2) + + assert len(sim.env.players) == 2 + + sim.start() + sim.stop() + +def test_simulator_frequency(): + class TestEnv: + def __init__(self): + self.c = 0 + + def step(self): + self.c += 1 + + frequency = 1000 + running_time_seconds = 5 + + sim = Simulator(TestEnv, frequency) + sim.start() + + time.sleep(running_time_seconds) + + sim.stop() + + accepted_tolerance = 0.04 + lower = frequency * running_time_seconds * (1-accepted_tolerance) + upper = frequency * running_time_seconds * (1+accepted_tolerance) + assert sim.env.c > lower and sim.env.c < upper, "Timing error in the environment at 1000hz"