Handle resource reloading (or for GDExtension - don't)

This commit is contained in:
Serhii Snitsaruk 2024-01-10 20:00:04 +01:00
parent 8e9cc74857
commit ac3da5ab90
1 changed files with 8 additions and 4 deletions

View File

@ -753,8 +753,6 @@ void LimboAIEditor::_on_resources_reload(const PackedStringArray &p_resources) {
continue; continue;
} }
// TODO: check if exists() workaround works in GDExtesnion.
// TODO: check if the resource isn't replaced automatically.
if (RESOURCE_EXISTS(res_path, "BehaviorTree")) { if (RESOURCE_EXISTS(res_path, "BehaviorTree")) {
Ref<BehaviorTree> res = RESOURCE_LOAD(res_path, "BehaviorTree"); Ref<BehaviorTree> res = RESOURCE_LOAD(res_path, "BehaviorTree");
if (res.is_valid()) { if (res.is_valid()) {
@ -768,6 +766,9 @@ void LimboAIEditor::_on_resources_reload(const PackedStringArray &p_resources) {
} }
} }
// TODO: Find a way to allow resaving trees when they change outside of Godot.
// * Currently, editor reloads them without asking in GDExtension. There is no Resource::editor_can_reload_from_file().
#ifdef LIMBOAI_MODULE
if (disk_changed_files.size() > 0) { if (disk_changed_files.size() > 0) {
disk_changed_list->clear(); disk_changed_list->clear();
disk_changed_list->set_hide_root(true); disk_changed_list->set_hide_root(true);
@ -782,6 +783,9 @@ void LimboAIEditor::_on_resources_reload(const PackedStringArray &p_resources) {
} }
disk_changed->call_deferred("popup_centered_ratio", 0.5); disk_changed->call_deferred("popup_centered_ratio", 0.5);
} }
#else //LIMBOAI_GDEXTENSION
task_tree->update_tree();
#endif // LIMBOAI_MODULE
} }
void LimboAIEditor::_task_type_selected(const String &p_class_or_path) { void LimboAIEditor::_task_type_selected(const String &p_class_or_path) {
@ -842,7 +846,6 @@ void LimboAIEditor::_replace_task(const Ref<BTTask> &p_task, const Ref<BTTask> &
void LimboAIEditor::_reload_modified() { void LimboAIEditor::_reload_modified() {
for (const String &res_path : disk_changed_files) { for (const String &res_path : disk_changed_files) {
// TODO: check if the resource isn't replaced automatically.
Ref<BehaviorTree> res = RESOURCE_LOAD(res_path, "BehaviorTree"); Ref<BehaviorTree> res = RESOURCE_LOAD(res_path, "BehaviorTree");
if (res.is_valid()) { if (res.is_valid()) {
Ref<BehaviorTree> reloaded = RESOURCE_LOAD_NO_CACHE(res_path, "BehaviorTree"); Ref<BehaviorTree> reloaded = RESOURCE_LOAD_NO_CACHE(res_path, "BehaviorTree");
@ -853,17 +856,18 @@ void LimboAIEditor::_reload_modified() {
} }
} }
disk_changed_files.clear(); disk_changed_files.clear();
task_tree->update_tree();
} }
void LimboAIEditor::_resave_modified(String _str) { void LimboAIEditor::_resave_modified(String _str) {
for (const String &res_path : disk_changed_files) { for (const String &res_path : disk_changed_files) {
// TODO: check if the resource isn't replaced automatically.
Ref<BehaviorTree> res = RESOURCE_LOAD(res_path, "BehaviorTree"); Ref<BehaviorTree> res = RESOURCE_LOAD(res_path, "BehaviorTree");
if (res.is_valid()) { if (res.is_valid()) {
ERR_FAIL_COND(!res->is_class("BehaviorTree")); ERR_FAIL_COND(!res->is_class("BehaviorTree"));
RESOURCE_SAVE(res, res->get_path(), 0); RESOURCE_SAVE(res, res->get_path(), 0);
} }
} }
task_tree->update_tree();
disk_changed->hide(); disk_changed->hide();
disk_changed_files.clear(); disk_changed_files.clear();
} }