Exemplo n.º 1
0
def test_vehicle_spawned_in_bubble_is_not_captured(vehicle, bubble):
    manager = BubbleManager([bubble], road_network)

    # Spawned inside bubble, didn't "drive through" airlocking region, so should _not_
    # get captured
    vehicle = Vehicle(
        id="vehicle-1",
        pose=Pose.from_center((0, 0, 0), Heading(0)),
        showbase=mock.MagicMock(),
        chassis=mock.Mock(),
    )

    change = manager.step_bubble_state([vehicle], [])
    assert len(manager.vehicle_ids_in_bubble(bubble)) == 0

    # Spawned vehicle drove through airlock so _should_ get captured
    vehicle = Vehicle(
        id="vehicle-2",
        pose=Pose.from_center((-8, 0, 0), Heading(0)),
        showbase=mock.MagicMock(),
        chassis=mock.Mock(),
    )

    change = manager.step_bubble_state([vehicle], [])
    vehicle.position = (-6, 0)

    change = manager.step_bubble_state([vehicle], [])
    assert len(manager.vehicle_ids_in_bubble(bubble)) == 1

    manager.teardown()
Exemplo n.º 2
0
def test_bubble_manager_state_change(vehicle, bubble):
    manager = BubbleManager([bubble], road_network)

    # Outside airlock and bubble
    vehicle = Vehicle(
        id="vehicle-1",
        pose=Pose.from_center((0, 0, 0), Heading(0)),
        showbase=mock.MagicMock(),
        chassis=mock.Mock(),
    )

    vehicle.position = (-8, 0)
    change = manager.step_bubble_state([vehicle], [])
    assert len(change.entered_airlock_1) == len(change.entered_bubble) == 0

    # Inside airlock, begin collecting experiences, but don't hijack
    vehicle.position = (-6, 0)
    change = manager.step_bubble_state([vehicle], [])
    assert len(change.entered_airlock_1) == 1 and len(
        change.entered_bubble) == 0

    # Entered bubble, now hijack
    vehicle.position = (-3, 0)
    change = manager.step_bubble_state([vehicle], [])
    assert len(change.entered_airlock_1) == 0 and len(
        change.entered_bubble) == 1
    assert change.entered_bubble[0][0] == vehicle.id

    # Leave bubble into exiting airlock
    vehicle.position = (6, 0)
    change = manager.step_bubble_state([], [vehicle])
    assert len(change.entered_bubble) == 0 and len(change.exited_bubble) == 1

    # Exit bubble and airlock, now relinquish
    vehicle.position = (8, 0)
    change = manager.step_bubble_state([vehicle], [])
    assert len(change.exited_bubble) == 0 and len(change.exited_airlock_2) == 1

    manager.teardown()
Exemplo n.º 3
0
    def start_keep_alive_boid_agents(self, sim):
        for bubble in filter(
            lambda b: b.is_boid and b.keep_alive, sim.scenario.bubbles
        ):
            actor = bubble.actor
            agent_id = BubbleManager._make_boid_social_agent_id(actor)

            social_agent = make_social_agent(
                locator=actor.agent_locator, **actor.policy_kwargs,
            )

            actor = bubble.actor
            social_agent_data_model = SocialAgent(
                id=SocialAgentId.new(actor.name),
                name=actor.name,
                is_boid=True,
                is_boid_keep_alive=True,
                agent_locator=actor.agent_locator,
                policy_kwargs=actor.policy_kwargs,
                initial_speed=actor.initial_speed,
            )
            self.start_social_agent(agent_id, social_agent, social_agent_data_model)
Exemplo n.º 4
0
def test_bubble_manager_limit(vehicle, bubble):
    limit = 2
    bubble = replace(bubble, limit=limit)
    manager = BubbleManager([bubble], road_network)

    vehicles_captured = [
        Vehicle(
            id=f"vehicle-{i}",
            pose=Pose.from_center((0, 0, 0), Heading(0)),
            showbase=mock.MagicMock(),
            chassis=mock.Mock(),
        ) for i in range(limit)
    ]

    vehicles_not_captured = [
        Vehicle(
            id=f"vehicle-{i}",
            pose=Pose.from_center((0, 0, 0), Heading(0)),
            showbase=mock.MagicMock(),
            chassis=mock.Mock(),
        ) for i in range(5)
    ]

    for position in [(-8, 0), (-6, 0), (-3, 0), (0, 0), (6, 0), (8, 0)]:
        for vehicle in vehicles_captured:
            vehicle.position = position

        for vehicle in vehicles_not_captured:
            vehicle.position = position

        change = manager.step_bubble_state(vehicles_captured,
                                           vehicles_not_captured)
        vehicle_ids_in_bubble = manager.vehicle_ids_in_bubble(bubble)
        assert len(vehicle_ids_in_bubble) <= limit
        assert set(vehicle_ids_in_bubble).issubset(
            set([v.id for v in vehicles_captured]))

    manager.teardown()