]> git.lizzy.rs Git - nothing.git/commitdiff
(#245) Desaturate color on pause
authorrexim <reximkut@gmail.com>
Sat, 21 Jul 2018 20:14:23 +0000 (03:14 +0700)
committerrexim <reximkut@gmail.com>
Sat, 21 Jul 2018 20:14:23 +0000 (03:14 +0700)
src/game.c
src/game/camera.c
src/game/camera.h
src/game/sprite_font.c
src/game/sprite_font.h

index 11c60e6e1fe570c05df7092cb825aa2b9c0fb408..fa23832ba359f08c673c76f7bfefd8569595da2c 100644 (file)
@@ -64,7 +64,6 @@ game_t *create_game(const char *level_file_path,
     game->font = PUSH_LT(
         lt,
         create_sprite_font_from_file("fonts/charmap-oldschool_white.bmp",
-                                     color(1.0f, 0.0f, 0.0f, 1.0f),
                                      renderer),
         destroy_sprite_font);
     if (game->font == NULL) {
@@ -110,7 +109,7 @@ int game_render(const game_t *game)
         return -1;
     }
 
-    if (camera_render_text(game->camera, "hello world", 4, vec(-30.0f, 0.0f)) < 0) {
+    if (camera_render_text(game->camera, "hello world", 4, color(1.0f, 0.0f, 0.0f, 1.0f), vec(-30.0f, 0.0f)) < 0) {
         return -1;
     }
 
index d3a2343a87f416bdf8ffaaeb6aad76fe672d847e..45c63455d0a2dc026c9a39dc9a9e95533612062c 100644 (file)
@@ -172,6 +172,30 @@ int camera_fill_triangle(camera_t *camera,
     return 0;
 }
 
+int camera_render_text(camera_t *camera,
+                       const char *text,
+                       int size,
+                       color_t color,
+                       vec_t position)
+{
+    SDL_Rect view_port;
+    SDL_RenderGetViewport(camera->renderer, &view_port);
+
+    const vec_t screen_position = camera_point(camera, &view_port, position);
+
+    if (sprite_font_render_text(
+            camera->font,
+            camera->renderer,
+            screen_position,
+            size,
+            camera->blackwhite_mode ? color_desaturate(color) : color,
+            text) < 0) {
+        return -1;
+    }
+
+    return 0;
+}
+
 int camera_clear_background(camera_t *camera,
                             color_t color)
 {
@@ -295,20 +319,3 @@ static rect_t camera_rect(const camera_t *camera,
             effective_scale(view_port),
             vec(rect.w, rect.h)));
 }
-
-int camera_render_text(camera_t *camera,
-                       const char *text,
-                       int size,
-                       vec_t position)
-{
-    SDL_Rect view_port;
-    SDL_RenderGetViewport(camera->renderer, &view_port);
-
-    const vec_t screen_position = camera_point(camera, &view_port, position);
-
-    if (sprite_font_render_text(camera->font, camera->renderer, screen_position, size, text) < 0) {
-        return -1;
-    }
-
-    return 0;
-}
index 68292f77b05cf334bf89ecb90c7b5985ab5772c3..b3fe4749912a3c6d0f563031253fee5e0fb4a243 100644 (file)
@@ -35,6 +35,7 @@ int camera_fill_triangle(camera_t *camera,
 int camera_render_text(camera_t *camera,
                        const char *text,
                        int size,
+                       color_t color,
                        vec_t position);
 
 void camera_center_at(camera_t *camera, point_t position);
index b79f05aad5d6b850a7b8390efb6b73dc54d05a1b..12ef5f0721c6bd7b7bff7455de1af9dc92bdff1c 100644 (file)
@@ -20,7 +20,6 @@ struct sprite_font_t
 };
 
 sprite_font_t *create_sprite_font_from_file(const char *bmp_file_path,
-                                            color_t color,
                                             SDL_Renderer *renderer)
 {
     assert(bmp_file_path);
@@ -52,22 +51,6 @@ sprite_font_t *create_sprite_font_from_file(const char *bmp_file_path,
         RETURN_LT(lt, NULL);
     }
 
-    const SDL_Color text_color = color_for_sdl(color);
-    const Uint32 actual_text_color =
-        SDL_MapRGB(sprite_font->surface->format,
-                   text_color.r,
-                   text_color.g,
-                   text_color.b);
-    SDL_LockSurface(sprite_font->surface);
-    for (int y = 0; y < sprite_font->surface->h; ++y) {
-        for (int x = 0; x < sprite_font->surface->w; ++x) {
-            if (getpixel(sprite_font->surface, x, y) == SDL_MapRGB(sprite_font->surface->format, 255, 255, 255)) {
-                putpixel(sprite_font->surface, x, y, actual_text_color);
-            }
-        }
-    }
-    SDL_UnlockSurface(sprite_font->surface);
-
     sprite_font->texture = PUSH_LT(
         lt,
         SDL_CreateTextureFromSurface(renderer, sprite_font->surface),
@@ -109,12 +92,20 @@ int sprite_font_render_text(const sprite_font_t *sprite_font,
                             SDL_Renderer *renderer,
                             vec_t position,
                             int size,
+                            color_t color,
                             const char *text)
 {
     assert(sprite_font);
     assert(renderer);
     assert(text);
 
+    const SDL_Color sdl_color = color_for_sdl(color);
+
+    if (SDL_SetTextureColorMod(sprite_font->texture, sdl_color.r, sdl_color.g, sdl_color.b) < 0) {
+        throw_error(ERROR_TYPE_SDL2);
+        return -1;
+    }
+
     const size_t text_size = strlen(text);
     const int px = (int) roundf(position.x);
     const int py = (int) roundf(position.y);
index 6cc34259b11fd3aa42479f95618f71ae9175f923..1c9ab94726d11cb3877fa6e5e9ae831a86daeafe 100644 (file)
@@ -7,7 +7,6 @@
 typedef struct sprite_font_t sprite_font_t;
 
 sprite_font_t *create_sprite_font_from_file(const char *bmp_file_path,
-                                            color_t color,
                                             SDL_Renderer *renderer);
 void destroy_sprite_font(sprite_font_t *sprite_font);
 
@@ -15,6 +14,7 @@ int sprite_font_render_text(const sprite_font_t *sprite_font,
                             SDL_Renderer *renderer,
                             vec_t position,
                             int size,
+                            color_t color,
                             const char *text);
 
 #endif  // SPRITE_FONT_H_