Skip to content

Commit edfb613

Browse files
committed
renderer
1 parent b485e77 commit edfb613

3 files changed

Lines changed: 34 additions & 14 deletions

File tree

‎pyscroll/common.py‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313

1414
RectLike = Rect | tuple[int, int, int, int]
1515
Vector2D = tuple[float, float] | tuple[int, int] | Vector2
16+
ColorRGB = tuple[int, int, int]
17+
ColorRGBA = tuple[int, int, int, int]
1618

1719

1820
@contextmanager

‎pyscroll/isometric.py‎

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
import logging
22
import time
33
from collections.abc import Callable
4+
from typing import TYPE_CHECKING
45

56
from pygame.rect import Rect
67
from pygame.surface import Surface
78

8-
from pyscroll.common import surface_clipping_context
9+
from pyscroll.common import ColorRGB, ColorRGBA, surface_clipping_context
910
from pyscroll.data import PyscrollDataAdapter
1011
from pyscroll.group import Renderable
1112
from pyscroll.orthographic import BufferedRenderer, _default_scaler
12-
from pyscroll.sprite_manager import IsometricSpriteRenderer
13-
from pyscroll.tile_renderer import IsometricTileRenderer
13+
from pyscroll.quadtree import FastQuadTree
14+
from pyscroll.sprite_manager import IsometricSpriteRenderer, SpriteRendererProtocol
15+
from pyscroll.tile_renderer import IsometricTileRenderer, TileRendererProtocol
1416
from pyscroll.viewport import IsometricViewport
1517

1618
log = logging.getLogger(__file__)
@@ -39,9 +41,7 @@ def __init__(
3941
sprite_damage_height: int = 0,
4042
zoom: float = 1.0,
4143
) -> None:
42-
4344
viewport = IsometricViewport(data, size, zoom, clamp_camera)
44-
4545
super().__init__(
4646
data=data,
4747
size=size,
@@ -55,13 +55,19 @@ def __init__(
5555
zoom=zoom,
5656
viewport=viewport,
5757
)
58-
59-
self.tile_renderer = IsometricTileRenderer(data, colorkey, alpha)
60-
self.sprite_renderer = IsometricSpriteRenderer()
61-
6258
self._last_offset: tuple[int, int] | None = None
6359
self._redraw_cutoff: int = 0
6460

61+
def _create_tile_renderer(
62+
self, colorkey: ColorRGB | None = None, alpha: bool = False
63+
) -> TileRendererProtocol:
64+
return IsometricTileRenderer(self.data, colorkey, alpha)
65+
66+
def _create_sprite_renderer(
67+
self, data: PyscrollDataAdapter, layer_quadtree: FastQuadTree
68+
) -> SpriteRendererProtocol:
69+
return IsometricSpriteRenderer()
70+
6571
def redraw_tiles(self, surface: Surface) -> None:
6672
"""Redraw the entire visible portion of the isometric tile buffer."""
6773
tile_view = self.viewport.tile_view

‎pyscroll/orthographic.py‎

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,13 @@
88
from pygame.rect import Rect
99
from pygame.surface import Surface
1010

11-
from pyscroll.common import RectLike, Vector2D, surface_clipping_context
11+
from pyscroll.common import (
12+
ColorRGB,
13+
ColorRGBA,
14+
RectLike,
15+
Vector2D,
16+
surface_clipping_context,
17+
)
1218
from pyscroll.quadtree import FastQuadTree
1319
from pyscroll.sprite_manager import SpriteRenderer, SpriteRendererProtocol
1420
from pyscroll.tile_renderer import TileRenderer, TileRendererProtocol
@@ -23,10 +29,6 @@
2329
log = logging.getLogger(__file__)
2430

2531

26-
ColorRGB = tuple[int, int, int]
27-
ColorRGBA = tuple[int, int, int, int]
28-
29-
3032
def _default_scaler(src: Surface, size: tuple[int, int], dest: Surface) -> None:
3133
scaled = pygame.transform.scale(src, size)
3234
dest.blit(scaled, (0, 0))
@@ -164,6 +166,16 @@ def center(self, coords: Vector2D) -> None:
164166
_, _, dx, dy, view_change = viewport.center(coords)
165167
self._handle_view_change(dx, dy, view_change)
166168

169+
def _create_tile_renderer(
170+
self, colorkey: ColorRGB | None = None, alpha: bool = False
171+
) -> TileRendererProtocol:
172+
return TileRenderer(self.data, colorkey, alpha)
173+
174+
def _create_sprite_renderer(
175+
self, data: PyscrollDataAdapter, layer_quadtree: FastQuadTree
176+
) -> SpriteRendererProtocol:
177+
return SpriteRenderer(data, layer_quadtree, self.tall_sprites)
178+
167179
@property
168180
def zoom(self) -> float:
169181
return self.viewport.zoom

0 commit comments

Comments
 (0)