diff --git a/bin/back b/bin/back index 1fd8516..9eb46d5 100755 Binary files a/bin/back and b/bin/back differ diff --git a/obj/display.o b/obj/display.o index f5c5b56..dc4f10f 100644 Binary files a/obj/display.o and b/obj/display.o differ diff --git a/obj/menus.o b/obj/menus.o index 287cb2f..e03ae07 100644 Binary files a/obj/menus.o and b/obj/menus.o differ diff --git a/obj/move.o b/obj/move.o index e305844..1f32aec 100644 Binary files a/obj/move.o and b/obj/move.o differ diff --git a/src/display.c b/src/display.c index d1b0ce6..01e269d 100644 --- a/src/display.c +++ b/src/display.c @@ -222,6 +222,6 @@ void gl_drawData(unsigned int shaderProg) { gl_drawInteger(shaderProg, njumps, 0.0f, 0.80f, 0.04f, 255, 255, 128, 0.005f, 1); - gl_drawString(shaderProg, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", -0.95f, 0.7f, 0.03f, 255-player_hp/4, player_hp/4, 0, 0.003f, 1); - gl_drawInteger(shaderProg, player_hp, -0.95f, 0.9f, 0.05f, 255-player_hp/4, player_hp/4, 0, 0.005f, 1); + gl_printf(shaderProg, -0.95f, 0.9f, 0.05f, 0.005f, 255-player_hp/4, player_hp/4, 0, "HP %d", player_hp); + //gl_drawInteger(shaderProg, player_hp, -0.95f, 0.9f, 0.05f, 255-player_hp/4, player_hp/4, 0, 0.005f, 1); } \ No newline at end of file diff --git a/src/menus.c b/src/menus.c index 9cad784..8be9314 100644 --- a/src/menus.c +++ b/src/menus.c @@ -294,8 +294,48 @@ void gl_drawString(unsigned int fragShader, char* str, float x, float y, float s } } -void gl_printf(unsigned int fragShader, int count, ...) { +void gl_printf(unsigned int fragShader, float x, float y, float size, float width, int r, int g, int b, const char* str, ...) { + va_list args; + va_start(args, str); + int i = 0; + char cur = str[i]; + bool is_perc = false; + float curx = x; + while(cur != '\0') { + //printf("%f\n", curx); + if(is_perc) { + is_perc = false; + switch (cur) { + case 'd': + int val = (int)(va_arg(args, int)); + //printf("%d", val); + gl_drawInteger(fragShader, val, curx, y, size, r, g, b, width, 1); + curx += (size+4*width)*(ln_baseN(abs(val), 10)); + break; + case 's': + char* chval = (char*)(va_arg(args, const char*)); + //printf("%s", chval); + gl_drawString(fragShader, chval, curx, y, size, r, g, b, width, 1); + curx += (size+4*width)*(1+get_string_len(chval)); + break; + default: + break; + } + } else { + if(cur == '%') { + is_perc = true; + } else { + //printf("%c", cur); + gl_drawChar(fragShader, cur, curx, y, size, r, g, b, width); + curx += (size+4*width); + } + } + i += 1; + cur = str[i]; + } + va_end(args); + //printf("\n"); } void gl_initDrawRect(unsigned int shaderProgram) { diff --git a/src/menus.h b/src/menus.h index 1f7eca9..c3a9845 100644 --- a/src/menus.h +++ b/src/menus.h @@ -35,6 +35,7 @@ void gl_initDrawRect(unsigned int shaderProgram); void gl_drawInteger(unsigned int fragShader, int n, float x, float y, float size, int r, int g, int b, float width, int side); void gl_drawString(unsigned int fragShader, char* str, float x, float y, float size, int r, int g, int b, float width, int side); +void gl_printf(unsigned int fragShader, float x, float y, float size, float width, int r, int g, int b, const char* str, ...); void init_interf(); void free_interf(); diff --git a/src/move.c b/src/move.c index c1913fa..9d31fa1 100644 --- a/src/move.c +++ b/src/move.c @@ -176,7 +176,7 @@ void updateF(cube_0* cb, double dtime) { (dot3D(vt, normal) <= 0.0 && dot3D(vtdt, normal) >= 0.0) || (dot3D(vt, normal) >= 0.0 && dot3D(vtdt, normal) <= 0.0) ) { - printf("%d\n", d); + //printf("%d\n", d); double normv = sqrt(camvx*camvx + camvy*camvy + camvz*camvz); double alpha = acos(dot3D(normal, (pt_2d){.x = camvx, .y = camvy, .z = camvz})/normv); @@ -240,6 +240,7 @@ bool is_colliding(float dtime) { } } } + is_clipping = false; return true; } }