]> git.itanic.dy.fi Git - sdl-planets/blobdiff - planet.c
Introduce struct quadree_ops
[sdl-planets] / planet.c
index de0e49fa2d2bdb3138ed46e9aec54e15fc85232d..6a3e59464f2b8cfcc2ddc74146cdb5da34d8c21b 100644 (file)
--- a/planet.c
+++ b/planet.c
@@ -4,6 +4,10 @@
 #include "planet.h"
 #include "utils.h"
 
+struct quadtree_ops planet_ops = {
+       .compare = planet_spatial_compare,
+};
+
 static void putpixel(struct SDL_Surface *screen, const int x, const int y,
                     const unsigned char r, const unsigned char g,
                     const unsigned char b)
@@ -90,8 +94,7 @@ void create_planets(struct planet *p, int num, double total_mass, double radius)
                             total_mass,
                             radius);
 
-               quadtree_add(&p->tree, &new_planet->tree,
-                            planet_spatial_compare);
+               quadtree_add(&p->tree, &new_planet->tree, &planet_ops);
 
                sum += new_planet->mass;
        }
@@ -201,7 +204,7 @@ struct planet *merge_planets(struct planet *a, struct planet *b)
        _merge_planets(a, b);
 
        list_del(&b->list);
-       quadtree_del(&b->tree, planet_spatial_compare);
+       quadtree_del(&b->tree, &planet_ops);
 
        free(b);
        return a;
@@ -244,8 +247,8 @@ void planet_move_iterator(struct quadtree *node, struct quadtree_iterator *it)
 {
        struct quadtree *parent;
 
-       parent = quadtree_del(node, planet_spatial_compare);
-       quadtree_add(parent, node, planet_spatial_compare);
+       parent = quadtree_del(node, &planet_ops);
+       quadtree_add(parent, node, &planet_ops);
 }
 
 struct planet *move_planet(struct planet *p, const double time)
@@ -278,9 +281,9 @@ struct planet *move_planet(struct planet *p, const double time)
                        continue;
                }
 
-               tree_parent = quadtree_del(&p->tree, planet_spatial_compare);
+               tree_parent = quadtree_del(&p->tree, &planet_ops);
                p->pos = new_pos;
-               quadtree_add(tree_parent, &p->tree, planet_spatial_compare);
+               quadtree_add(tree_parent, &p->tree, &planet_ops);
                return tree_to_planet(tree_parent);
        }