diff --git a/blackboard/blackboard.cpp b/blackboard/blackboard.cpp index 99fdda58..1308437f 100644 --- a/blackboard/blackboard.cpp +++ b/blackboard/blackboard.cpp @@ -10,6 +10,7 @@ */ #include "blackboard.h" +#include "../util/limbo_compat.h" #ifdef LIMBOAI_MODULE #include "core/variant/variant.h" @@ -75,6 +76,26 @@ TypedArray Blackboard::list_vars() const { return var_names; } +void Blackboard::print_state() const { + Ref bb{ this }; + int scope_idx = 0; + while (bb.is_valid()) { + int i = 0; + String line = "Scope " + itos(scope_idx) + ": { "; + for (const KeyValue &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 &kv : data) { @@ -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); diff --git a/blackboard/blackboard.h b/blackboard/blackboard.h index 7d3e6939..6e7d9201 100644 --- a/blackboard/blackboard.h +++ b/blackboard/blackboard.h @@ -57,6 +57,7 @@ class Blackboard : public RefCounted { void erase_var(const StringName &p_name); void clear() { data.clear(); } TypedArray list_vars() const; + void print_state() const; Dictionary get_vars_as_dict() const; void populate_from_dict(const Dictionary &p_dictionary); diff --git a/doc_classes/Blackboard.xml b/doc_classes/Blackboard.xml index 3f8a9ad5..3e430bf3 100644 --- a/doc_classes/Blackboard.xml +++ b/doc_classes/Blackboard.xml @@ -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. + + + + Prints the values of all variables in each scope. + +