limboai/util/limbo_utility.cpp

81 lines
2.4 KiB
C++
Raw Normal View History

/**
* limbo_utility.cpp
* =============================================================================
* Copyright 2021-2023 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.
* =============================================================================
*/
2022-08-28 10:54:34 +00:00
#include "limbo_utility.h"
2023-07-20 16:35:36 +00:00
#include "modules/limboai/bt/bt_task.h"
#include "core/variant/variant.h"
#include "scene/resources/texture.h"
2022-08-28 10:54:34 +00:00
2023-04-26 12:45:03 +00:00
#ifdef TOOLS_ENABLED
#include "editor/editor_node.h"
#endif // TOOLS_ENABLED
2022-09-21 21:56:04 +00:00
LimboUtility *LimboUtility::singleton = nullptr;
LimboUtility *LimboUtility::get_singleton() {
return singleton;
}
2022-11-01 13:03:20 +00:00
String LimboUtility::decorate_var(String p_variable) const {
2022-09-21 21:56:04 +00:00
String var = p_variable.trim_prefix("$").trim_prefix("\"").trim_suffix("\"");
if (var.find(" ") == -1 and not var.is_empty()) {
2022-09-21 21:56:04 +00:00
return vformat("$%s", var);
} else {
return vformat("$\"%s\"", var);
2022-08-28 10:54:34 +00:00
}
}
2022-11-01 13:03:20 +00:00
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<Texture2D> LimboUtility::get_task_icon(String p_class_or_script_path) const {
2023-04-26 12:45:03 +00:00
#ifdef TOOLS_ENABLED
ERR_FAIL_COND_V_MSG(p_class_or_script_path.is_empty(), Variant(), "BTTask: script path or class cannot be empty.");
if (p_class_or_script_path.begins_with("res:")) {
2023-07-20 18:10:02 +00:00
Ref<Script> s = ResourceLoader::load(p_class_or_script_path, "Script");
return EditorNode::get_singleton()->get_object_icon(s.ptr(), "BTTask");
}
// TODO: Walk inheritance tree until icon is found.
return EditorNode::get_singleton()->get_class_icon(p_class_or_script_path, "BTTask");
2023-04-26 12:45:03 +00:00
#endif // TOOLS_ENABLED
// Note: class icons are not available at runtime as they are part of the editor theme.
return nullptr;
}
2022-08-28 10:54:34 +00:00
void LimboUtility::_bind_methods() {
2022-09-21 21:56:04 +00:00
ClassDB::bind_method(D_METHOD("decorate_var", "p_variable"), &LimboUtility::decorate_var);
2022-11-01 13:03:20 +00:00
ClassDB::bind_method(D_METHOD("get_status_name", "p_status"), &LimboUtility::get_status_name);
2023-07-20 20:15:30 +00:00
ClassDB::bind_method(D_METHOD("get_task_icon", "p_class_or_script_path"), &LimboUtility::get_task_icon);
2022-09-21 21:56:04 +00:00
}
LimboUtility::LimboUtility() {
singleton = this;
}
LimboUtility::~LimboUtility() {
singleton = nullptr;
2022-08-28 10:54:34 +00:00
}