/** * limbo_utility.cpp * ============================================================================= * Copyright 2021-2024 Serhii Snitsaruk * * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. * ============================================================================= */ #include "limbo_utility.h" #include "../bt/tasks/bt_task.h" #include "../util/limbo_compat.h" #ifdef LIMBOAI_MODULE #include "core/config/project_settings.h" #include "core/error/error_macros.h" #include "core/object/script_language.h" #include "core/os/os.h" #include "core/variant/variant.h" #include "scene/resources/texture.h" #ifdef TOOLS_ENABLED #include "editor/editor_node.h" #endif // TOOLS_ENABLED #endif // ! LIMBOAI_MODULE #ifdef LIMBOAI_GDEXTENSION #include "godot_cpp/classes/input_event_key.hpp" #include "godot_cpp/classes/project_settings.hpp" #include "godot_cpp/variant/dictionary.hpp" #include "godot_cpp/variant/utility_functions.hpp" #include #include #include #include #include #include #endif // ! LIMBOAI_GDEXTENSION LimboUtility *LimboUtility::singleton = nullptr; LimboUtility *LimboUtility::get_singleton() { return singleton; } String LimboUtility::decorate_var(String p_variable) const { String var = p_variable.trim_prefix("$").trim_prefix("\"").trim_suffix("\""); if (var.find(" ") == -1 && !var.is_empty()) { return vformat("$%s", var); } else { return vformat("$\"%s\"", var); } } String LimboUtility::decorate_output_var(String p_variable) const { return LW_NAME(output_var_prefix) + decorate_var(p_variable); } String LimboUtility::get_status_name(int p_status) const { switch (p_status) { case BTTask::FRESH: return "FRESH"; case BTTask::RUNNING: return "RUNNING"; case BTTask::FAILURE: return "FAILURE"; case BTTask::SUCCESS: return "SUCCESS"; default: return ""; } } Ref LimboUtility::get_task_icon(String p_class_or_script_path) const { ERR_FAIL_COND_V_MSG(p_class_or_script_path.is_empty(), Variant(), "BTTask: script path or class cannot be empty."); #if defined(TOOLS_ENABLED) && defined(LIMBOAI_MODULE) // * Using editor theme if (Engine::get_singleton()->is_editor_hint()) { Ref theme = EditorNode::get_singleton()->get_editor_theme(); ERR_FAIL_COND_V(theme.is_null(), nullptr); if (p_class_or_script_path.begins_with("res:")) { Ref