Draw text better, make block layout more interesting

This commit is contained in:
Ben Visness 2023-07-02 06:27:29 -05:00
parent d139619147
commit b1c0754d54
1 changed files with 41 additions and 22 deletions

View File

@ -26,7 +26,15 @@ mp_rect ball = {200, 200, 20, 20};
vec2 velocity = {5, 5}; vec2 velocity = {5, 5};
int blockHealth[NUM_BLOCKS]; // This is upside down from how it will actually be drawn.
int blockHealth[NUM_BLOCKS] = {
0, 1, 1, 1, 1, 1, 0,
1, 1, 1, 1, 1, 1, 1,
2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2,
3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3,
};
vec2 frameSize = {100, 100}; vec2 frameSize = {100, 100};
@ -46,6 +54,7 @@ mg_surface mg_surface_main(void);
f32 lerp(f32 a, f32 b, f32 t); f32 lerp(f32 a, f32 b, f32 t);
mp_rect blockRect(int i); mp_rect blockRect(int i);
int checkCollision(mp_rect block); int checkCollision(mp_rect block);
mg_mat2x3 flipYAt(vec2 pos);
str8 loadFile(mem_arena* arena, str8 filename) { str8 loadFile(mem_arena* arena, str8 filename) {
file_handle file = file_open(filename, FILE_ACCESS_READ, 0); file_handle file = file_open(filename, FILE_ACCESS_READ, 0);
@ -79,10 +88,6 @@ ORCA_EXPORT void OnInit(void)
// TODO: Decide whether we're using strings or explicit pointer + length // TODO: Decide whether we're using strings or explicit pointer + length
pongFont = mg_font_create_from_memory(fontStr.len, (byte*)fontStr.ptr, 5, ranges); pongFont = mg_font_create_from_memory(fontStr.len, (byte*)fontStr.ptr, 5, ranges);
for (int i = 0; i < NUM_BLOCKS; i++) {
blockHealth[i] = 2;
}
mem_arena_clear(mem_scratch()); mem_arena_clear(mem_scratch());
} }
@ -235,19 +240,38 @@ ORCA_EXPORT void OnFrameRefresh(void)
mg_set_color_rgba(10.0f/255.0f, 31.0f/255.0f, 72.0f/255.0f, 1); mg_set_color_rgba(10.0f/255.0f, 31.0f/255.0f, 72.0f/255.0f, 1);
mg_clear(); mg_clear();
mg_mat2x3 transform = {1, 0, 0, mg_mat2x3 yUp = {
0, -1, frameSize.y}; 1, 0, 0,
0, -1, frameSize.y,
};
mg_matrix_push(transform); mg_matrix_push(yUp);
{ {
mg_set_color_rgba(0.9, 0.9, 0.9, 1);
for (int i = 0; i < NUM_BLOCKS; i++) { for (int i = 0; i < NUM_BLOCKS; i++) {
if (blockHealth[i] <= 0) { if (blockHealth[i] <= 0) {
continue; continue;
} }
mp_rect r = blockRect(i); mp_rect r = blockRect(i);
mg_rectangle_fill(r.x, r.y, r.w, r.h); mg_set_color_rgba(0.9, 0.9, 0.9, 1);
mg_rounded_rectangle_fill(r.x, r.y, r.w, r.h, 4);
// TODO: measure and center text
vec2 textPos = {r.x + r.w/2 - 5, r.y + 9};
mg_set_color_rgba(0, 0, 0, 1);
mg_set_font(pongFont);
mg_set_font_size(18);
mg_move_to(textPos.x, textPos.y);
mg_matrix_push(flipYAt(textPos));
{
str8 text = str8_pushf(mem_scratch(),
"%d", blockHealth[i]
);
mg_text_outlines(text);
mg_fill();
}
mg_matrix_pop();
} }
mg_image_draw(paddleImage, paddle); mg_image_draw(paddleImage, paddle);
@ -255,18 +279,6 @@ ORCA_EXPORT void OnFrameRefresh(void)
} }
mg_matrix_pop(); mg_matrix_pop();
mg_set_color_rgba(0, 0, 0, 1);
mg_set_font(pongFont);
mg_set_font_size(14);
mg_move_to(10, 20);
str8 text = str8_pushf(mem_scratch(),
"wahoo I'm did a text. ball is at x = %f, y = %f",
ball.x, ball.y
);
mg_text_outlines(text);
mg_fill();
mg_surface_prepare(surface); mg_surface_prepare(surface);
mg_render(surface, canvas); mg_render(surface, canvas);
mg_surface_present(surface); mg_surface_present(surface);
@ -411,3 +423,10 @@ int checkCollision(mp_rect block) {
f32 lerp(f32 a, f32 b, f32 t) { f32 lerp(f32 a, f32 b, f32 t) {
return (1 - t) * a + t * b; return (1 - t) * a + t * b;
} }
mg_mat2x3 flipYAt(vec2 pos) {
return (mg_mat2x3){
1, 0, 0,
0, -1, 2 * pos.y,
};
}