Skip to content

Commit d015e81

Browse files
authored
check_for_collision: Trigger spritelist init if needed (#2662)
1 parent 83f94ed commit d015e81

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

arcade/sprite_list/collision.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ def _get_nearby_sprites(
154154
# Run the transform shader emitting sprites close to the configured position and size.
155155
# This runs in a query so we can measure the number of sprites emitted.
156156
with ctx.collision_query:
157-
sprite_list._geometry.transform( # type: ignore
157+
sprite_list.geometry.transform( # type: ignore
158158
ctx.collision_detection_program,
159159
buffer,
160160
vertices=sprite_count,

arcade/sprite_list/sprite_list.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -521,10 +521,10 @@ def geometry(self) -> Geometry:
521521
in float in_texture;
522522
in vec4 in_color;
523523
"""
524-
if not self._geometry:
525-
raise ValueError("SpriteList is not initialized.")
524+
if not self._initialized:
525+
self.initialize()
526526

527-
return self._geometry
527+
return self._geometry # type: ignore
528528

529529
@property
530530
def buffer_positions(self) -> Buffer:

tests/unit/sprite/test_sprite_collision.py

+12
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,15 @@ def test_get_sprites_in_rect(use_spatial_hash):
311311
assert set(arcade.get_sprites_in_rect(arcade.LRBT(100, 200, 100, 200), sp)) == set()
312312
assert set(arcade.get_sprites_in_rect(arcade.LRBT(-100, 0, -100, 0), sp)) == {b, d}
313313
assert set(arcade.get_sprites_in_rect(arcade.LRBT(100, 0, 100, 0), sp)) == {a, c}
314+
315+
316+
def test_cpu_collision_with_lazy_list(window):
317+
"""
318+
Do GPU collision check with lazy list.
319+
This ensures that check_for_collision_with_list() will trigger
320+
a spritelist initialization if his is not done yet.
321+
"""
322+
sprite = arcade.SpriteSolidColor(50, 50, color=arcade.csscolor.RED)
323+
spritelist = arcade.SpriteList(lazy=True)
324+
spritelist.append(arcade.SpriteSolidColor(50, 50, color=arcade.csscolor.RED))
325+
arcade.check_for_collision_with_list(sprite, spritelist, method=2)

0 commit comments

Comments
 (0)