diff --git a/README.md b/README.md index bf745cc..e6430ab 100644 --- a/README.md +++ b/README.md @@ -155,7 +155,6 @@ - ## TODO - - Implement Auto scrolling to the bottom in console - Console commands - Console fix bug when enabled in editor mode - Console command history @@ -185,6 +184,7 @@ system and move textures/shaders/sounds/geometry etc to that and framebuffer/shaders to renderer - Work on (yet another)entity refactor before moving on to serialization - Implement cross-hatching shader + - Implement storing console's scroll location and restore it when console is toggled - Update README's TODO section to reflect the current state of things and the things that are actually left to do - Implement collision/physics data serialization, read and write. @@ -411,4 +411,5 @@ * Switching between editor and game mode/cameras * In-game basis for scrollable console/log-viewer * Console log output - * Console error/warning output \ No newline at end of file + * Console error/warning output + * Implemented Auto scrolling to the bottom in console \ No newline at end of file diff --git a/build/genie.lua b/build/genie.lua index bdf2488..b836085 100644 --- a/build/genie.lua +++ b/build/genie.lua @@ -137,7 +137,7 @@ solution "Symmetry" newaction { trigger = "build_addon", - description = "Build blender addon into zip file that can be loaded into blender", + description = "Build blender addon into zip file that can be loaded into blender, needs zip installed and available on PATH", execute = function () local output = os.outputof("cd ../blender_addon && zip -r io_symmetry_exp.zip io_symmetry_exp/__init__.py io_symmetry_exp/exporter.py && mv io_symmetry_exp.zip ../build"); printf("Output of blender addon build : \n%s\n", output) diff --git a/src/libsymmetry/console.c b/src/libsymmetry/console.c index 39d2eb9..6900fd3 100644 --- a/src/libsymmetry/console.c +++ b/src/libsymmetry/console.c @@ -23,6 +23,7 @@ void console_init(struct Console* console) console_message_color[CMT_NONE] = nk_rgb(255, 0, 255); console->visible = false; + console->scroll_to_bottom = true; console->text_region_height = 22.f; console->line_height = 20.f; console->current_message_index = -1; @@ -37,6 +38,7 @@ void console_init(struct Console* console) void console_toggle(struct Console* console) { + if(!console->visible) console->scroll_to_bottom = true; console->visible = !console->visible; } @@ -54,16 +56,24 @@ void console_update(struct Console* console, struct Gui_State* gui_state, float if(nk_begin_titled(context, "Console", "Console", nk_recti(0, 0, win_width, half_height), NK_WINDOW_SCROLL_AUTO_HIDE)) { nk_layout_row_dynamic(context, nk_window_get_height(context) - console->text_region_height * 2, 1); - if(nk_group_begin(context, "Log", NK_WINDOW_SCROLL_AUTO_HIDE)) + if(nk_group_begin(context, "Log", NK_WINDOW_BORDER)) { 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, console_message_color[console->console_messages[i].type], console->console_messages[i].message); } + + if(console->scroll_to_bottom == true) // scroll console message area to the bottom if required + { + *context->current->layout->offset_y = context->current->layout->at_y; + console->scroll_to_bottom = false; + } + nk_group_end(context); } + //Edit-string/Textfield for command nk_layout_row_dynamic(context, console->text_region_height, 1); int edit_flags = NK_EDIT_GOTO_END_ON_ACTIVATE | NK_EDIT_FIELD | NK_EDIT_SIG_ENTER; nk_edit_focus(context, edit_flags); @@ -76,6 +86,7 @@ void console_update(struct Console* console, struct Gui_State* gui_state, float 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); + console->scroll_to_bottom = true; } } nk_end(context); @@ -101,6 +112,7 @@ void console_on_log_message(struct Console* console, const char* message, va_lis console->current_message_index = 0; 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; + console->scroll_to_bottom = true; } void console_on_log_warning(struct Console* console, const char* warning_message, va_list args) @@ -109,6 +121,7 @@ void console_on_log_warning(struct Console* console, const char* warning_message 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; + console->scroll_to_bottom = true; } void console_on_log_error(struct Console* console, const char* context, const char* error, va_list args) @@ -118,4 +131,5 @@ void console_on_log_error(struct Console* console, const char* context, const ch 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; + console->scroll_to_bottom = true; } diff --git a/src/libsymmetry/console.h b/src/libsymmetry/console.h index 44ea619..a8ae1f2 100644 --- a/src/libsymmetry/console.h +++ b/src/libsymmetry/console.h @@ -26,6 +26,7 @@ struct Console_Message struct Console { bool visible; + bool scroll_to_bottom; float text_region_height; float line_height; int current_message_index;