|
|
|
@ -8,7 +8,7 @@ |
|
|
|
|
#include <string.h> |
|
|
|
|
#include <nuklear.h> |
|
|
|
|
|
|
|
|
|
static struct nk_color color_normal; |
|
|
|
|
static struct nk_color console_message_color[CMT_MAX]; |
|
|
|
|
|
|
|
|
|
static int console_filter(const struct nk_text_edit *box, nk_rune unicode); |
|
|
|
|
|
|
|
|
@ -16,7 +16,11 @@ void console_init(struct Console* console) |
|
|
|
|
{ |
|
|
|
|
assert(console); |
|
|
|
|
|
|
|
|
|
color_normal = nk_rgb(255, 255, 255); |
|
|
|
|
console_message_color[CMT_MESSAGE] = nk_rgb(255, 255, 255); |
|
|
|
|
console_message_color[CMT_WARNING] = nk_rgb(255, 255, 0); |
|
|
|
|
console_message_color[CMT_ERROR] = nk_rgb(255, 0, 0); |
|
|
|
|
console_message_color[CMT_COMMAND] = nk_rgb(114, 173, 224); |
|
|
|
|
console_message_color[CMT_NONE] = nk_rgb(255, 0, 255); |
|
|
|
|
|
|
|
|
|
console->visible = false; |
|
|
|
|
console->text_region_height = 22.f; |
|
|
|
@ -25,7 +29,10 @@ void console_init(struct Console* console) |
|
|
|
|
|
|
|
|
|
memset(console->console_command_text, '\0', MAX_CONSOLE_MESSAGE_LEN); |
|
|
|
|
for(int i = 0; i < MAX_CONSOLE_MESSAGES; i++) |
|
|
|
|
memset(console->console_messages[i], '\0', MAX_CONSOLE_MESSAGE_LEN); |
|
|
|
|
{ |
|
|
|
|
memset(console->console_messages[i].message, '\0', MAX_CONSOLE_MESSAGE_LEN); |
|
|
|
|
console->console_messages[i].type = CMT_NONE; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void console_toggle(struct Console* console) |
|
|
|
@ -52,7 +59,7 @@ void console_update(struct Console* console, struct Gui_State* gui_state, float |
|
|
|
|
for(int i = 0; i <= console->current_message_index; i++) |
|
|
|
|
{ |
|
|
|
|
nk_layout_row_dynamic(context, console->line_height, 1); |
|
|
|
|
nk_labelf_colored(context, NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE, color_normal, console->console_messages[i]); |
|
|
|
|
nk_labelf_colored(context, NK_TEXT_ALIGN_LEFT | NK_TEXT_ALIGN_MIDDLE, console_message_color[console->console_messages[i].type], console->console_messages[i].message); |
|
|
|
|
} |
|
|
|
|
nk_group_end(context); |
|
|
|
|
} |
|
|
|
@ -63,7 +70,11 @@ void console_update(struct Console* console, struct Gui_State* gui_state, float |
|
|
|
|
int edit_state = nk_edit_string_zero_terminated(context, edit_flags, console->console_command_text, MAX_CONSOLE_MESSAGE_LEN, console_filter); |
|
|
|
|
if(edit_state & NK_EDIT_COMMITED) |
|
|
|
|
{ |
|
|
|
|
log_message("New message entered : %s", console->console_command_text); |
|
|
|
|
if(++console->current_message_index >= MAX_CONSOLE_MESSAGES) |
|
|
|
|
console->current_message_index = 0; |
|
|
|
|
|
|
|
|
|
snprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, "> %s", console->console_command_text); |
|
|
|
|
console->console_messages[console->current_message_index].type = CMT_COMMAND; |
|
|
|
|
memset(console->console_command_text, '\0', MAX_CONSOLE_MESSAGE_LEN); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -88,5 +99,23 @@ void console_on_log_message(struct Console* console, const char* message, va_lis |
|
|
|
|
{ |
|
|
|
|
if(++console->current_message_index >= MAX_CONSOLE_MESSAGES) |
|
|
|
|
console->current_message_index = 0; |
|
|
|
|
vsnprintf(console->console_messages[console->current_message_index], MAX_CONSOLE_MESSAGE_LEN, message, args); |
|
|
|
|
vsnprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, message, args); |
|
|
|
|
console->console_messages[console->current_message_index].type = CMT_MESSAGE; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void console_on_log_warning(struct Console* console, const char* warning_message, va_list args) |
|
|
|
|
{ |
|
|
|
|
if(++console->current_message_index >= MAX_CONSOLE_MESSAGES) |
|
|
|
|
console->current_message_index = 0; |
|
|
|
|
vsnprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, warning_message, args); |
|
|
|
|
console->console_messages[console->current_message_index].type = CMT_WARNING; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void console_on_log_error(struct Console* console, const char* context, const char* error, va_list args) |
|
|
|
|
{ |
|
|
|
|
if(++console->current_message_index >= MAX_CONSOLE_MESSAGES) |
|
|
|
|
console->current_message_index = 0; |
|
|
|
|
int loc = snprintf(console->console_messages[console->current_message_index].message, MAX_CONSOLE_MESSAGE_LEN, "(%s)", context); |
|
|
|
|
vsnprintf(console->console_messages[console->current_message_index].message + loc, MAX_CONSOLE_MESSAGE_LEN, error, args); |
|
|
|
|
console->console_messages[console->current_message_index].type = CMT_ERROR; |
|
|
|
|
} |