draw level and ball count

This commit is contained in:
Zack Buhman 2025-12-05 20:43:40 -06:00
parent 6ba5a45658
commit 2469c8dc62

View File

@ -288,11 +288,11 @@ void render_text(struct mesh plane_mesh,
float aspect, float aspect,
mat4x4 a, mat4x4 a,
mat4x4 s, mat4x4 s,
mat4x4 r) mat4x4 r,
float _scale,
int h_advance,
int v_advance)
{ {
int h_advance = 0;
int v_advance = 0;
for (int i = 0; i < text_length; i++) { for (int i = 0; i < text_length; i++) {
const char * txt = text[i]; const char * txt = text[i];
while (*txt) { while (*txt) {
@ -301,7 +301,7 @@ void render_text(struct mesh plane_mesh,
if (c != ' ') { if (c != ' ') {
mat4x4 char_t = translate(vec3(-2 * 16 + h_advance / 8.0f, mat4x4 char_t = translate(vec3(-2 * 16 + h_advance / 8.0f,
-8.0f * aspect + -v_advance / 16.0f, 0)); -8.0f * aspect + -v_advance / 16.0f, 0));
mat4x4 trans = a * scale(12.0f / vp_height) * s * char_t * r; mat4x4 trans = a * scale(_scale / vp_height) * s * char_t * r;
mat4x4 texture_trans = char_tex_trans(c); mat4x4 texture_trans = char_tex_trans(c);
@ -381,6 +381,8 @@ void render_font(struct mesh plane_mesh,
}; };
const int win_length = (sizeof (win)) / (sizeof (win[0])); const int win_length = (sizeof (win)) / (sizeof (win[0]));
float text_scale = 12.0f;
if (state->intro_shown == 0) { if (state->intro_shown == 0) {
vec3 base_color = vec3(1, 1, 1); vec3 base_color = vec3(1, 1, 1);
glUniform3fv(uniform_base_color, 1, &base_color[0]); glUniform3fv(uniform_base_color, 1, &base_color[0]);
@ -390,7 +392,9 @@ void render_font(struct mesh plane_mesh,
intro, intro,
intro_length, intro_length,
aspect, aspect,
a, s, r); a, s, r,
text_scale,
0, 0);
} else if (state->remaining <= 0) { } else if (state->remaining <= 0) {
if (state->level_ix == 0) { if (state->level_ix == 0) {
vec3 base_color = vec3(1, 0.1, 0.1); vec3 base_color = vec3(1, 0.1, 0.1);
@ -401,7 +405,9 @@ void render_font(struct mesh plane_mesh,
loss, loss,
loss_length, loss_length,
aspect, aspect,
a, s, r); a, s, r,
text_scale,
0, 0);
} else { } else {
vec3 base_color = vec3(0.1, 1.0, 0.1); vec3 base_color = vec3(0.1, 1.0, 0.1);
glUniform3fv(uniform_base_color, 1, &base_color[0]); glUniform3fv(uniform_base_color, 1, &base_color[0]);
@ -411,45 +417,96 @@ void render_font(struct mesh plane_mesh,
win, win,
win_length, win_length,
aspect, aspect,
a, s, r); a, s, r,
text_scale,
0, 0);
} }
} }
char dst[64];
const char * dst_l[] = { dst };
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// remaining // remaining
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
char dst[64];
double remaining = state->remaining; double remaining = state->remaining;
if (remaining < 0.0) if (remaining < 0.0)
remaining = 0.0; remaining = 0.0;
int len = unparse_double(remaining, 4, 1, dst);
vec3 base_color = vec3(1, 1, 1); vec3 base_color = vec3(1, 1, 1);
if (remaining == 0) { if (remaining == 0) {
base_color = vec3(abs(sin(state->time * 2)) * 0.6 + 0.4, 0.1, 0.1); base_color = vec3(abs(sin(state->time * 2)) * 0.6 + 0.4, 0.1, 0.1);
//base_color = vec3(1, 0.1, 0.1); //base_color = vec3(1, 0.1, 0.1);
} }
glUniform3fv(uniform_base_color, 1, &base_color[0]); glUniform3fv(uniform_base_color, 1, &base_color[0]);
int h_advance = grid_width * 10; int len = unparse_double(remaining, 2, 1, dst);
int v_advance = grid_height * 5; dst[len] = 0;
for (int i = 0; i < len; i++) { render_text(plane_mesh,
if (dst[i] != ' ') { uniform_trans,
mat4x4 texture_trans = char_tex_trans(dst[i]); uniform_texture_trans,
dst_l,
1,
aspect,
a, s, r,
28.0f, // scale
14 * grid_width, 1.95 * grid_height);
mat4x4 char_t = translate(vec3(-2 * 16 + h_advance / 8.0f,
-1.0f * aspect + -v_advance / 16.0f, 0));
mat4x4 trans = a * scale(26.0f / vp_height) * s * char_t * r;
glUniform4fv(uniform_trans, 4, &trans[0][0]); //////////////////////////////////////////////////////////////////////
glUniform4fv(uniform_texture_trans, 4, &texture_trans[0][0]); // ball count
glDrawElements(GL_TRIANGLES, plane_mesh.length, GL_UNSIGNED_INT, 0); //////////////////////////////////////////////////////////////////////
{
dst[0] = 'b';
dst[1] = 'l';
int len = unparse_double(20 - state->balls_launched, 2, 1, &dst[2]);
dst[2] = ':';
for (int i = 0; i < len; i++) {
if (dst[2 + i] == '.')
dst[2 + i] = 0;
} }
h_advance += grid_width;
vec3 base_color = vec3(1, 1, 1);
glUniform3fv(uniform_base_color, 1, &base_color[0]);
render_text(plane_mesh,
uniform_trans,
uniform_texture_trans,
dst_l,
1,
aspect,
a, s, r,
20.0f, // scale
28 * grid_width, 3.75 * grid_height);
}
//////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////
{
dst[0] = 'l';
dst[1] = 'v';
int len = unparse_double(state->level_ix + 1, 2, 1, &dst[2]);
dst[2] = ':';
for (int i = 0; i < len; i++) {
if (dst[2 + i] == '.')
dst[2 + i] = 0;
}
vec3 base_color = vec3(1, 1, 1);
glUniform3fv(uniform_base_color, 1, &base_color[0]);
render_text(plane_mesh,
uniform_trans,
uniform_texture_trans,
dst_l,
1,
aspect,
a, s, r,
20.0f, // scale
0 * grid_width, 3.75 * grid_height);
} }
} }