From 6d36d20d06da88e97340d638be900aa7b8073107 Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Tue, 13 Feb 2024 17:07:53 +0100 Subject: [PATCH 1/2] Blackboard: Complain when variable is missing --- blackboard/blackboard.cpp | 7 +++++-- blackboard/blackboard.h | 2 +- doc_classes/Blackboard.xml | 3 ++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/blackboard/blackboard.cpp b/blackboard/blackboard.cpp index 6e3f8c8..00075bf 100644 --- a/blackboard/blackboard.cpp +++ b/blackboard/blackboard.cpp @@ -32,12 +32,15 @@ Ref Blackboard::top() const { return bb; } -Variant Blackboard::get_var(const String &p_name, const Variant &p_default) const { +Variant Blackboard::get_var(const String &p_name, const Variant &p_default, bool p_complain) const { if (data.has(p_name)) { return data.get(p_name).get_value(); } else if (parent.is_valid()) { return parent->get_var(p_name, p_default); } else { + if (p_complain) { + ERR_PRINT(vformat("Blackboard: Variable \"%s\" not found.", p_name)); + } return p_default; } } @@ -90,7 +93,7 @@ void Blackboard::prefetch_nodepath_vars(Node *p_node) { } void Blackboard::_bind_methods() { - ClassDB::bind_method(D_METHOD("get_var", "p_name", "p_default"), &Blackboard::get_var, Variant()); + ClassDB::bind_method(D_METHOD("get_var", "p_name", "p_default", "p_complain"), &Blackboard::get_var, Variant(), true); ClassDB::bind_method(D_METHOD("set_var", "p_name", "p_value"), &Blackboard::set_var); ClassDB::bind_method(D_METHOD("has_var", "p_name"), &Blackboard::has_var); ClassDB::bind_method(D_METHOD("set_parent_scope", "p_blackboard"), &Blackboard::set_parent); diff --git a/blackboard/blackboard.h b/blackboard/blackboard.h index eba492b..ee0987e 100644 --- a/blackboard/blackboard.h +++ b/blackboard/blackboard.h @@ -46,7 +46,7 @@ public: Ref top() const; - Variant get_var(const String &p_name, const Variant &p_default) const; + Variant get_var(const String &p_name, const Variant &p_default, bool p_complain = true) const; void set_var(const String &p_name, const Variant &p_value); bool has_var(const String &p_name) const; void erase_var(const String &p_name); diff --git a/doc_classes/Blackboard.xml b/doc_classes/Blackboard.xml index 5d429e0..126e656 100644 --- a/doc_classes/Blackboard.xml +++ b/doc_classes/Blackboard.xml @@ -37,8 +37,9 @@ + - Returns variable value. + Returns variable value or [param p_default] if variable doesn't exist. If [param p_complain] is [code]true[/code], an error will be printed if variable doesn't exist. From 0081731654b28723d54d5fda94f1d73dc5ab5909 Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Tue, 13 Feb 2024 17:27:32 +0100 Subject: [PATCH 2/2] Fix tests printing errors --- tests/test_bb_param.h | 2 ++ tests/test_check_trigger.h | 4 +++- tests/test_new_scope.h | 4 ++-- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_bb_param.h b/tests/test_bb_param.h index 7afd8d5..93f44ce 100644 --- a/tests/test_bb_param.h +++ b/tests/test_bb_param.h @@ -100,7 +100,9 @@ TEST_CASE("[Modules][LimboAI] BBNode") { CHECK(param->get_value(dummy, bb) == Variant(other)); } SUBCASE("When variable doesn't exist") { + ERR_PRINT_OFF; CHECK(param->get_value(dummy, bb, Variant()).is_null()); + ERR_PRINT_ON; } SUBCASE("When variable has wrong type") { bb->set_var("test_var", 123); diff --git a/tests/test_check_trigger.h b/tests/test_check_trigger.h index 3732082..28b712d 100644 --- a/tests/test_check_trigger.h +++ b/tests/test_check_trigger.h @@ -35,8 +35,10 @@ TEST_CASE("[Modules][LimboAI] BTCheckTrigger") { ct->set_variable("trigger"); - SUBCASE("When variable is not set") { + SUBCASE("When variable is not found") { + ERR_PRINT_OFF; CHECK(ct->execute(0.01666) == BTTask::FAILURE); + ERR_PRINT_ON; } SUBCASE("When variable set to false") { bb->set_var("trigger", false); diff --git a/tests/test_new_scope.h b/tests/test_new_scope.h index 421ffbd..ae2a831 100644 --- a/tests/test_new_scope.h +++ b/tests/test_new_scope.h @@ -73,14 +73,14 @@ TEST_CASE("[Modules][LimboAI] BTNewScope") { ns->get_blackboard()->set_var("berry", "raspberry"); CHECK(ns->get_blackboard()->get_var("berry", "wetgoop") == "raspberry"); CHECK(child->get_blackboard()->get_var("berry", "wetgoop") == "raspberry"); - CHECK(parent->get_blackboard()->get_var("berry", "wetgoop") == "wetgoop"); + CHECK(parent->get_blackboard()->get_var("berry", "wetgoop", false) == "wetgoop"); CHECK_FALSE(parent->get_blackboard()->has_var("berry")); // * Check if setting a variable doesn't propagate it up the scope (now with the child task) child->get_blackboard()->set_var("seed", "sunflower"); CHECK(child->get_blackboard()->get_var("seed", "wetgoop") == "sunflower"); CHECK(ns->get_blackboard()->get_var("seed", "wetgoop") == "sunflower"); - CHECK(parent->get_blackboard()->get_var("seed", "wetgoop") == "wetgoop"); + CHECK(parent->get_blackboard()->get_var("seed", "wetgoop", false) == "wetgoop"); CHECK_FALSE(parent->get_blackboard()->has_var("seed")); // * Check return status