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 int 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 if (camera_render_text_screen(camera,
75 console_log->buffer[j],
76 console_log->font_size,
77 console_log->colors[j],
79 vec(0.0f, FONT_CHAR_HEIGHT * console_log->font_size.y * (float) i))) < 0) {
88 int console_log_push_line(Console_Log *console_log,
93 trace_assert(console_log);
96 const size_t next_cursor = (console_log->cursor + 1) % console_log->capacity;
98 if (console_log->buffer[console_log->cursor] != NULL) {
99 free(console_log->buffer[console_log->cursor]);
102 console_log->buffer[console_log->cursor] = string_duplicate(line, line_end);
103 console_log->colors[console_log->cursor] = color;
105 if (console_log->buffer[console_log->cursor] == NULL) {
109 console_log->cursor = next_cursor;