]> git.itanic.dy.fi Git - sdl-planets/blobdiff - planet.c
Move position vector from planet to quadtree
[sdl-planets] / planet.c
index a79c085a8ef714d6e67bb10036247292929d1245..39f8c35b3a7e8084303bcdc76f04b263c6f724d5 100644 (file)
--- a/planet.c
+++ b/planet.c
@@ -86,8 +86,8 @@ static void setup_planet(struct planet *p, double mass, double total_mass,
 
        velocity *= pow(distance / radius, 0.2);
 
-       p->pos.x = cos(angle) * distance;
-       p->pos.y = sin(angle) * distance;
+       p->tree.pos.x = cos(angle) * distance;
+       p->tree.pos.y = sin(angle) * distance;
 
        p->speed.x = -sin(angle) * velocity;
        p->speed.y = cos(angle) * velocity;
@@ -179,7 +179,7 @@ void draw_planet(SDL_Surface *screen, struct planet *p,
        float radius = p->radius * cam->zoom;
        int i;
 
-       vector_sub(&p->pos, &cam->pos, &pos);
+       vector_sub(&p->tree.pos, &cam->pos, &pos);
        vector_scale(&pos, cam->zoom, &pos);
        pos.x += screen->w / 2;
        pos.y += screen->h / 2;
@@ -191,7 +191,7 @@ void draw_planet(SDL_Surface *screen, struct planet *p,
 
                        struct planet *q = tree_to_planet(p->tree.child[i]);
 
-                       draw_line(screen, &p->pos, &q->pos,
+                       draw_line(screen, &p->tree.pos, &q->tree.pos,
                                  p->r, p->g, p->b, cam);
                }
        }
@@ -204,7 +204,7 @@ 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);
+       vector_sub(&a->tree.pos, &b->tree.pos, &distance);
 
        dist = vector_abs(&distance);
 
@@ -243,7 +243,7 @@ static void _merge_planets(struct planet *a, struct planet *b)
        mass = a->mass + b->mass;
 
        if (a->mass < b->mass)
-               a->pos = b->pos;
+               a->tree.pos = b->tree.pos;
 
        a->r = (a->r * a->mass + b->r * b->mass) / mass;
        a->g = (a->g * a->mass + b->g * b->mass) / mass;
@@ -280,11 +280,11 @@ static int planet_search_when_moving(struct quadtree *node,
        int up = 0, left = 0, right = 0, down = 0;
 
        for (i = 0; i < 2; i++) {
-               if (it->limit[i].x < p->pos.x)
+               if (it->limit[i].x < p->tree.pos.x)
                        left = 1;
                else
                        right = 1;
-               if (it->limit[i].y < p->pos.y)
+               if (it->limit[i].y < p->tree.pos.y)
                        up = 1;
                else
                        down = 1;
@@ -325,19 +325,19 @@ struct planet *move_planet(struct planet *p, const double time)
        int modify = 0;
 
        vector_scale(&p->speed, time, &tmp);
-       vector_add(&p->pos, &tmp, &new_pos);
+       vector_add(&p->tree.pos, &tmp, &new_pos);
 
        /* Check if we have crossed any of the parents */
        parent = p->tree.parent;
        while (parent) {
                pa = tree_to_planet(parent);
-               if (p->pos.x < pa->pos.x && new_pos.x > pa->pos.x)
+               if (p->tree.pos.x < pa->tree.pos.x && new_pos.x > pa->tree.pos.x)
                        modify = 1;
-               if (p->pos.x > pa->pos.x && new_pos.x < pa->pos.x)
+               if (p->tree.pos.x > pa->tree.pos.x && new_pos.x < pa->tree.pos.x)
                        modify = 1;
-               if (p->pos.y < pa->pos.y && new_pos.y > pa->pos.y)
+               if (p->tree.pos.y < pa->tree.pos.y && new_pos.y > pa->tree.pos.y)
                        modify = 1;
-               if (p->pos.y > pa->pos.y && new_pos.y < pa->pos.y)
+               if (p->tree.pos.y > pa->tree.pos.y && new_pos.y < pa->tree.pos.y)
                        modify = 1;
 
                if (!modify) {
@@ -346,7 +346,7 @@ struct planet *move_planet(struct planet *p, const double time)
                }
 
                tree_parent = quadtree_del(&p->tree, &planet_ops);
-               p->pos = new_pos;
+               p->tree.pos = new_pos;
                quadtree_add(tree_parent, &p->tree, &planet_ops);
                return tree_to_planet(tree_parent);
        }
@@ -357,13 +357,13 @@ struct planet *move_planet(struct planet *p, const double time)
                 * them into correct place within the tree.
                 */
                it.qt_iterator.head = &p->tree;
-               it.limit[0] = p->pos;
+               it.limit[0] = p->tree.pos;
                it.limit[1] = new_pos;
                it.qt_iterator.direction = planet_search_when_moving;
                it.qt_iterator.callback = planet_move_iterator;
                walk_quadtree(&it.qt_iterator);
        }
-       p->pos = new_pos;
+       p->tree.pos = new_pos;
 
        return tree_to_planet(quadtree_find_parent(&p->tree));
 }
@@ -371,7 +371,7 @@ struct planet *move_planet(struct planet *p, const double time)
 void print_planet(const struct planet *p)
 {
        printf("pos: (%f,%f), speed: (%f,%f), mass: %f, radius %f\n",
-              p->pos.x, p->pos.y, p->speed.x, p->speed.y, p->mass, p->radius);
+              p->tree.pos.x, p->tree.pos.y, p->speed.x, p->speed.y, p->mass, p->radius);
 }
 
 int planet_spatial_compare(struct quadtree *ta, struct quadtree *tb)
@@ -381,8 +381,8 @@ int planet_spatial_compare(struct quadtree *ta, struct quadtree *tb)
        a = tree_to_planet(ta);
        b = tree_to_planet(tb);
 
-       up = b->pos.y < a->pos.y;
-       left = b->pos.x < a->pos.x;
+       up = b->tree.pos.y < a->tree.pos.y;
+       left = b->tree.pos.x < a->tree.pos.x;
 
        if (up && left)
                return 0;
@@ -402,11 +402,11 @@ int planet_search_rectangular(struct quadtree *node,
        int up = 0, left = 0, right = 0, down = 0;
 
        for (i = 0; i < 2; i++) {
-               if (it->limit[i].x < p->pos.x)
+               if (it->limit[i].x < p->tree.pos.x)
                        left = 1;
                else
                        right = 1;
-               if (it->limit[i].y < p->pos.y)
+               if (it->limit[i].y < p->tree.pos.y)
                        up = 1;
                else
                        down = 1;
@@ -452,7 +452,7 @@ static void planet_recalculate_stats(struct quadtree *node)
                c = tree_to_planet(node->child[i]);
                p->tree_mass += c->tree_mass;
 
-               vector_sub(&p->pos, &c->pos, &vect);
+               vector_sub(&p->tree.pos, &c->tree.pos, &vect);
                dist = vector_abs(&vect);
                dist += c->tree_area;
                p->tree_area = MAX(p->tree_area, dist);