@@ -490,6 +490,33 @@ pg_line_flip_ip(pgLineObject *self, PyObject *_null)
490490 Py_RETURN_NONE ;
491491}
492492
493+ static PyObject *
494+ pg_line_collidepolygon (pgLineObject * self , PyObject * const * args ,
495+ Py_ssize_t nargs )
496+ {
497+ pgPolygonBase poly ;
498+ int was_sequence , result = 0 , only_edges = 0 ;
499+
500+ if (PyBool_Check (args [nargs - 1 ])) {
501+ if (args [nargs - 1 ] == Py_True ) {
502+ only_edges = 1 ;
503+ }
504+ nargs -- ;
505+ }
506+
507+ if (!pgPolygon_FromObjectFastcall (args , nargs , & poly , & was_sequence )) {
508+ return RAISE (
509+ PyExc_TypeError ,
510+ "collidepolygon requires a Polygon or PolygonLike object" );
511+ }
512+
513+ result = pgCollision_PolygonLine (& poly , & self -> line , only_edges );
514+
515+ PG_FREEPOLY_COND (& poly , was_sequence );
516+
517+ return PyBool_FromLong (result );
518+ }
519+
493520static struct PyMethodDef pg_line_methods [] = {
494521 {"__copy__" , (PyCFunction )pg_line_copy , METH_NOARGS , NULL },
495522 {"copy" , (PyCFunction )pg_line_copy , METH_NOARGS , NULL },
@@ -501,6 +528,7 @@ static struct PyMethodDef pg_line_methods[] = {
501528 {"collidecircle" , (PyCFunction )pg_line_collidecircle , METH_FASTCALL , NULL },
502529 {"colliderect" , (PyCFunction )pg_line_colliderect , METH_FASTCALL , NULL },
503530 {"collideswith" , (PyCFunction )pg_line_collideswith , METH_O , NULL },
531+ {"collidepolygon" , (PyCFunction )pg_line_collidepolygon , METH_FASTCALL , NULL },
504532 {"as_rect" , (PyCFunction )pg_line_as_rect , METH_NOARGS , NULL },
505533 {"update" , (PyCFunction )pg_line_update , METH_FASTCALL , NULL },
506534 {"move" , (PyCFunction )pg_line_move , METH_FASTCALL , NULL },
0 commit comments