putpixel(screen, x, y, p->r, p->g, p->b);
}
-void gravitize_planets(struct planet *a, struct planet *b, const double time)
+int gravitize_planets(struct planet *a, struct planet *b, const double time)
{
struct vector distance, sum;
double dist, f, acc;
vector_sub(&a->pos, &b->pos, &distance);
dist = vector_abs(&distance);
+
+ /* Return true in case of a collision */
+ if (dist < (a->size + b->size))
+ return 1;
+
vector_div(&distance, dist, &distance);
f = a->mass * b->mass / (dist * dist + 5) * time;
acc = f / a->mass;
vector_scale(&distance, acc, &sum);
vector_sub(&a->speed, &sum, &a->speed);
+
+ return 0;
}
void move_planet(struct planet *p, const double time)
void init_planet(const SDL_Surface *screen, struct planet *p);
void draw_planet(SDL_Surface *screen, struct planet *p);
-void gravitize_planets(struct planet *a, struct planet *b, const double time);
+int gravitize_planets(struct planet *a, struct planet *b, const double time);
void move_planet(struct planet *p, const double time);
void print_planet(const struct planet *p);