@@ -858,6 +858,79 @@ def callback(
858
858
]
859
859
self .assertListEqual (callback_calls , expected_calls )
860
860
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
+
861
934
def testWildcardCollisionHandler (self ) -> None :
862
935
s = p .Space ()
863
936
b1 = p .Body (1 , 1 )
0 commit comments