aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--effect-pad.c96
1 files changed, 86 insertions, 10 deletions
diff --git a/effect-pad.c b/effect-pad.c
index 3a108b9..235a43a 100644
--- a/effect-pad.c
+++ b/effect-pad.c
@@ -130,8 +130,8 @@ effect_fire_init(void)
#else
SDL_FillRect(surface, NULL,
SDL_MapRGBA(surface->format,
- colors[0].r, colors[0].g,
- colors[0].b, colors[0].unused));
+ colors[0].r, colors[0].g,
+ colors[0].b, colors[0].unused));
#endif
return surface;
@@ -279,7 +279,7 @@ effect_blops_update(void)
next->radius++;
if (next->alpha > 10)
- next->alpha -= 10;
+ next->alpha -= 3;
else
next->alpha = 0;
@@ -330,6 +330,64 @@ effect_bg_change(SDL_Color color)
effect_bg_color = color;
}
+static SDL_Color effect_generic_color = {0, 0, 0};
+
+static inline void
+effect_generic_set_color(SDL_Color color)
+{
+ effect_generic_color = color;
+}
+
+static SDL_Color effect_generic_colors[256];
+
+static inline void
+effect_generic_init(void)
+{
+ memset(effect_generic_colors, 0, sizeof(effect_generic_colors));
+
+ for (int i = 0; i < 32; i++) {
+ /* black to blue, 32 values */
+ effect_generic_colors[i].b = i << 1;
+
+ /* blue to red, 32 values */
+ effect_generic_colors[i + 32].r = i << 3;
+ effect_generic_colors[i + 32].b = 64 - (i << 1);
+
+ /*red to yellow, 32 values */
+ effect_generic_colors[i + 64].r = 255;
+ effect_generic_colors[i + 64].g = i << 3;
+
+ /* yellow to white, 162 */
+ effect_generic_colors[i + 96].r = 255;
+ effect_generic_colors[i + 96].g = 255;
+ effect_generic_colors[i + 96].b = i << 2;
+ effect_generic_colors[i + 128].r = 255;
+ effect_generic_colors[i + 128].g = 255;
+ effect_generic_colors[i + 128].b = 64 + (i << 2);
+ effect_generic_colors[i + 160].r = 255;
+ effect_generic_colors[i + 160].g = 255;
+ effect_generic_colors[i + 160].b = 128 + (i << 2);
+ effect_generic_colors[i + 192].r = 255;
+ effect_generic_colors[i + 192].g = 255;
+ effect_generic_colors[i + 192].b = 192 + i;
+ effect_generic_colors[i + 224].r = 255;
+ effect_generic_colors[i + 224].g = 255;
+ effect_generic_colors[i + 224].b = 224 + i;
+ }
+}
+
+static SDL_Color
+effect_generic_get_next_color(void)
+{
+ static int curColor = 0;
+ SDL_Color ret = effect_generic_colors[curColor];
+
+ curColor++;
+ curColor %= NARRAY(effect_generic_colors);
+
+ return ret;
+}
+
static inline void
process_events(void)
{
@@ -355,6 +413,23 @@ process_events(void)
default:
break;
}
+ } else if (event.key.keysym.mod & KMOD_LCTRL) {
+ switch (event.key.keysym.sym) {
+ case SDLK_0:
+ effect_generic_set_color((SDL_Color){0, 0, 0});
+ break;
+ case SDLK_1:
+ effect_generic_set_color((SDL_Color){255, 0, 0});
+ break;
+ case SDLK_2:
+ effect_generic_set_color((SDL_Color){0, 255, 0});
+ break;
+ case SDLK_3:
+ effect_generic_set_color((SDL_Color){0, 0, 255});
+ break;
+ default:
+ break;
+ }
} else {
switch (event.key.keysym.sym) {
case SDLK_F11:
@@ -398,16 +473,16 @@ process_events(void)
if (currentEffect == EFFECT_BLOPS)
effect_blops_create(event.button.x, event.button.y,
event.button.button == SDL_BUTTON_LEFT
- ? (SDL_Color){0, 0, 255}
- : (SDL_Color){255, 0, 0});
+ ? effect_generic_color
+ : effect_generic_get_next_color());
break;
case SDL_MOUSEMOTION:
if ((event.motion.state & (SDL_BUTTON(1) | SDL_BUTTON(3))) &&
currentEffect == EFFECT_BLOPS)
effect_blops_create(event.motion.x, event.motion.y,
event.motion.state & SDL_BUTTON(1)
- ? (SDL_Color){0, 0, 255}
- : (SDL_Color){255, 0, 0});
+ ? effect_generic_color
+ : effect_generic_get_next_color());
break;
case SDL_QUIT:
@@ -444,6 +519,7 @@ main(int argc, char **argv)
SDL_initFramerate(&fpsm);
SDL_setFramerate(&fpsm, FRAMERATE);
+ effect_generic_init();
fire_surface = effect_fire_init();
for (;;) {
@@ -451,9 +527,9 @@ main(int argc, char **argv)
SDL_FillRect(screen, NULL,
SDL_MapRGB(screen->format,
- effect_bg_color.r,
- effect_bg_color.g,
- effect_bg_color.b));
+ effect_bg_color.r,
+ effect_bg_color.g,
+ effect_bg_color.b));
if (image_surface != NULL)
SDL_BlitSurface(image_surface, NULL, screen, NULL);