@@ -858,6 +858,79 @@ def callback(
858858        ]
859859        self .assertListEqual (callback_calls , expected_calls )
860860
861+     def  testSameTypeCollisionHandler (self ) ->  None :
862+         s  =  p .Space ()
863+ 
864+         callback_calls  =  []
865+ 
866+         def  callback (
867+             name : str ,
868+             types : tuple [Optional [int ], Optional [int ]],
869+             arb : p .Arbiter ,
870+             space : p .Space ,
871+             data : dict [Any , Any ],
872+         ) ->  None :
873+             callback_calls .append (
874+                 (
875+                     name ,
876+                     types ,
877+                     (arb .shapes [0 ].friction , arb .shapes [1 ].friction ),
878+                 )
879+             )
880+ 
881+         handler_order  =  [
882+             (1 , 1 ),
883+             (1 , None ),
884+             (None , None ),
885+         ]
886+ 
887+         for  t1 , t2  in  handler_order :
888+             s .on_collision (
889+                 t1 ,
890+                 t2 ,
891+                 begin = functools .partial (callback , "begin" , (t1 , t2 )),
892+                 pre_solve = functools .partial (callback , "pre_solve" , (t1 , t2 )),
893+                 post_solve = functools .partial (callback , "post_solve" , (t1 , t2 )),
894+                 separate = functools .partial (callback , "separate" , (t1 , t2 )),
895+             )
896+ 
897+         b1  =  p .Body (1 , 30 )
898+         c1  =  p .Circle (b1 , 10 )
899+         b1 .position  =  5 , 3 
900+         c1 .collision_type  =  1 
901+         c1 .friction  =  1 
902+ 
903+         b2  =  p .Body (body_type = p .Body .STATIC )
904+         c2  =  p .Circle (b2 , 10 )
905+         c2 .collision_type  =  1 
906+         c2 .friction  =  2 
907+ 
908+         s .add (b1 , c1 , b2 , c2 )
909+ 
910+         s .step (0.1 )
911+         b1 .position  =  100 , 100 
912+         s .step (0.1 )
913+ 
914+         expected_calls  =  [
915+             ("begin" , (1 , 1 ), (2 , 1 )),
916+             ("begin" , (1 , None ), (2 , 1 )),
917+             ("begin" , (1 , None ), (1 , 2 )),
918+             ("begin" , (None , None ), (2 , 1 )),
919+             ("pre_solve" , (1 , 1 ), (2 , 1 )),
920+             ("pre_solve" , (1 , None ), (2 , 1 )),
921+             ("pre_solve" , (1 , None ), (1 , 2 )),
922+             ("pre_solve" , (None , None ), (2 , 1 )),
923+             ("post_solve" , (1 , 1 ), (2 , 1 )),
924+             ("post_solve" , (1 , None ), (2 , 1 )),
925+             ("post_solve" , (1 , None ), (1 , 2 )),
926+             ("post_solve" , (None , None ), (2 , 1 )),
927+             ("separate" , (1 , 1 ), (2 , 1 )),
928+             ("separate" , (1 , None ), (2 , 1 )),
929+             ("separate" , (1 , None ), (1 , 2 )),
930+             ("separate" , (None , None ), (2 , 1 )),
931+         ]
932+         self .assertListEqual (callback_calls , expected_calls )
933+ 
861934    def  testWildcardCollisionHandler (self ) ->  None :
862935        s  =  p .Space ()
863936        b1  =  p .Body (1 , 1 )
0 commit comments