Skip to content

Commit b16b4c4

Browse files
committed
Renamed coll callback to on_collision, moved do_nothing to Pymunk.empty_callback
1 parent 3591517 commit b16b4c4

14 files changed

+94
-92
lines changed

pymunk/__init__.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,14 @@ def area_for_poly(vertices: Sequence[tuple[float, float]], radius: float = 0) ->
193193
return cp.cpAreaForPoly(len(vs), vs, radius)
194194

195195

196+
def empty_callback(*args, **kwargs) -> None:
197+
"""A default empty callback.
198+
199+
Can be used to reset a collsion callback to its original empty
200+
function. Note that its more efficient to use this method than to
201+
define your own empty/do nothing method.
202+
"""
203+
return
204+
205+
196206
# del cp, ct, u

pymunk/examples/arrows.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,7 @@ def main():
9898
space.add(arrow_body, arrow_shape)
9999

100100
flying_arrows: list[pymunk.Body] = []
101-
space.set_collision_callback(
102-
0, 1, post_solve=post_solve_arrow_hit, data=flying_arrows
103-
)
101+
space.on_collision(0, 1, post_solve=post_solve_arrow_hit, data=flying_arrows)
104102

105103
start_time = 0
106104
while running:

pymunk/examples/balls_and_lines.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ def main():
4646
mouse_shape.collision_type = COLLTYPE_MOUSE
4747
space.add(mouse_body, mouse_shape)
4848

49-
space.set_collision_callback(
50-
COLLTYPE_MOUSE, COLLTYPE_BALL, pre_solve=mouse_coll_func
51-
)
49+
space.on_collision(COLLTYPE_MOUSE, COLLTYPE_BALL, pre_solve=mouse_coll_func)
5250

5351
### Static line
5452
line_point1 = None

pymunk/examples/breakout.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ def remove_brick(arbiter, space, data):
7676
brick_shape = arbiter.shapes[0]
7777
space.remove(brick_shape, brick_shape.body)
7878

79-
space.set_collision_callback(
79+
space.on_collision(
8080
collision_types["brick"], collision_types["ball"], separate=remove_brick
8181
)
8282

@@ -116,7 +116,7 @@ def remove_first(arbiter, space, data):
116116
ball_shape = arbiter.shapes[0]
117117
space.remove(ball_shape, ball_shape.body)
118118

119-
space.set_collision_callback(
119+
space.on_collision(
120120
collision_types["ball"], collision_types["bottom"], begin=remove_first
121121
)
122122

@@ -143,7 +143,7 @@ def pre_solve(arbiter, space, data):
143143
set_.points[0].distance = 0
144144
arbiter.contact_point_set = set_
145145

146-
space.set_collision_callback(
146+
space.on_collision(
147147
collision_types["player"], collision_types["ball"], pre_solve=pre_solve
148148
)
149149

pymunk/examples/collisions.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def main():
109109
space.add(shapes[selected_shape_idx])
110110

111111
data = {}
112-
h = space.set_collision_callback(
112+
h = space.on_collision(
113113
0,
114114
1,
115115
begin=begin,

pymunk/examples/contact_and_no_flipy.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def main():
4242

4343
ticks_to_next_ball = 10
4444

45-
space.set_collision_callback(0, 0, post_solve=draw_collision, data=screen)
45+
space.on_collision(0, 0, post_solve=draw_collision, data=screen)
4646

4747
while running:
4848
for event in pygame.event.get():

pymunk/examples/contact_with_friction.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ def main():
5252

5353
ticks_to_next_ball = 10
5454

55-
space.set_collision_callback(0, 0, post_solve=draw_collision, data=screen)
55+
space.on_collision(0, 0, post_solve=draw_collision, data=screen)
5656

5757
while running:
5858
for event in pygame.event.get():

pymunk/examples/deformable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ def pre_solve(arb, space, data):
8282
space.remove(s.body, s)
8383
arb.process_collision = False
8484

85-
space.set_collision_callback(0, 1, pre_solve=pre_solve)
85+
space.on_collision(0, 1, pre_solve=pre_solve)
8686

8787
terrain_surface = pygame.Surface((600, 600))
8888
terrain_surface.fill(pygame.Color("white"))

pymunk/examples/platformer.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ def passthrough_handler(arbiter: pymunk.Arbiter, space: pymunk.Space, data):
139139
else:
140140
arbiter.process_collision = False
141141

142-
space.set_collision_callback(1, 2, begin=passthrough_handler)
142+
space.on_collision(1, 2, begin=passthrough_handler)
143143

144144
# player
145145
body = pymunk.Body(5, float("inf"))

pymunk/space.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ def step(self, dt: float) -> None:
586586

587587
self._post_step_callbacks.clear()
588588

589-
def set_collision_callback(
589+
def on_collision(
590590
self,
591591
collision_type_a: Optional[int] = None,
592592
collision_type_b: Optional[int] = None,
@@ -643,38 +643,31 @@ def set_collision_callback(
643643
else:
644644
ch = self._handlers[key]
645645

646-
if begin == Space.do_nothing:
646+
# to avoid circular dep
647+
from . import empty_callback
648+
649+
if begin == empty_callback:
647650
ch.begin = None
648651
elif begin != None:
649652
ch.begin = begin
650653
ch.data["begin"] = data
651-
if pre_solve == Space.do_nothing:
654+
if pre_solve == empty_callback:
652655
ch.pre_solve = None
653656
elif pre_solve != None:
654657
ch.pre_solve = pre_solve
655658
ch.data["pre_solve"] = data
656-
if post_solve == Space.do_nothing:
659+
if post_solve == empty_callback:
657660
ch.post_solve = None
658661
elif post_solve != None:
659662
ch.post_solve = post_solve
660663
ch.data["post_solve"] = data
661-
if separate == Space.do_nothing:
664+
if separate == empty_callback:
662665
ch.separate = None
663666
elif separate != None:
664667
ch.separate = separate
665668
ch.data["separate"] = data
666669
return
667670

668-
@staticmethod
669-
def do_nothing(arbiter: Arbiter, space: "Space", data: Any) -> None:
670-
"""The default do nothing method used for the collision callbacks.
671-
672-
Can be used to reset a collsion callback to its original do nothing
673-
function. Note that its more efficient to use this method than to
674-
define your own do nothing method.
675-
"""
676-
return
677-
678671
def add_post_step_callback(
679672
self,
680673
callback_function: Callable[
@@ -989,16 +982,19 @@ def __getstate__(self) -> _State:
989982
d["special"].append(("shapes", list(self.shapes)))
990983
d["special"].append(("constraints", list(self.constraints)))
991984

985+
# to avoid circular dep
986+
from . import empty_callback
987+
992988
handlers = []
993989
for k, v in self._handlers.items():
994990
h: dict[str, Any] = {}
995-
if v._begin != Space.do_nothing:
991+
if v._begin != empty_callback:
996992
h["_begin"] = v._begin
997-
if v._pre_solve != Space.do_nothing:
993+
if v._pre_solve != empty_callback:
998994
h["_pre_solve"] = v._pre_solve
999-
if v._post_solve != Space.do_nothing:
995+
if v._post_solve != empty_callback:
1000996
h["_post_solve"] = v._post_solve
1001-
if v._separate != Space.do_nothing:
997+
if v._separate != empty_callback:
1002998
h["_separate"] = v._separate
1003999
handlers.append((k, h))
10041000

@@ -1061,7 +1057,7 @@ def __setstate__(self, state: _State) -> None:
10611057
if "_separate" in hd:
10621058
separate = hd["_separate"]
10631059
if k2 == None:
1064-
self.set_collision_callback(
1060+
self.on_collision(
10651061
None,
10661062
None,
10671063
begin=begin,
@@ -1070,7 +1066,7 @@ def __setstate__(self, state: _State) -> None:
10701066
separate=separate,
10711067
)
10721068
elif isinstance(k2, tuple):
1073-
self.set_collision_callback(
1069+
self.on_collision(
10741070
k2[0],
10751071
k2[1],
10761072
begin=begin,
@@ -1079,7 +1075,7 @@ def __setstate__(self, state: _State) -> None:
10791075
separate=separate,
10801076
)
10811077
else:
1082-
self.set_collision_callback(
1078+
self.on_collision(
10831079
k2,
10841080
None,
10851081
begin=begin,

pymunk/tests/test_arbiter.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ def pre_solve(arb: p.Arbiter, space: p.Space, data: Any) -> None:
2828
self.assertEqual(arb.restitution, 0.18)
2929
arb.restitution = 1
3030

31-
s.set_collision_callback(1, 2, pre_solve=pre_solve)
31+
s.on_collision(1, 2, pre_solve=pre_solve)
3232

3333
for x in range(10):
3434
s.step(0.1)
@@ -56,7 +56,7 @@ def pre_solve(arb: p.Arbiter, space: p.Space, data: Any) -> None:
5656
self.assertEqual(arb.friction, 0.18)
5757
arb.friction = 1
5858

59-
s.set_collision_callback(1, 2, pre_solve=pre_solve)
59+
s.on_collision(1, 2, pre_solve=pre_solve)
6060

6161
for x in range(10):
6262
s.step(0.1)
@@ -87,7 +87,7 @@ def pre_solve(arb: p.Arbiter, space: p.Space, data: Any) -> None:
8787
arb.surface_velocity = (10, 10)
8888
# TODO: add assert check that setting surface_velocity has any effect
8989

90-
s.set_collision_callback(1, 2, pre_solve=pre_solve)
90+
s.on_collision(1, 2, pre_solve=pre_solve)
9191
for x in range(5):
9292
s.step(0.1)
9393

@@ -142,7 +142,7 @@ def f() -> None:
142142

143143
self.assertRaises(Exception, f)
144144

145-
s.set_collision_callback(2, 1, pre_solve=pre_solve)
145+
s.on_collision(2, 1, pre_solve=pre_solve)
146146

147147
s.step(0.1)
148148

@@ -170,7 +170,7 @@ def post_solve(arb: p.Arbiter, space: p.Space, data: Any) -> None:
170170
self.assertAlmostEqual(arb.total_impulse.y, 4.3438914027)
171171
self.post_solve_done = True
172172

173-
s.set_collision_callback(1, 2, post_solve=post_solve)
173+
s.on_collision(1, 2, post_solve=post_solve)
174174

175175
s.step(0.1)
176176

@@ -197,7 +197,7 @@ def testTotalKE(self) -> None:
197197
def post_solve(arb: p.Arbiter, space: p.Space, data: Any) -> None:
198198
r["ke"] = arb.total_ke
199199

200-
s.set_collision_callback(1, 2, post_solve=post_solve)
200+
s.on_collision(1, 2, post_solve=post_solve)
201201

202202
s.step(0.1)
203203

@@ -223,14 +223,14 @@ def testIsFirstContact(self) -> None:
223223
def pre_solve1(arb: p.Arbiter, space: p.Space, data: Any) -> None:
224224
self.assertTrue(arb.is_first_contact)
225225

226-
s.set_collision_callback(1, 2, pre_solve=pre_solve1)
226+
s.on_collision(1, 2, pre_solve=pre_solve1)
227227

228228
s.step(0.1)
229229

230230
def pre_solve2(arb: p.Arbiter, space: p.Space, data: Any) -> None:
231231
self.assertFalse(arb.is_first_contact)
232232

233-
s.set_collision_callback(1, 2, pre_solve=pre_solve2)
233+
s.on_collision(1, 2, pre_solve=pre_solve2)
234234

235235
s.step(0.1)
236236

@@ -251,7 +251,7 @@ def testNormal(self) -> None:
251251
def pre_solve1(arb: p.Arbiter, space: p.Space, data: Any) -> None:
252252
r["n"] = Vec2d(*arb.normal)
253253

254-
s.set_collision_callback(1, 2, pre_solve=pre_solve1)
254+
s.on_collision(1, 2, pre_solve=pre_solve1)
255255

256256
s.step(0.1)
257257

@@ -281,7 +281,7 @@ def separate1(arb: p.Arbiter, space: p.Space, data: Any) -> None:
281281
self.called1 = True
282282
self.assertFalse(arb.is_removal)
283283

284-
s.set_collision_callback(1, 2, separate=separate1)
284+
s.on_collision(1, 2, separate=separate1)
285285

286286
for x in range(10):
287287
s.step(0.1)
@@ -296,7 +296,7 @@ def separate2(arb: p.Arbiter, space: p.Space, data: Any) -> None:
296296
self.called2 = True
297297
self.assertTrue(arb.is_removal)
298298

299-
s.set_collision_callback(1, 2, separate=separate2)
299+
s.on_collision(1, 2, separate=separate2)
300300
s.remove(b1, c1)
301301

302302
self.assertTrue(self.called2)
@@ -328,7 +328,7 @@ def pre_solve(arb: p.Arbiter, space: p.Space, data: Any) -> None:
328328
self.assertEqual(arb.bodies[0], arb.shapes[0].body)
329329
self.assertEqual(arb.bodies[1], arb.shapes[1].body)
330330

331-
s.set_collision_callback(1, 2, post_solve=pre_solve)
331+
s.on_collision(1, 2, post_solve=pre_solve)
332332

333333
s.step(0.1)
334334
self.assertTrue(self.called)
@@ -412,7 +412,7 @@ def callback(
412412
hdata["process_values"] = process_values
413413
hdata["expected"] = expected_calls
414414
hdata["result"] = []
415-
s.set_collision_callback(
415+
s.on_collision(
416416
1,
417417
2,
418418
begin=functools.partial(callback, "b"),

pymunk/tests/test_common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ def remove_first(arbiter: p.Arbiter, space: p.Space, data: Any) -> None:
126126
# space.add_post_step_callback(space.remove, first_shape, first_shape.body)
127127
# space.remove(c1)
128128

129-
space.set_collision_callback(2, 0, separate=remove_first)
129+
space.on_collision(2, 0, separate=remove_first)
130130
# print(1)
131131
space.step(1.0 / 60)
132132
# print(2)
@@ -166,7 +166,7 @@ def separate(arbiter: p.Arbiter, space: p.Space, data: Any) -> None:
166166
# space.add_post_step_callback(space.remove, first_shape, first_shape.body)
167167
# space.remove(c1)
168168

169-
space.set_collision_callback(2, 0, separate=separate)
169+
space.on_collision(2, 0, separate=separate)
170170
# print(1)
171171
space.step(1)
172172
# print(2)

pymunk/tests/test_shape.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ def testSegmentSegmentCollision(self) -> None:
301301
def begin(arb: p.Arbiter, space: p.Space, data: Any) -> None:
302302
self.num_of_begins += 1
303303

304-
s.set_collision_callback(begin=begin)
304+
s.on_collision(begin=begin)
305305
s.step(0.1)
306306

307307
self.assertEqual(1, self.num_of_begins)

0 commit comments

Comments
 (0)