1 #include "system/stacktrace.h"
6 #include "game/sprite_font.h"
7 #include "console_log.h"
9 #include "system/str.h"
10 #include "system/lt.h"
11 #include "system/nth_alloc.h"
25 Console_Log *create_console_log(Vec2f font_size,
30 Console_Log *console_log = PUSH_LT(lt, nth_calloc(1, sizeof(Console_Log)), free);
31 if (console_log == NULL) {
35 console_log->font_size = font_size;
36 console_log->capacity = capacity;
38 console_log->buffer = PUSH_LT(lt, nth_calloc(capacity, sizeof(char*)), free);
39 if (console_log->buffer == NULL) {
43 console_log->colors = PUSH_LT(lt, nth_calloc(capacity, sizeof(Color)), free);
44 if (console_log->colors == NULL) {
48 console_log->cursor = 0;
53 void destroy_console_log(Console_Log *console_log)
55 trace_assert(console_log);
56 for (size_t i = 0; i < console_log->capacity; ++i) {
57 if (console_log->buffer[i]) {
58 free(console_log->buffer[i]);
61 RETURN_LT0(console_log->lt);
64 void console_log_render(const Console_Log *console_log,
68 trace_assert(console_log);
71 for (size_t i = 0; i < console_log->capacity; ++i) {
72 const size_t j = (i + console_log->cursor) % console_log->capacity;
73 if (console_log->buffer[j]) {
74 camera_render_text_screen(
76 console_log->buffer[j],
77 console_log->font_size,
78 console_log->colors[j],
80 vec(0.0f, FONT_CHAR_HEIGHT * console_log->font_size.y * (float) i)));
85 int console_log_push_line(Console_Log *console_log,
90 trace_assert(console_log);
93 const size_t next_cursor = (console_log->cursor + 1) % console_log->capacity;
95 if (console_log->buffer[console_log->cursor] != NULL) {
96 free(console_log->buffer[console_log->cursor]);
99 console_log->buffer[console_log->cursor] = string_duplicate(line, line_end);
100 console_log->colors[console_log->cursor] = color;
102 if (console_log->buffer[console_log->cursor] == NULL) {
106 console_log->cursor = next_cursor;