]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
Generate a dynamicly animated comet in solar plugin
authorCharles Brej <cbrej@cs.man.ac.uk>
Wed, 5 Nov 2008 15:04:58 +0000 (15:04 +0000)
committerRay Strode <rstrode@redhat.com>
Mon, 10 Nov 2008 19:23:25 +0000 (14:23 -0500)
This removes the need for the comet1.png

src/plugins/splash/solar/Makefile.am
src/plugins/splash/solar/comet1.png [deleted file]
src/plugins/splash/solar/plugin.c

index 53cc86b5b389f5b858a7710e5a398e8651fc81fd..84bc2f2fd5e89fb474697dd3d26f50bf87cd8688 100644 (file)
@@ -24,7 +24,7 @@ solar_la_SOURCES = $(srcdir)/plugin.c
 plymouthdir = $(datadir)/plymouth/solar
 plymouth_DATA = bullet.png entry.png lock.png                                 \
                 background.png star.png box.png                               \
-                comet1.png progress_bar.png
+                progress_bar.png
 #                planet1.png planet2.png planet3.png planet4.png planet5.png
 
 EXTRA_DIST = $(plymouth_DATA)
diff --git a/src/plugins/splash/solar/comet1.png b/src/plugins/splash/solar/comet1.png
deleted file mode 100755 (executable)
index 4b6cbae..0000000
Binary files a/src/plugins/splash/solar/comet1.png and /dev/null differ
index 419f273969dbe1af1f6d89dceb2f7a72fdc36b25..79745132b25ef649d2140943e27520e1691e039a 100644 (file)
@@ -154,9 +154,6 @@ struct _ply_boot_splash_plugin
 #ifdef  SHOW_PLANETS
   ply_image_t *planet_image[5];
 #endif
-#ifdef  SHOW_COMETS
-  ply_image_t *comet_image[1];
-#endif
 #ifdef  SHOW_PROGRESS_BAR
   ply_image_t *progress_barimage;
 #endif
@@ -210,9 +207,6 @@ create_plugin (void)
   plugin->planet_image[3] = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/planet4.png");
   plugin->planet_image[4] = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/planet5.png");
 #endif
-#ifdef  SHOW_COMETS
-  plugin->comet_image[0] = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/comet1.png");
-#endif
 #ifdef  SHOW_PROGRESS_BAR
   plugin->progress_barimage = ply_image_new (PLYMOUTH_IMAGE_DIR "solar/progress_bar.png");
 #endif
@@ -252,9 +246,6 @@ destroy_plugin (ply_boot_splash_plugin_t *plugin)
   ply_image_free (plugin->planet_image[3]);
   ply_image_free (plugin->planet_image[4]);
 #endif
-#ifdef  SHOW_COMETS
-  ply_image_free (plugin->comet_image[0]);
-#endif
 #ifdef  SHOW_PROGRESS_BAR
   ply_image_free (plugin->progress_barimage);
 #endif
@@ -412,8 +403,8 @@ satellite_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time)
   int width = ply_image_get_width (sprite->image);
   int height = ply_image_get_height (sprite->image);
 
-  sprite->x=cos(satellite->theta+(1-plugin->progress)*5000/(satellite->distance))*satellite->distance;
-  sprite->y=sin(satellite->theta+(1-plugin->progress)*5000/(satellite->distance))*satellite->distance;
+  sprite->x=cos(satellite->theta+(1-plugin->progress)*2000/(satellite->distance))*satellite->distance;
+  sprite->y=sin(satellite->theta+(1-plugin->progress)*2000/(satellite->distance))*satellite->distance;
   sprite->z=0;
 
   float distance = sqrt(sprite->z*sprite->z+sprite->y*sprite->y);
@@ -474,7 +465,27 @@ satellite_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time)
 
       uint32_t *image_data = ply_image_get_data (satellite->image);
       uint32_t *comet_data = ply_image_get_data (satellite->image_altered);
-
+      x = width/2;
+      image_data[x] = 0xFFFFFFFF;
+      x = 2*sin(plugin->progress*62)+width/2;
+      image_data[x] = 0xFFFFFFFF;
+      x = 2*sin(plugin->progress*163)+width/2;
+      image_data[x] = 0xFFFFFFFF;
+      x = 2*sin(plugin->progress*275)+width/2;
+      image_data[x] = 0xFFFFFFFF;
+      for (y=height-1; y>0; y--)
+        {
+          for (x=1; x<width-1; x++)
+            {
+               uint32_t pixel;
+               if (x>0)pixel = (image_data[(x)+(y-1)*width]>>24)*2 + (image_data[(x-1)+(y-1)*width]>>24) + (image_data[(x+1)+(y-1)*width]>>24);
+               pixel /= 4.05;
+               pixel |= pixel<<8;
+               pixel |= pixel<<16;
+               image_data[x+y*width] = pixel;
+            }
+        }
+      for (x=1; x<width-1; x++) image_data[x] = 0x0;
       for (y=0; y<height; y++) for (x=0; x<width; x++)
         {
           float scale= cos(M_PI*0.4);
@@ -483,10 +494,11 @@ satellite_move (ply_boot_splash_plugin_t *plugin, sprite_t* sprite, double time)
           fx -= (float) width/2;
           fy -= (float) height/2;
           fy /= scale;
-          float angle = atan2 (fy, fx)-(satellite->theta+(1-plugin->progress)*5000/(satellite->distance));
+          float angle = atan2 (fy, fx)-(satellite->theta+(1-plugin->progress)*2000/(satellite->distance))+M_PI/2*0.0;
           float distance = sqrt(fy*fy+fx*fx);
           fx = cos(angle)*distance;
           fy = sin(angle)*distance;
+          fx += (fy*fy*2)/(satellite->distance);
           fx += (float) width/2;
           fy += (float) height/2;
           int ix=fx;
@@ -1052,17 +1064,26 @@ setup_solar (ply_boot_splash_plugin_t *plugin)
 #ifdef  SHOW_COMETS
   for (i=0; i<1; i++)
     {
-       satellite_t* satellite = malloc(sizeof(satellite_t));
-       satellite->type=SATELLITE_TYPE_COMET;
-       satellite->end_x=satellite->start_x=720-800+screen_area.width;
-       satellite->end_y=satellite->start_y=300-480+screen_area.height;
-
-       satellite->distance=600;
-       satellite->theta=M_PI*0.8;
-       satellite->image=plugin->comet_image[i];
-       satellite->image_altered=ply_image_resize (satellite->image, ply_image_get_width(satellite->image), ply_image_get_height(satellite->image));
-       sprite = add_sprite (plugin, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite);
-       satellite_move (plugin, sprite, 0);
+      satellite_t* satellite = malloc(sizeof(satellite_t));
+      satellite->type=SATELLITE_TYPE_COMET;
+      satellite->end_x=satellite->start_x=720-800+screen_area.width;
+      satellite->end_y=satellite->start_y=300-480+screen_area.height;
+      satellite->distance=550+i*50;
+      satellite->theta=M_PI*0.8;
+#define COMET_SIZE 64
+      satellite->image=ply_image_resize (plugin->progress_barimage, COMET_SIZE, COMET_SIZE);
+      satellite->image_altered=ply_image_resize (satellite->image, COMET_SIZE, COMET_SIZE);
+      uint32_t * image_data = ply_image_get_data (satellite->image);
+      uint32_t * image_altered_data = ply_image_get_data (satellite->image_altered);
+
+
+      for (y=0; y<COMET_SIZE; y++)for (x=0; x<COMET_SIZE; x++){
+          image_data[x + y * COMET_SIZE] = 0x0;
+          image_altered_data[x + y * COMET_SIZE] = 0x0;
+        }
+            
+      sprite = add_sprite (plugin, satellite->image_altered, SPRITE_TYPE_SATELLITE, satellite);
+      for (x=0; x<COMET_SIZE; x++) satellite_move (plugin, sprite, 0);
      }
 #endif
 
@@ -1174,10 +1195,6 @@ show_splash_screen (ply_boot_splash_plugin_t *plugin,
   if (!ply_image_load (plugin->planet_image[4]))
     return false;
 #endif
-#ifdef  SHOW_COMETS
-  if (!ply_image_load (plugin->comet_image[0]))
-    return false;
-#endif
 #ifdef  SHOW_PROGRESS_BAR
   if (!ply_image_load (plugin->progress_barimage))
     return false;