X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=sprite.c;h=1609368d324ab653070e6315e90d75b2260ed774;hp=19055106dfe28d7765d9ebce30cdaf0b5b9a7701;hb=e06676edd300c8a85d2e6715427e7e22e55c7670;hpb=e9eaa65259d7c35d5a9b08aba9016145fa8f118d diff --git a/sprite.c b/sprite.c index 1905510..1609368 100644 --- a/sprite.c +++ b/sprite.c @@ -111,10 +111,25 @@ square(int x, int y, int set) void add_sprite(Sprite *s) { + if(s->type < 0) s->type = -s->type; insert_sprite(square(s->x, s->y, set), s); } void +reset_sprites(void) +{ + int i; + + for(i=0; itype < 0) s->type = -s->type; + insert_sprite(&free_sprites[s->type], s); + if(s->type > 0) s->type = -s->type; + } +} + +void move_sprite(Sprite *s) { // move it. @@ -128,8 +143,9 @@ sort_sprite(Sprite *s) // clip it, or sort it into the other set of sprites. if(s->x + s->w < 0 || s->x >= XSIZE || s->y + s->h < 0 || s->y >= YSIZE) { + if(s->type < 0) s->type = -s->type; insert_sprite(&free_sprites[s->type], s); - s->type = NONE; + if(s->type > 0) s->type = -s->type; } else insert_sprite(square(s->x, s->y, 1-set), s); } @@ -139,7 +155,7 @@ move_sprites(void) int sq; Sprite **head; - // Move all the sprites (position and set) + // Move all the sprites for(sq=0; sqnext) + if(collide(s, list)) do_collision(s, list); +} + +void collisions(void) { - int i; - Sprite *a, *b; - for(i=0; inext) - for(b=a->next; b; b=b->next) - if(collide(a, b)) do_collision(a, b); + int i, end = gw*gh; + Sprite *s; + for(i=0; inext) { + collide_with_list(s, s->next); + if(i+1 < end) collide_with_list(s, sprites[set][i+1]); + if(i+gw < end) collide_with_list(s, sprites[set][i+gw]); + if(i+gw+1 < end) collide_with_list(s, sprites[set][i+gw+1]); + } + } } Sprite * @@ -279,7 +306,7 @@ int pixel_hit_in_square(Sprite *r, float x, float y) { for(; r; r=r->next) { - if(pixel_collide(r, x, y)) return 1; + if(r->type >= 0 && pixel_collide(r, x, y)) return 1; } return 0; }