JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
oops, didn't fix bang dots correctly.
[vor.git] / sprite.h
index e1216cf..3cb2c0e 100644 (file)
--- a/sprite.h
+++ b/sprite.h
@@ -8,13 +8,14 @@ typedef struct sprite Sprite;
 
 #define SPRITE(x) ((Sprite *) (x))
 
-#define BASE_SPRITE 0
-#define SHIP_SPRITE 1
-#define ROCK_SPRITE 2
+#define BASE 0
+#define SHIP 1
+#define ROCK 2
 #define N_TYPES 3
 
 struct sprite {
        int8_t type;
+       int8_t flags;
        Sprite *next;
        float x, y;
        float dx, dy;
@@ -25,17 +26,28 @@ struct sprite {
        uint32_t area;
 };
 
+#define MOVE 1
+#define DRAW 2
+#define COLLIDE 4
+
+#define COLLIDES(sprite) ((sprite)->flags & COLLIDE)
+
 Sprite *free_sprites[N_TYPES];  // lists of free sprites, by type.
 
+void do_collision(Sprite *a, Sprite *b);
+void collisions(void);
+
 void init_sprites(void);
+void reset_sprites(void);
 void add_sprite(Sprite *s);
 void move_sprite(Sprite *s);
 void move_sprites(void);
 
 Sprite *collides(Sprite *s);
-int pixel_collides(float x, float y);
+Sprite * pixel_collides(float x, float y);
 void load_sprite(Sprite *sprite, char *filename);
 
+float sprite_mass(Sprite *s);
 void bounce(Sprite *a, Sprite *b);
 
 
@@ -44,6 +56,7 @@ void bounce(Sprite *a, Sprite *b);
 struct ship {
        // core sprite fields
        int8_t sprite_type;
+       int8_t flags;
        struct ship *next;
        float x, y;
        float dx, dy;
@@ -60,6 +73,7 @@ struct ship {
 struct rock {
        // core sprite fields
        int8_t sprite_type;
+       int8_t flags;
        struct rock *next;
        float x, y;
        float dx, dy;
@@ -95,9 +109,10 @@ static inline void
 draw_sprite(Sprite *s)
 {
        SDL_Rect dest;
-       if(s->type == NONE) return;
-       dest.x = s->x; dest.y = s->y;
-       SDL_BlitSurface(s->image, NULL, surf_screen, &dest);
+       if(s->flags & DRAW) {
+               dest.x = s->x; dest.y = s->y;
+               SDL_BlitSurface(s->image, NULL, surf_screen, &dest);
+       }
 }
 
 #endif // VOR_SPRITE_H