Basic collision detection


sge_cdata *sge_make_cmap(SDL_Surface *img)
Creates a new collision map. Use SDL_SetColorKey() before calling this function. Every non-transparent pixel is set to solid in the collision map. The collision map is bit encoded in a Uint8 array. Returns the collision map or NULL on error.

int sge_bbcheck(sge_cdata *cd1,Sint16 x1,Sint16 y1, sge_cdata *cd2,Sint16 x2,Sint16 y2)
int _sge_bbcheck(Sint16 x1,Sint16 y1,Sint16 w1,Sint16 h1, Sint16 x2,Sint16 y2,Sint16 w2,Sint16 h2)

Checks if two rectangles (the bounding boxes) overlap. Returns 1 if so or else 0.

int sge_bbcheck_shape(sge_shape *shape1, sge_shape *shape2)
Checks if two shapes (the bounding boxes) overlap. Returns 1 if so or else 0.

int sge_cmcheck(sge_cdata *cd1,Sint16 x1,Sint16 y1, sge_cdata *cd2,Sint16 x2,Sint16 y2)
int _sge_cmcheck(sge_cdata *cd1,Sint16 x1,Sint16 y1, sge_cdata *cd2,Sint16 x2,Sint16 y2);

Does pixel perfect collision detection. The (x1,y1) and (x2,y2) coords are the positions of the upper left corners of the images. You MUST call sge_bbcheck() before using _sge_cmcheck(), sge_cmcheck() does this automatically. Returns 1 if any solid pixels of the two images overlap or else 0.

Sint16 sge_get_cx(void)
Sint16 sge_get_cy(void)

Returns the position of the last collision found by sge_cmcheck().

void sge_unset_cdata(sge_cdata *cd, Sint16 x, Sint16 y, Sint16 w, Sint16 h)
Clears an area in the collision map from anything solid.

void sge_set_cdata(sge_cdata *cd, Sint16 x, Sint16 y, Sint16 w, Sint16 h)
Makes an area in the collision map solid.

void sge_destroy_cmap(sge_cdata *cd)
Removes collision map from memory.





Copyright © 1999-2003 Anders Lindström
Last updated 030808