8
8
from ._chipmunk_cffi import ffi , lib
9
9
from .arbiter import Arbiter
10
10
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 ]
13
12
14
13
15
14
class CollisionHandler (object ):
@@ -42,10 +41,10 @@ def __init__(self, _handler: Any, space: "Space") -> None:
42
41
self ._handler .userData = self ._userData
43
42
44
43
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
49
48
50
49
self ._data : Dict [Any , Any ] = {}
51
50
@@ -61,10 +60,10 @@ def data(self) -> Dict[Any, Any]:
61
60
return self ._data
62
61
63
62
@property
64
- def begin (self ) -> _CollisionCallbackBool :
63
+ def begin (self ) -> _CollisionCallback :
65
64
"""Two shapes just started touching for the first time this step.
66
65
67
- ``func(arbiter, space, data) -> bool ``
66
+ ``func(arbiter, space, data)``
68
67
69
68
Return true from the callback to process the collision normally or
70
69
false to cause pymunk to ignore the collision entirely. If you return
@@ -75,39 +74,38 @@ def begin(self) -> _CollisionCallbackBool:
75
74
return self ._begin
76
75
77
76
@begin .setter
78
- def begin (self , func : _CollisionCallbackBool ) -> None :
77
+ def begin (self , func : _CollisionCallback ) -> None :
79
78
self ._begin = func
80
79
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 " )
83
82
else :
84
83
self ._handler .beginFunc = lib .ext_cpCollisionBeginFunc
85
84
86
85
@property
87
- def pre_solve (self ) -> _CollisionCallbackBool :
86
+ def pre_solve (self ) -> _CollisionCallback :
88
87
"""Two shapes are touching during this step.
89
88
90
- ``func(arbiter, space, data) -> bool ``
89
+ ``func(arbiter, space, data)``
91
90
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
94
92
override collision values using Arbiter.friction, Arbiter.elasticity
95
93
or Arbiter.surfaceVelocity to provide custom friction, elasticity,
96
94
or surface velocity values. See Arbiter for more info.
97
95
"""
98
96
return self ._pre_solve
99
97
100
98
@pre_solve .setter
101
- def pre_solve (self , func : _CollisionCallbackBool ) -> None :
99
+ def pre_solve (self , func : _CollisionCallback ) -> None :
102
100
self ._pre_solve = func
103
101
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 " )
106
104
else :
107
105
self ._handler .preSolveFunc = lib .ext_cpCollisionPreSolveFunc
108
106
109
107
@property
110
- def post_solve (self ) -> _CollisionCallbackNoReturn :
108
+ def post_solve (self ) -> _CollisionCallback :
111
109
"""Two shapes are touching and their collision response has been
112
110
processed.
113
111
@@ -120,18 +118,16 @@ def post_solve(self) -> _CollisionCallbackNoReturn:
120
118
return self ._post_solve
121
119
122
120
@post_solve .setter
123
- def post_solve (self , func : _CollisionCallbackNoReturn ) -> None :
121
+ def post_solve (self , func : _CollisionCallback ) -> None :
124
122
self ._post_solve = func
125
123
126
124
if self ._post_solve == CollisionHandler .do_nothing :
127
125
self ._handler .postSolveFunc = ffi .addressof (lib , "DoNothing" )
128
126
else :
129
127
self ._handler .postSolveFunc = lib .ext_cpCollisionPostSolveFunc
130
128
131
- self ._handler .postSolveFunc = lib .ext_cpCollisionPostSolveFunc
132
-
133
129
@property
134
- def separate (self ) -> _CollisionCallbackNoReturn :
130
+ def separate (self ) -> _CollisionCallback :
135
131
"""Two shapes have just stopped touching for the first time this
136
132
step.
137
133
@@ -144,7 +140,7 @@ def separate(self) -> _CollisionCallbackNoReturn:
144
140
return self ._separate
145
141
146
142
@separate .setter
147
- def separate (self , func : _CollisionCallbackNoReturn ) -> None :
143
+ def separate (self , func : _CollisionCallback ) -> None :
148
144
self ._separate = func
149
145
150
146
if self ._separate == CollisionHandler .do_nothing :
@@ -161,14 +157,3 @@ def do_nothing(arbiter: Arbiter, space: "Space", data: Dict[Any, Any]) -> None:
161
157
do nothing method.
162
158
"""
163
159
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