Exemplo n.º 1
0
def test_camera_translate_to_frame():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=80)
    assert cam.position == Vector(0, 0)
    assert cam.translate_to_frame(Vector(400, 300)) == Vector(0, 0)
    assert cam.translate_to_frame(Vector(560, 220)) == Vector(2, -1)
    cam.position = Vector(5, 5)
    assert cam.translate_to_frame(Vector(400, 300)) == Vector(5, 5)
    assert cam.translate_to_frame(Vector(560, 220)) == Vector(7, 4)
Exemplo n.º 2
0
def test_camera_translate_to_viewport():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=80)
    assert cam.position == Vector(0, 0)
    assert cam.translate_to_viewport(Vector(0, 0)) == Vector(400, 300)
    assert cam.translate_to_viewport(Vector(2, -1)) == Vector(560, 220)
    cam.position = Vector(5, 5)
    assert cam.translate_to_viewport(Vector(5, 5)) == Vector(400, 300)
    assert cam.translate_to_viewport(Vector(7, 4)) == Vector(560, 220)
Exemplo n.º 3
0
def test_camera_translate_to_frame():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=80)
    assert cam.position == Vector(0, 0)
    assert cam.frame_top == 3.75
    assert cam.frame_bottom == -3.75
    assert cam.frame_left == -5
    assert cam.frame_right == 5
    assert cam.translate_to_frame(Vector(400, 300)) == Vector(0, 0)
    assert cam.translate_to_frame(Vector(560, 220)) == Vector(2, 1)
    cam.position = Vector(5, 5)
    assert cam.translate_to_frame(Vector(400, 300)) == Vector(5, 5)
    assert cam.translate_to_frame(Vector(560, 220)) == Vector(7, 6)
Exemplo n.º 4
0
def test_sprite_in_viewport():
    cam = Camera(viewport=(0, 0, 800, 600))

    class Thing(BaseSprite):
        def __init__(self, position=Vector(2, 2)):
            super().__init__()
            self.game_unit_size = 2
            self.position = position

    sprite_in = Thing(Vector(-3, -1))
    sprite_half_in = Thing(Vector(5, -2))
    sprite_out = Thing(Vector(2, 5))

    assert not cam.in_frame(sprite_out)
    assert cam.in_frame(sprite_in)
    assert cam.in_frame(sprite_half_in)
Exemplo n.º 5
0
def test_transfromation_roundtrip(vp_width, vp_height, pixel_ratio, cam_pos,
                                  point):
    cam = Camera(
        viewport=(0, 0, vp_width, vp_height),
        pixel_ratio=pixel_ratio,
    )
    cam.position = cam_pos

    note(
        f"frame: ({cam.frame_left}, {cam.frame_bottom}) -> ({cam.frame_right}, {cam.frame_top})"
    )

    # Some underflow/loss of precision problems
    assume(cam.frame_left != cam.frame_right)
    assume(cam.frame_top != cam.frame_bottom)

    note(f"point: {point}")

    point_frame = cam.translate_to_frame(point)
    note(f"point->frame: {point_frame}")
    point_viewport = cam.translate_to_viewport(point_frame)
    note(f"point->frame->viewport: {point_viewport}")
    assert point_viewport.isclose(point, rel_tol=1e-5, rel_to=[cam.position])

    point_viewport = cam.translate_to_viewport(point)
    note(f"point->viewport: {point_viewport}")
    point_frame = cam.translate_to_frame(point_viewport)
    note(f"point->viewport->frame: {point_frame}")
    assert point_frame.isclose(point, rel_tol=1e-5, rel_to=[cam.position])
Exemplo n.º 6
0
def test_transfromation_movement(
    vp_width,
    vp_height,
    pixel_ratio,
    cam_pos,
    point,
    delta,
):
    cam = Camera(
        viewport=(0, 0, vp_width, vp_height),
        pixel_ratio=pixel_ratio,
    )
    cam.position = cam_pos

    assume(delta.length != 0)

    point_moved = point + delta

    assume(point_moved !=
           point)  # This will happen when delta is too small to make an effect

    note(f"point moved: {point_moved}")

    diff = cam.translate_to_frame(point_moved) - cam.translate_to_frame(point)
    note(f"frame diff: {diff}")
    assert isclose(delta.length, pixel_ratio * diff.length, rel_tol=1e-4)
    diff = cam.translate_to_viewport(point_moved) - cam.translate_to_viewport(
        point)
    note(f"viewport diff: {diff}")
    assert isclose(diff.length, pixel_ratio * delta.length, rel_tol=1e-4)
Exemplo n.º 7
0
def test_main_camera(scene):
    assert scene.main_camera is None

    new_cam = Camera(None, 25, (800, 600))

    scene.main_camera = new_cam

    assert scene.main_camera == new_cam
    assert new_cam in scene
Exemplo n.º 8
0
def test_sprite_in_viewport():
    # Added the expected pixel ratio due to change in default breaking this test.
    # 80 is the legacy value.
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=80)

    class Thing(BaseSprite):
        def __init__(self, position=Vector(2, 2)):
            super().__init__()
            self.size = 2
            self.position = position

    sprite_in = Thing(Vector(-3, -1))
    sprite_half_in = Thing(Vector(5, -2))
    sprite_out = Thing(Vector(2, 5))

    assert not cam.in_frame(sprite_out)
    assert cam.in_frame(sprite_in)
    assert cam.in_frame(sprite_half_in)
Exemplo n.º 9
0
def test_main_camera(scene):

    assert isinstance(scene.main_camera, Camera)
    old_cam = scene.main_camera
    new_cam = Camera()

    scene.main_camera = new_cam

    assert scene.main_camera == new_cam
    assert old_cam not in scene
    assert new_cam in scene
Exemplo n.º 10
0
    def __init__(self, *,
                 set_up: Callable = None, pixel_ratio: Number = 64,
                 **kwargs):
        super().__init__()
        for k, v in kwargs.items():
            setattr(self, k, v)

        self.game_objects = self.container_class()
        self.main_camera = Camera(pixel_ratio=pixel_ratio)

        if set_up is not None:
            set_up(self)
Exemplo n.º 11
0
 def __init__(self,
              engine,
              *,
              background_color: Sequence[int] = (0, 0, 100),
              container_class: Type = GameObjectCollection,
              set_up: Callable = None,
              pixel_ratio: Union[int, float] = 80,
              **kwargs):
     super().__init__(engine)
     self.background_color = background_color
     self.background = None
     self.game_objects = container_class()
     self.main_camera = Camera(pixel_ratio=pixel_ratio)
     if set_up is not None:
         set_up(self)
Exemplo n.º 12
0
def test_transformation_roundtrip(vp_width, vp_height, target_width, cam_pos, point):
    cam = Camera(None, target_width, (vp_width, vp_height))
    cam.position = cam_pos

    note(f"frame: ({cam.left}, {cam.bottom}) -> ({cam.right}, {cam.top})")

    # Some underflow/loss of precision problems
    assume(cam.left != cam.right)
    assume(cam.top != cam.bottom)

    note(f"point: {point}")

    point_frame = cam.translate_point_to_screen(point)
    note(f"point->frame: {point_frame}")
    point_viewport = cam.translate_point_to_game_space(point_frame)
    note(f"point->frame->viewport: {point_viewport}")
    assert point_viewport.isclose(point, rel_tol=1e-5, rel_to=[cam.position])

    point_viewport = cam.translate_point_to_game_space(point)
    note(f"point->viewport: {point_viewport}")
    point_frame = cam.translate_point_to_screen(point_viewport)
    note(f"point->viewport->frame: {point_frame}")
    assert point_frame.isclose(point, rel_tol=1e-5, rel_to=[cam.position])
Exemplo n.º 13
0
def test_camera_viewport():
    cam = Camera(viewport=(0, 0, 800, 600))
    assert cam.point_in_viewport(Vector(400, 400))
    assert not cam.point_in_viewport(Vector(900, 600))
    assert cam.viewport_offset == Vector(400, 300)
Exemplo n.º 14
0
def test_camera_translate_to_viewport_2():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=1)
    assert cam.position == Vector(0, 0)
    assert cam.translate_to_viewport(Vector(0, 0)) == Vector(400, 300)
    assert cam.translate_to_viewport(Vector(100, 100)) == Vector(500, 200)
    assert cam.translate_to_viewport(Vector(-150, -500)) == Vector(250, 800)
Exemplo n.º 15
0
def test_viewport_change_affects_frame_height():
    cam = Camera(viewport=(0, 0, 800, 600), pixel_ratio=80)
    assert cam.frame_left == -5
    cam.viewport_width = 400
    assert cam.frame_left == -2.5
Exemplo n.º 16
0
def test_camera_move():
    cam = Camera()
    cam.position = Vector(500, 500)
    assert cam.position == Vector(500, 500)
    cam.position += Vector(100, 100)
    assert cam.position == Vector(600, 600)
Exemplo n.º 17
0
def camera():
    return Camera(None, 10, (800, 600))
Exemplo n.º 18
0
def test_camera_point_in_viewport_not_at_origin():
    cam = Camera(viewport=(100, 100, 800, 600))
    assert cam.point_in_viewport(Vector(150, 650))
    assert cam.point_in_viewport(Vector(899, 300))
    assert not cam.point_in_viewport(Vector(50, 50))
    assert not cam.point_in_viewport(Vector(901, 600))