diff --git a/bt/actions/bt_console_print.cpp b/bt/actions/bt_console_print.cpp new file mode 100644 index 0000000..e030d69 --- /dev/null +++ b/bt/actions/bt_console_print.cpp @@ -0,0 +1,74 @@ +/* bt_console_print.cpp */ + +#include "bt_console_print.h" +#include "core/object.h" +#include "core/print_string.h" +#include "modules/limboai/bt/actions/bt_action.h" + +String BTConsolePrint::_generate_name() const { + String tx = text; + if (text.length() > 30) { + tx = text.substr(0, 30) + "..."; + } + tx = tx.replace("\"", "\\\""); + if (format_var_args.size() > 0) { + return vformat("ConsolePrint text: \"%s\" format_args: %s", tx, format_var_args); + } + return vformat("ConsolePrint \"%s\"", tx); +} + +int BTConsolePrint::_tick(float p_delta) { + switch (format_var_args.size()) { + case 0: { + print_line(text); + } break; + case 1: { + print_line(vformat(text, get_blackboard().get(format_var_args[0], ""))); + } break; + case 2: { + print_line(vformat(text, get_blackboard().get(format_var_args[0], ""), + get_blackboard().get(format_var_args[1], ""))); + } break; + case 3: { + print_line(vformat(text, get_blackboard().get(format_var_args[0], ""), + get_blackboard().get(format_var_args[1], ""), + get_blackboard().get(format_var_args[2], ""))); + } break; + case 4: { + print_line(vformat(text, get_blackboard().get(format_var_args[0], ""), + get_blackboard().get(format_var_args[1], ""), + get_blackboard().get(format_var_args[2], ""), + get_blackboard().get(format_var_args[3], ""))); + } break; + case 5: + default: { + print_line(vformat(text, get_blackboard().get(format_var_args[0], ""), + get_blackboard().get(format_var_args[1], ""), + get_blackboard().get(format_var_args[2], ""), + get_blackboard().get(format_var_args[3], ""), + get_blackboard().get(format_var_args[4], ""))); + } break; + } + return SUCCESS; +} + +String BTConsolePrint::get_configuration_warning() const { + String warning = BTAction::get_configuration_warning(); + if (!warning.empty()) { + warning += "\n"; + } + if (format_var_args.size() > 5) { + warning += "ConsolePrint supports up to 5 format arguments.\n"; + } + return warning; +} + +void BTConsolePrint::_bind_methods() { + ClassDB::bind_method(D_METHOD("set_text", "p_text"), &BTConsolePrint::set_text); + ClassDB::bind_method(D_METHOD("get_text"), &BTConsolePrint::get_text); + ClassDB::bind_method(D_METHOD("set_format_var_args", "p_variables"), &BTConsolePrint::set_format_var_args); + ClassDB::bind_method(D_METHOD("get_format_var_args"), &BTConsolePrint::get_format_var_args); + + ADD_PROPERTY(PropertyInfo(Variant::STRING, "text", PROPERTY_HINT_MULTILINE_TEXT), "set_text", "get_text"); + ADD_PROPERTY(PropertyInfo(Variant::POOL_STRING_ARRAY, "format_var_args"), "set_format_var_args", "get_format_var_args"); +} \ No newline at end of file diff --git a/bt/actions/bt_console_print.h b/bt/actions/bt_console_print.h new file mode 100644 index 0000000..6a21475 --- /dev/null +++ b/bt/actions/bt_console_print.h @@ -0,0 +1,39 @@ +/* bt_console_print.h */ + +#ifndef BT_CONSOLE_PRINT_H +#define BT_CONSOLE_PRINT_H + +#include "bt_action.h" +#include "core/object.h" +#include "core/variant.h" + +class BTConsolePrint : public BTAction { + GDCLASS(BTConsolePrint, BTAction); + +private: + String text; + PoolStringArray format_var_args; + +protected: + static void _bind_methods(); + + virtual String _generate_name() const; + virtual int _tick(float p_delta); + +public: + void set_text(String p_value) { + text = p_value; + emit_changed(); + } + String get_text() const { return text; } + + void set_format_var_args(const PoolStringArray &p_value) { + format_var_args = p_value; + emit_changed(); + } + PoolStringArray get_format_var_args() const { return format_var_args; } + + virtual String get_configuration_warning() const; +}; + +#endif // BT_CONSOLE_PRINT_H \ No newline at end of file diff --git a/icons/icon_b_t_console_print.svg b/icons/icon_b_t_console_print.svg new file mode 100644 index 0000000..cee42eb --- /dev/null +++ b/icons/icon_b_t_console_print.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/register_types.cpp b/register_types.cpp index 41e108e..01a794a 100644 --- a/register_types.cpp +++ b/register_types.cpp @@ -5,6 +5,7 @@ #include "core/class_db.h" #include "bt/actions/bt_action.h" +#include "bt/actions/bt_console_print.h" #include "bt/actions/bt_fail.h" #include "bt/actions/bt_random_wait.h" #include "bt/actions/bt_subtree.h" @@ -75,6 +76,7 @@ void register_limboai_types() { ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); + ClassDB::register_class(); ClassDB::register_class();