88from ._chipmunk_cffi import ffi , lib
99from .arbiter import Arbiter
1010
11- _CollisionCallbackBool = Callable [[Arbiter , "Space" , Dict [Any , Any ]], bool ]
12- _CollisionCallbackNoReturn = Callable [[Arbiter , "Space" , Dict [Any , Any ]], None ]
11+ _CollisionCallback = Callable [[Arbiter , "Space" , Dict [Any , Any ]], None ]
1312
1413
1514class CollisionHandler (object ):
@@ -42,10 +41,10 @@ def __init__(self, _handler: Any, space: "Space") -> None:
4241 self ._handler .userData = self ._userData
4342
4443 self ._space = space
45- self ._begin : _CollisionCallbackBool = CollisionHandler .always_collide
46- self ._pre_solve : _CollisionCallbackBool = CollisionHandler .always_collide
47- self ._post_solve : _CollisionCallbackNoReturn = CollisionHandler .do_nothing
48- self ._separate : _CollisionCallbackNoReturn = CollisionHandler .do_nothing
44+ self ._begin : _CollisionCallback = CollisionHandler .do_nothing
45+ self ._pre_solve : _CollisionCallback = CollisionHandler .do_nothing
46+ self ._post_solve : _CollisionCallback = CollisionHandler .do_nothing
47+ self ._separate : _CollisionCallback = CollisionHandler .do_nothing
4948
5049 self ._data : Dict [Any , Any ] = {}
5150
@@ -61,10 +60,10 @@ def data(self) -> Dict[Any, Any]:
6160 return self ._data
6261
6362 @property
64- def begin (self ) -> _CollisionCallbackBool :
63+ def begin (self ) -> _CollisionCallback :
6564 """Two shapes just started touching for the first time this step.
6665
67- ``func(arbiter, space, data) -> bool ``
66+ ``func(arbiter, space, data)``
6867
6968 Return true from the callback to process the collision normally or
7069 false to cause pymunk to ignore the collision entirely. If you return
@@ -75,39 +74,38 @@ def begin(self) -> _CollisionCallbackBool:
7574 return self ._begin
7675
7776 @begin .setter
78- def begin (self , func : _CollisionCallbackBool ) -> None :
77+ def begin (self , func : _CollisionCallback ) -> None :
7978 self ._begin = func
8079
81- if self ._begin == CollisionHandler .always_collide :
82- self ._handler .beginFunc = ffi .addressof (lib , "AlwaysCollide " )
80+ if self ._begin == CollisionHandler .do_nothing :
81+ self ._handler .beginFunc = ffi .addressof (lib , "DoNothing " )
8382 else :
8483 self ._handler .beginFunc = lib .ext_cpCollisionBeginFunc
8584
8685 @property
87- def pre_solve (self ) -> _CollisionCallbackBool :
86+ def pre_solve (self ) -> _CollisionCallback :
8887 """Two shapes are touching during this step.
8988
90- ``func(arbiter, space, data) -> bool ``
89+ ``func(arbiter, space, data)``
9190
92- Return false from the callback to make pymunk ignore the collision
93- this step or true to process it normally. Additionally, you may
91+ Additionally, you may
9492 override collision values using Arbiter.friction, Arbiter.elasticity
9593 or Arbiter.surfaceVelocity to provide custom friction, elasticity,
9694 or surface velocity values. See Arbiter for more info.
9795 """
9896 return self ._pre_solve
9997
10098 @pre_solve .setter
101- def pre_solve (self , func : _CollisionCallbackBool ) -> None :
99+ def pre_solve (self , func : _CollisionCallback ) -> None :
102100 self ._pre_solve = func
103101
104- if self ._pre_solve == CollisionHandler .always_collide :
105- self ._handler .preSolveFunc = ffi .addressof (lib , "AlwaysCollide " )
102+ if self ._pre_solve == CollisionHandler .do_nothing :
103+ self ._handler .preSolveFunc = ffi .addressof (lib , "DoNothing " )
106104 else :
107105 self ._handler .preSolveFunc = lib .ext_cpCollisionPreSolveFunc
108106
109107 @property
110- def post_solve (self ) -> _CollisionCallbackNoReturn :
108+ def post_solve (self ) -> _CollisionCallback :
111109 """Two shapes are touching and their collision response has been
112110 processed.
113111
@@ -120,18 +118,16 @@ def post_solve(self) -> _CollisionCallbackNoReturn:
120118 return self ._post_solve
121119
122120 @post_solve .setter
123- def post_solve (self , func : _CollisionCallbackNoReturn ) -> None :
121+ def post_solve (self , func : _CollisionCallback ) -> None :
124122 self ._post_solve = func
125123
126124 if self ._post_solve == CollisionHandler .do_nothing :
127125 self ._handler .postSolveFunc = ffi .addressof (lib , "DoNothing" )
128126 else :
129127 self ._handler .postSolveFunc = lib .ext_cpCollisionPostSolveFunc
130128
131- self ._handler .postSolveFunc = lib .ext_cpCollisionPostSolveFunc
132-
133129 @property
134- def separate (self ) -> _CollisionCallbackNoReturn :
130+ def separate (self ) -> _CollisionCallback :
135131 """Two shapes have just stopped touching for the first time this
136132 step.
137133
@@ -144,7 +140,7 @@ def separate(self) -> _CollisionCallbackNoReturn:
144140 return self ._separate
145141
146142 @separate .setter
147- def separate (self , func : _CollisionCallbackNoReturn ) -> None :
143+ def separate (self , func : _CollisionCallback ) -> None :
148144 self ._separate = func
149145
150146 if self ._separate == CollisionHandler .do_nothing :
@@ -161,14 +157,3 @@ def do_nothing(arbiter: Arbiter, space: "Space", data: Dict[Any, Any]) -> None:
161157 do nothing method.
162158 """
163159 return
164-
165- @staticmethod
166- def always_collide (arbiter : Arbiter , space : "Space" , data : Dict [Any , Any ]) -> bool :
167- """The default method used for the begin and pre_solve callbacks.
168-
169- It will always return True, meaning the collision should not be ignored.
170-
171- Note that its more efficient to set this method than to define your own
172- return True method.
173- """
174- return True
0 commit comments