Skip to content

Commit

Permalink
Add Blackboard.print_state() (#264)
Browse files Browse the repository at this point in the history
Method that prints values of all variables in each scope.
  • Loading branch information
limbonaut authored Dec 29, 2024
1 parent 0982804 commit a952009
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 0 deletions.
22 changes: 22 additions & 0 deletions blackboard/blackboard.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
*/

#include "blackboard.h"
#include "../util/limbo_compat.h"

#ifdef LIMBOAI_MODULE
#include "core/variant/variant.h"
Expand Down Expand Up @@ -75,6 +76,26 @@ TypedArray<StringName> Blackboard::list_vars() const {
return var_names;
}

void Blackboard::print_state() const {
Ref<Blackboard> bb{ this };
int scope_idx = 0;
while (bb.is_valid()) {
int i = 0;
String line = "Scope " + itos(scope_idx) + ": { ";
for (const KeyValue<StringName, BBVariable> &kv : bb->data) {
if (i > 0) {
line += ", ";
}
line += String(kv.key) + ": " + String(kv.value.get_value());
i++;
}
line += " }";
PRINT_LINE(line);
bb = bb->get_parent();
scope_idx++;
}
}

Dictionary Blackboard::get_vars_as_dict() const {
Dictionary dict;
for (const KeyValue<StringName, BBVariable> &kv : data) {
Expand Down Expand Up @@ -136,6 +157,7 @@ void Blackboard::_bind_methods() {
ClassDB::bind_method(D_METHOD("erase_var", "var_name"), &Blackboard::erase_var);
ClassDB::bind_method(D_METHOD("clear"), &Blackboard::clear);
ClassDB::bind_method(D_METHOD("list_vars"), &Blackboard::list_vars);
ClassDB::bind_method(D_METHOD("print_state"), &Blackboard::print_state);
ClassDB::bind_method(D_METHOD("get_vars_as_dict"), &Blackboard::get_vars_as_dict);
ClassDB::bind_method(D_METHOD("populate_from_dict", "dictionary"), &Blackboard::populate_from_dict);
ClassDB::bind_method(D_METHOD("top"), &Blackboard::top);
Expand Down
1 change: 1 addition & 0 deletions blackboard/blackboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ class Blackboard : public RefCounted {
void erase_var(const StringName &p_name);
void clear() { data.clear(); }
TypedArray<StringName> list_vars() const;
void print_state() const;

Dictionary get_vars_as_dict() const;
void populate_from_dict(const Dictionary &p_dictionary);
Expand Down
6 changes: 6 additions & 0 deletions doc_classes/Blackboard.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@
Fills the Blackboard with multiple variables from a dictionary. The dictionary keys must be variable names and the dictionary values must be variable values. Keys must be StringName or String.
</description>
</method>
<method name="print_state" qualifiers="const">
<return type="void" />
<description>
Prints the values of all variables in each scope.
</description>
</method>
<method name="set_parent">
<return type="void" />
<param index="0" name="blackboard" type="Blackboard" />
Expand Down

0 comments on commit a952009

Please sign in to comment.