init_planet(new_planet);
list_add(&new_planet->list, &p->list);
- quadtree_add(&new_planet->tree, &p->tree,
- planet_spatial_compare);
setup_planet(new_planet,
total_mass / num * 2 * get_random_double(),
total_mass,
radius);
+ quadtree_add(&p->tree, &new_planet->tree,
+ planet_spatial_compare);
+
sum += new_planet->mass;
}
}
_merge_planets(a, b);
list_del(&b->list);
+ quadtree_del(&b->tree, planet_spatial_compare);
+
free(b);
return a;
}
-void move_planet(struct planet *p, const double time)
+struct planet *move_planet(struct planet *p, const double time)
{
struct vector tmp;
+ struct quadtree *tree_parent;
+
vector_scale(&p->speed, time, &tmp);
vector_add(&p->pos, &tmp, &p->pos);
+
+ tree_parent = quadtree_del(&p->tree, planet_spatial_compare);
+ quadtree_add(tree_parent, &p->tree, planet_spatial_compare);
+ return tree_to_planet(tree_parent);
}
void print_planet(const struct planet *p)
void draw_planet(SDL_Surface *screen, struct planet *p, const struct camera *);
int gravitize_planets(struct planet *a, struct planet *b, const double time);
struct planet *merge_planets(struct planet *a, struct planet *b);
-void move_planet(struct planet *p, const double time);
+struct planet *move_planet(struct planet *p, const double time);
void print_planet(const struct planet *p);
int planet_spatial_compare(struct quadtree *a, struct quadtree *b);