]> git.itanic.dy.fi Git - sdl-planets/commitdiff
merge_planets: Calculate new color for the remaining planet
authorEsko Kokkonen <esko.kokkonen@gmail.com>
Sat, 1 May 2010 14:23:23 +0000 (17:23 +0300)
committerEsko Kokkonen <esko.kokkonen@gmail.com>
Sat, 1 May 2010 14:23:23 +0000 (17:23 +0300)
planet.c

index 2482dd9e86e6387e3e995e403451ea41aa2a61e0..a79c085a8ef714d6e67bb10036247292929d1245 100644 (file)
--- a/planet.c
+++ b/planet.c
@@ -235,15 +235,21 @@ int gravitize_planets(struct planet *a, struct planet *b, const double time)
 static void _merge_planets(struct planet *a, struct planet *b)
 {
        struct vector pa, pb, p;
+       float mass;
 
        vector_scale(&a->speed, a->mass, &pa);
        vector_scale(&b->speed, b->mass, &pb);
        vector_add(&pa, &pb, &p);
+       mass = a->mass + b->mass;
 
        if (a->mass < b->mass)
                a->pos = b->pos;
 
-       a->mass += b->mass;
+       a->r = (a->r * a->mass + b->r * b->mass) / mass;
+       a->g = (a->g * a->mass + b->g * b->mass) / mass;
+       a->b = (a->b * a->mass + b->b * b->mass) / mass;
+
+       a->mass = mass;
        reshape_planet(a);
        vector_div(&p, a->mass, &a->speed);
 }