Blackboard: Complain when variable is missing

This commit is contained in:
Serhii Snitsaruk 2024-02-13 17:07:53 +01:00
parent 5621b433c9
commit 6d36d20d06
3 changed files with 8 additions and 4 deletions

View File

@ -32,12 +32,15 @@ Ref<Blackboard> Blackboard::top() const {
return bb; 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)) { if (data.has(p_name)) {
return data.get(p_name).get_value(); return data.get(p_name).get_value();
} else if (parent.is_valid()) { } else if (parent.is_valid()) {
return parent->get_var(p_name, p_default); return parent->get_var(p_name, p_default);
} else { } else {
if (p_complain) {
ERR_PRINT(vformat("Blackboard: Variable \"%s\" not found.", p_name));
}
return p_default; return p_default;
} }
} }
@ -90,7 +93,7 @@ void Blackboard::prefetch_nodepath_vars(Node *p_node) {
} }
void Blackboard::_bind_methods() { 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("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("has_var", "p_name"), &Blackboard::has_var);
ClassDB::bind_method(D_METHOD("set_parent_scope", "p_blackboard"), &Blackboard::set_parent); ClassDB::bind_method(D_METHOD("set_parent_scope", "p_blackboard"), &Blackboard::set_parent);

View File

@ -46,7 +46,7 @@ public:
Ref<Blackboard> top() const; Ref<Blackboard> 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); void set_var(const String &p_name, const Variant &p_value);
bool has_var(const String &p_name) const; bool has_var(const String &p_name) const;
void erase_var(const String &p_name); void erase_var(const String &p_name);

View File

@ -37,8 +37,9 @@
<return type="Variant" /> <return type="Variant" />
<param index="0" name="p_name" type="String" /> <param index="0" name="p_name" type="String" />
<param index="1" name="p_default" type="Variant" default="null" /> <param index="1" name="p_default" type="Variant" default="null" />
<param index="2" name="p_complain" type="bool" default="true" />
<description> <description>
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.
</description> </description>
</method> </method>
<method name="has_var" qualifiers="const"> <method name="has_var" qualifiers="const">