Skip to content

Conversation

@MiCurry
Copy link
Contributor

@MiCurry MiCurry commented Oct 22, 2025

This merge makes viewport a property of Camera2D and adds a setter for it. In the setter, and in init, we check that viewport is a Rect and raise a TypeError if it is not.

Without this check, an error will be raised after either calling Camera2D.equalise() or in Camera2D.use(), which may confuse users as to why the error is occurring.

Backtrace when calling Camera2D.equalise() with a non-rect viewport:

File "E:\Projects\SpaceGame\SpaceGame\gamemodes\basegame.py", line 128, in setup_two_player_cameras
    player_one_camera.equalise()
File "E:\Programs\python-arcade\arcade\camera\camera_2d.py", line 336, in equalise
    self._projection_data.rect = XYWH(x, y, self.viewport_width, self.viewport_height)
                                            ^^^^^^^^^^^^^^^^^^^
File "E:\Programs\python-arcade\arcade\camera\camera_2d.py", line 751, in viewport_width
    return int(self._viewport.width)

Backtrace when calling Camera2D.use() with a non-rect viewport:

File "E:\Projects\SpaceGame\SpaceGame\gamemodes\pvp.py", line 139, in on_draw
    self.cameras[player].use()
File "E:\Programs\python-arcade\arcade\camera\camera_2d.py", line 271, in use
    self._window.ctx.viewport = self._viewport.lbwh_int

@MiCurry MiCurry force-pushed the camera/viewport-type-check branch 2 times, most recently from 1ade04e to acdd56e Compare October 22, 2025 19:45
This commit makes viewport a property of Camera2D and adds a setter for it. In
the setter, and in __init__, we check that Viewport is a Rect and raise a
TypeError if it is not.

Without this check, an error will be raised after either calling
`Camera2D.equalise()` or in `Camera2D.use()`, which may confuse users as to why
the error is occurring.

Backtrace when calling `Camera2D.equalise()` with a non-rect viewport:

```
File "E:\Projects\SpaceGame\SpaceGame\gamemodes\basegame.py", line 128, in setup_two_player_cameras
    player_one_camera.equalise()
File "E:\Programs\python-arcade\arcade\camera\camera_2d.py", line 336, in equalise
    self._projection_data.rect = XYWH(x, y, self.viewport_width, self.viewport_height)
                                            ^^^^^^^^^^^^^^^^^^^
File "E:\Programs\python-arcade\arcade\camera\camera_2d.py", line 751, in viewport_width
    return int(self._viewport.width)
```

Backtrace when calling `Camera2D.use()` with a non-rect viewport:

```
File "E:\Projects\SpaceGame\SpaceGame\gamemodes\pvp.py", line 139, in on_draw
    self.cameras[player].use()
File "E:\Programs\python-arcade\arcade\camera\camera_2d.py", line 271, in use
    self._window.ctx.viewport = self._viewport.lbwh_int
```
@MiCurry MiCurry force-pushed the camera/viewport-type-check branch from acdd56e to dd324e1 Compare October 22, 2025 19:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant