]> git.lizzy.rs Git - dragonblocks_alpha.git/commitdiff
Add HUD scale type
authorElias Fleckenstein <eliasfleckenstein@web.de>
Mon, 12 Jul 2021 15:54:50 +0000 (17:54 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Mon, 12 Jul 2021 15:54:50 +0000 (17:54 +0200)
src/client.c
src/hud.c
src/hud.h

index 230f729b5655e45c9249ed0f6a7aac2cffbc9292..02e6855edd130137bd665312edb8f1d2abdc6eab 100644 (file)
@@ -106,7 +106,7 @@ static void client_loop()
        hud_init(prog);
        hud_rescale(width, height);
 
-       hud_add(RESSOURCEPATH "textures/crosshair.png", (v2f) {0.0f, 0.0f}, (v2f) {1.0f, 1.0f});
+       hud_add(RESSOURCEPATH "textures/crosshair.png", (v2f) {0.0f, 0.0f}, (v2f) {1.0f, 1.0f}, HUD_SCALE_TEXTURE);
 
        struct timespec ts, ts_old;
        clock_gettime(CLOCK_REALTIME, &ts_old);
index 9535d5c9ccd5cd7bff60505640a5ff51b1a37b6a..30034086e7f544f9654f2a957a7fc85039bd84f4 100644 (file)
--- a/src/hud.c
+++ b/src/hud.c
@@ -49,9 +49,29 @@ void hud_deinit()
 static void element_transform(HUDElement *element)
 {
        mat4x4_translate(element->transform, (1.0f + element->pos.x) / 2.0f * (f32) hud.width, (1.0f + element->pos.y) / 2.0f * (f32) hud.height, 0.0f);
+
+       v2f scale = element->scale;
+
+       switch (element->scale_type) {
+               case HUD_SCALE_TEXTURE:
+                       scale.x *= element->texture->width;
+                       scale.y *= element->texture->height;
+
+                       break;
+
+               case HUD_SCALE_SCREEN:
+                       scale.x *= hud.width;
+                       scale.y *= hud.height;
+
+                       break;
+
+               default:
+                       break;
+       }
+
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpedantic"
-       mat4x4_scale_aniso(element->transform, element->transform, element->scale.x, element->scale.y, 1.0f);
+       mat4x4_scale_aniso(element->transform, element->transform, scale.x, scale.y, 1.0f);
 #pragma GCC diagnostic pop
 }
 
@@ -83,16 +103,14 @@ void hud_render()
        }
 }
 
-HUDElement *hud_add(char *texture, v2f pos, v2f scale)
+HUDElement *hud_add(char *texture, v2f pos, v2f scale, HUDScaleType scale_type)
 {
        HUDElement *element = malloc(sizeof(HUDElement));
        element->texture = get_texture(texture);
        element->visible = true;
        element->pos = pos;
-
        element->scale = scale;
-       element->scale.x *= (f32) element->texture->width;
-       element->scale.y *= (f32) element->texture->height;
+       element->scale_type = scale_type;
 
        element_transform(element);
 
index b963deef922e7fd5d7fb2be54fcaab204ea64a45..82e3a59bb83b4916cd55e39f4ae73962fba9c2d5 100644 (file)
--- a/src/hud.h
+++ b/src/hud.h
@@ -7,12 +7,20 @@
 #include "texture.h"
 #include "types.h"
 
+typedef enum
+{
+       HUD_SCALE_TEXTURE,
+       HUD_SCALE_SCREEN,
+       HUD_SCALE_NONE,
+} HUDScaleType;
+
 typedef struct
 {
        Texture *texture;
        bool visible;
        v2f pos;
        v2f scale;
+       HUDScaleType scale_type;
        mat4x4 transform;
 } HUDElement;
 
@@ -20,6 +28,6 @@ void hud_init(ShaderProgram *prog);
 void hud_deinit();
 void hud_rescale(int width, int height);
 void hud_render();
-HUDElement *hud_add(char *texture, v2f pos, v2f scale);
+HUDElement *hud_add(char *texture, v2f pos, v2f scale, HUDScaleType scale_type);
 
 #endif