Merge pull request #61 from limbonaut/refactor-use-stringname

Refactor: Use `StringName` for variables and event names
This commit is contained in:
Serhii Snitsaruk 2024-03-04 19:01:42 +01:00 committed by GitHub
commit ae718ab00c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
102 changed files with 587 additions and 582 deletions

View File

@ -1,7 +1,7 @@
/**
* bb_param.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -49,8 +49,8 @@ void BBParam::set_saved_value(Variant p_value) {
emit_changed();
}
void BBParam::set_variable(const String &p_value) {
variable = p_value;
void BBParam::set_variable(const StringName &p_variable) {
variable = p_variable;
_update_name();
emit_changed();
}
@ -96,7 +96,7 @@ void BBParam::_get_property_list(List<PropertyInfo> *p_list) const {
if (value_source == ValueSource::SAVED_VALUE) {
p_list->push_back(PropertyInfo(get_type(), "saved_value"));
} else {
p_list->push_back(PropertyInfo(Variant::STRING, "variable"));
p_list->push_back(PropertyInfo(Variant::STRING_NAME, "variable"));
}
}
@ -111,7 +111,7 @@ void BBParam::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_value", "p_agent", "p_blackboard", "p_default"), &BBParam::get_value, Variant());
ADD_PROPERTY(PropertyInfo(Variant::INT, "value_source", PROPERTY_HINT_ENUM, "Saved Value,Blackboard Var"), "set_value_source", "get_value_source");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "variable", PROPERTY_HINT_NONE, "", 0), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "variable", PROPERTY_HINT_NONE, "", 0), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::NIL, "saved_value", PROPERTY_HINT_NONE, "", 0), "set_saved_value", "get_saved_value");
BIND_ENUM_CONSTANT(SAVED_VALUE);
@ -120,7 +120,6 @@ void BBParam::_bind_methods() {
BBParam::BBParam() {
value_source = SAVED_VALUE;
variable = "";
_assign_default_value();
}

View File

@ -41,7 +41,7 @@ public:
private:
ValueSource value_source;
Variant saved_value;
String variable;
StringName variable;
_FORCE_INLINE_ void _update_name() {
set_name((value_source == SAVED_VALUE) ? String(saved_value) : LimboUtility::get_singleton()->decorate_var(variable));
@ -70,8 +70,8 @@ public:
void set_saved_value(Variant p_value);
Variant get_saved_value();
void set_variable(const String &p_value);
String get_variable() const { return variable; }
void set_variable(const StringName &p_variable);
StringName get_variable() const { return variable; }
#ifdef LIMBOAI_MODULE
virtual String to_string() override;

View File

@ -63,8 +63,8 @@ public:
void copy_prop_info(const BBVariable &p_other);
// * Editor binding methods
String get_binding_path() const { return data->binding_path; }
void set_binding_path(const String &p_binding_path) { data->binding_path = p_binding_path; }
NodePath get_binding_path() const { return data->binding_path; }
void set_binding_path(const NodePath &p_binding_path) { data->binding_path = p_binding_path; }
bool has_binding() { return data->binding_path.is_empty(); }
// * Runtime binding methods

View File

@ -1,7 +1,7 @@
/**
* blackboard.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -32,7 +32,7 @@ Ref<Blackboard> Blackboard::top() const {
return bb;
}
Variant Blackboard::get_var(const String &p_name, const Variant &p_default, bool p_complain) const {
Variant Blackboard::get_var(const StringName &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()) {
@ -45,7 +45,7 @@ Variant Blackboard::get_var(const String &p_name, const Variant &p_default, bool
}
}
void Blackboard::set_var(const String &p_name, const Variant &p_value) {
void Blackboard::set_var(const StringName &p_name, const Variant &p_value) {
if (data.has(p_name)) {
// Not checking type - allowing duck-typing.
data[p_name].set_value(p_value);
@ -56,32 +56,32 @@ void Blackboard::set_var(const String &p_name, const Variant &p_value) {
}
}
bool Blackboard::has_var(const String &p_name) const {
bool Blackboard::has_var(const StringName &p_name) const {
return data.has(p_name) || (parent.is_valid() && parent->has_var(p_name));
}
void Blackboard::erase_var(const String &p_name) {
void Blackboard::erase_var(const StringName &p_name) {
data.erase(p_name);
}
void Blackboard::bind_var_to_property(const String &p_name, Object *p_object, const StringName &p_property) {
void Blackboard::bind_var_to_property(const StringName &p_name, Object *p_object, const StringName &p_property) {
ERR_FAIL_COND_MSG(!data.has(p_name), "Blackboard: Binding failed - can't bind variable that doesn't exist.");
data[p_name].bind(p_object, p_property);
}
void Blackboard::unbind_var(const String &p_name) {
void Blackboard::unbind_var(const StringName &p_name) {
ERR_FAIL_COND_MSG(data.has(p_name), "Blackboard: Can't unbind variable that doesn't exist.");
data[p_name].unbind();
}
void Blackboard::add_var(const String &p_name, const BBVariable &p_var) {
void Blackboard::add_var(const StringName &p_name, const BBVariable &p_var) {
ERR_FAIL_COND(data.has(p_name));
data.insert(p_name, p_var);
}
void Blackboard::prefetch_nodepath_vars(Node *p_node) {
ERR_FAIL_COND(p_node == nullptr);
for (const KeyValue<String, BBVariable> &kv : data) {
for (const KeyValue<StringName, BBVariable> &kv : data) {
BBVariable var = kv.value;
if (var.get_value().get_type() == Variant::NODE_PATH) {
Node *fetched_node = p_node->get_node_or_null(var.get_value());

View File

@ -1,7 +1,7 @@
/**
* blackboard.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -34,7 +34,7 @@ class Blackboard : public RefCounted {
GDCLASS(Blackboard, RefCounted);
private:
HashMap<String, BBVariable> data;
HashMap<StringName, BBVariable> data;
Ref<Blackboard> parent;
protected:
@ -46,15 +46,15 @@ public:
Ref<Blackboard> top() 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);
Variant get_var(const StringName &p_name, const Variant &p_default, bool p_complain = true) const;
void set_var(const StringName &p_name, const Variant &p_value);
bool has_var(const StringName &p_name) const;
void erase_var(const StringName &p_name);
void bind_var_to_property(const String &p_name, Object *p_object, const StringName &p_property);
void unbind_var(const String &p_name);
void bind_var_to_property(const StringName &p_name, Object *p_object, const StringName &p_property);
void unbind_var(const StringName &p_name);
void add_var(const String &p_name, const BBVariable &p_var);
void add_var(const StringName &p_name, const BBVariable &p_var);
void prefetch_nodepath_vars(Node *p_node);

View File

@ -12,22 +12,22 @@
#include "blackboard_plan.h"
bool BlackboardPlan::_set(const StringName &p_name, const Variant &p_value) {
String prop_name = p_name;
String name_str = p_name;
// * Editor
if (var_map.has(prop_name)) {
var_map[prop_name].set_value(p_value);
if (base.is_valid() && p_value == base->get_var(prop_name).get_value()) {
if (var_map.has(p_name)) {
var_map[p_name].set_value(p_value);
if (base.is_valid() && p_value == base->get_var(p_name).get_value()) {
// When user pressed reset property button in inspector...
var_map[prop_name].reset_value_changed();
var_map[p_name].reset_value_changed();
}
return true;
}
// * Storage
if (prop_name.begins_with("var/")) {
String var_name = prop_name.get_slicec('/', 1);
String what = prop_name.get_slicec('/', 2);
if (name_str.begins_with("var/")) {
StringName var_name = name_str.get_slicec('/', 1);
String what = name_str.get_slicec('/', 2);
if (!var_map.has(var_name) && what == "name") {
add_var(var_name, BBVariable());
}
@ -51,21 +51,21 @@ bool BlackboardPlan::_set(const StringName &p_name, const Variant &p_value) {
}
bool BlackboardPlan::_get(const StringName &p_name, Variant &r_ret) const {
String prop_name = p_name;
String name_str = p_name;
// * Editor
if (var_map.has(prop_name)) {
r_ret = var_map[prop_name].get_value();
if (var_map.has(p_name)) {
r_ret = var_map[p_name].get_value();
return true;
}
// * Storage
if (!prop_name.begins_with("var/")) {
if (!name_str.begins_with("var/")) {
return false;
}
String var_name = prop_name.get_slicec('/', 1);
String what = prop_name.get_slicec('/', 2);
StringName var_name = name_str.get_slicec('/', 1);
String what = name_str.get_slicec('/', 2);
ERR_FAIL_COND_V(!var_map.has(var_name), false);
if (what == "name") {
@ -83,7 +83,7 @@ bool BlackboardPlan::_get(const StringName &p_name, Variant &r_ret) const {
}
void BlackboardPlan::_get_property_list(List<PropertyInfo> *p_list) const {
for (const Pair<String, BBVariable> &p : var_list) {
for (const Pair<StringName, BBVariable> &p : var_list) {
String var_name = p.first;
BBVariable var = p.second;
@ -119,58 +119,59 @@ void BlackboardPlan::set_base_plan(const Ref<BlackboardPlan> &p_base) {
notify_property_list_changed();
}
void BlackboardPlan::add_var(const String &p_name, const BBVariable &p_var) {
void BlackboardPlan::add_var(const StringName &p_name, const BBVariable &p_var) {
ERR_FAIL_COND(var_map.has(p_name));
var_map.insert(p_name, p_var);
var_list.push_back(Pair<String, BBVariable>(p_name, p_var));
var_list.push_back(Pair<StringName, BBVariable>(p_name, p_var));
notify_property_list_changed();
emit_changed();
}
void BlackboardPlan::remove_var(const String &p_name) {
void BlackboardPlan::remove_var(const StringName &p_name) {
ERR_FAIL_COND(!var_map.has(p_name));
var_list.erase(Pair<String, BBVariable>(p_name, var_map[p_name]));
var_list.erase(Pair<StringName, BBVariable>(p_name, var_map[p_name]));
var_map.erase(p_name);
notify_property_list_changed();
emit_changed();
}
BBVariable BlackboardPlan::get_var(const String &p_name) {
BBVariable BlackboardPlan::get_var(const StringName &p_name) {
ERR_FAIL_COND_V(!var_map.has(p_name), BBVariable());
return var_map.get(p_name);
}
Pair<String, BBVariable> BlackboardPlan::get_var_by_index(int p_index) {
Pair<String, BBVariable> ret;
Pair<StringName, BBVariable> BlackboardPlan::get_var_by_index(int p_index) {
Pair<StringName, BBVariable> ret;
ERR_FAIL_INDEX_V(p_index, (int)var_map.size(), ret);
return var_list[p_index];
}
PackedStringArray BlackboardPlan::list_vars() const {
PackedStringArray ret;
for (const Pair<String, BBVariable> &p : var_list) {
for (const Pair<StringName, BBVariable> &p : var_list) {
ret.append(p.first);
}
return ret;
}
String BlackboardPlan::get_var_name(const BBVariable &p_var) const {
for (const Pair<String, BBVariable> &p : var_list) {
StringName BlackboardPlan::get_var_name(const BBVariable &p_var) const {
for (const Pair<StringName, BBVariable> &p : var_list) {
if (p.second == p_var) {
return p.first;
}
}
return String();
return StringName();
}
bool BlackboardPlan::is_valid_var_name(const String &p_name) const {
if (p_name.begins_with("resource_")) {
bool BlackboardPlan::is_valid_var_name(const StringName &p_name) const {
String name_str = p_name;
if (name_str.begins_with("resource_")) {
return false;
}
return p_name.is_valid_identifier() && !var_map.has(p_name);
return name_str.is_valid_identifier() && !var_map.has(p_name);
}
void BlackboardPlan::rename_var(const String &p_name, const String &p_new_name) {
void BlackboardPlan::rename_var(const StringName &p_name, const StringName &p_new_name) {
if (p_name == p_new_name) {
return;
}
@ -179,8 +180,8 @@ void BlackboardPlan::rename_var(const String &p_name, const String &p_new_name)
ERR_FAIL_COND(!var_map.has(p_name));
BBVariable var = var_map[p_name];
Pair<String, BBVariable> new_entry(p_new_name, var);
Pair<String, BBVariable> old_entry(p_name, var);
Pair<StringName, BBVariable> new_entry(p_new_name, var);
Pair<StringName, BBVariable> old_entry(p_name, var);
var_list.find(old_entry)->set(new_entry);
var_map.erase(p_name);
@ -198,11 +199,11 @@ void BlackboardPlan::move_var(int p_index, int p_new_index) {
return;
}
List<Pair<String, BBVariable>>::Element *E = var_list.front();
List<Pair<StringName, BBVariable>>::Element *E = var_list.front();
for (int i = 0; i < p_index; i++) {
E = E->next();
}
List<Pair<String, BBVariable>>::Element *E2 = var_list.front();
List<Pair<StringName, BBVariable>>::Element *E2 = var_list.front();
for (int i = 0; i < p_new_index; i++) {
E2 = E2->next();
}
@ -224,8 +225,8 @@ void BlackboardPlan::sync_with_base_plan() {
bool changed = false;
// Sync variables with the base plan.
for (const Pair<String, BBVariable> &p : base->var_list) {
const String &base_name = p.first;
for (const Pair<StringName, BBVariable> &p : base->var_list) {
const StringName &base_name = p.first;
const BBVariable &base_var = p.second;
if (!var_map.has(base_name)) {
@ -249,7 +250,7 @@ void BlackboardPlan::sync_with_base_plan() {
}
// Erase variables that do not exist in the base plan.
for (const Pair<String, BBVariable> &p : var_list) {
for (const Pair<StringName, BBVariable> &p : var_list) {
if (!base->has_var(p.first)) {
remove_var(p.first);
changed = true;
@ -264,14 +265,14 @@ void BlackboardPlan::sync_with_base_plan() {
Ref<Blackboard> BlackboardPlan::create_blackboard() {
Ref<Blackboard> bb = memnew(Blackboard);
for (const Pair<String, BBVariable> &p : var_list) {
for (const Pair<StringName, BBVariable> &p : var_list) {
bb->add_var(p.first, p.second.duplicate());
}
return bb;
}
void BlackboardPlan::populate_blackboard(const Ref<Blackboard> &p_blackboard, bool overwrite) {
for (const Pair<String, BBVariable> &p : var_list) {
for (const Pair<StringName, BBVariable> &p : var_list) {
if (p_blackboard->has_var(p.first)) {
if (overwrite) {
p_blackboard->erase_var(p.first);

View File

@ -28,8 +28,8 @@ class BlackboardPlan : public Resource {
GDCLASS(BlackboardPlan, Resource);
private:
List<Pair<String, BBVariable>> var_list;
HashMap<String, BBVariable> var_map;
List<Pair<StringName, BBVariable>> var_list;
HashMap<StringName, BBVariable> var_map;
// When base is not null, the plan is considered to be derived from the base plan.
// A derived plan can only have variables that exist in the base plan,
@ -49,18 +49,18 @@ public:
void set_base_plan(const Ref<BlackboardPlan> &p_base);
Ref<BlackboardPlan> get_base_plan() const { return base; }
void add_var(const String &p_name, const BBVariable &p_var);
void remove_var(const String &p_name);
BBVariable get_var(const String &p_name);
Pair<String, BBVariable> get_var_by_index(int p_index);
bool has_var(const String &p_name) { return var_map.has(p_name); }
void add_var(const StringName &p_name, const BBVariable &p_var);
void remove_var(const StringName &p_name);
BBVariable get_var(const StringName &p_name);
Pair<StringName, BBVariable> get_var_by_index(int p_index);
bool has_var(const StringName &p_name) { return var_map.has(p_name); }
bool is_empty() const { return var_map.is_empty(); }
int get_var_count() const { return var_map.size(); }
PackedStringArray list_vars() const;
String get_var_name(const BBVariable &p_var) const;
bool is_valid_var_name(const String &p_name) const;
void rename_var(const String &p_name, const String &p_new_name);
StringName get_var_name(const BBVariable &p_var) const;
bool is_valid_var_name(const StringName &p_name) const;
void rename_var(const StringName &p_name, const StringName &p_new_name);
void move_var(int p_index, int p_new_index);
void sync_with_base_plan();

View File

@ -1,7 +1,7 @@
/**
* bt_state.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -113,11 +113,11 @@ void BTState::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_failure_event"), &BTState::get_failure_event);
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "behavior_tree", PROPERTY_HINT_RESOURCE_TYPE, "BehaviorTree"), "set_behavior_tree", "get_behavior_tree");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "success_event"), "set_success_event", "get_success_event");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "failure_event"), "set_failure_event", "get_failure_event");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "success_event"), "set_success_event", "get_success_event");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "failure_event"), "set_failure_event", "get_failure_event");
}
BTState::BTState() {
success_event = "success";
failure_event = "failure";
success_event = LW_NAME(EVENT_SUCCESS);
failure_event = LW_NAME(EVENT_FAILURE);
}

View File

@ -1,7 +1,7 @@
/**
* bt_state.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -23,14 +23,16 @@ class BTState : public LimboState {
private:
Ref<BehaviorTree> behavior_tree;
Ref<BTTask> tree_instance;
String success_event;
String failure_event;
StringName success_event;
StringName failure_event;
void _update_blackboard_plan();
protected:
static void _bind_methods();
void _notification(int p_notification);
virtual void _setup() override;
virtual void _exit() override;
virtual void _update(double p_delta) override;
@ -41,16 +43,13 @@ public:
Ref<BTTask> get_tree_instance() const { return tree_instance; }
void set_success_event(String p_success_event) { success_event = p_success_event; }
String get_success_event() const { return success_event; }
void set_success_event(const StringName &p_success_event) { success_event = p_success_event; }
StringName get_success_event() const { return success_event; }
void set_failure_event(String p_failure_event) { failure_event = p_failure_event; }
String get_failure_event() const { return failure_event; }
void set_failure_event(const StringName &p_failure_event) { failure_event = p_failure_event; }
StringName get_failure_event() const { return failure_event; }
BTState();
protected:
void _notification(int p_notification);
};
#endif // BT_STATE_H

View File

@ -1,7 +1,7 @@
/**
* bt_check_trigger.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -13,28 +13,28 @@
#include "../../../util/limbo_utility.h"
void BTCheckTrigger::set_variable(String p_variable) {
void BTCheckTrigger::set_variable(const StringName &p_variable) {
variable = p_variable;
emit_changed();
}
PackedStringArray BTCheckTrigger::get_configuration_warnings() {
PackedStringArray warnings = BTCondition::get_configuration_warnings();
if (variable.is_empty()) {
if (variable == StringName()) {
warnings.append("Variable is not set.");
}
return warnings;
}
String BTCheckTrigger::_generate_name() {
if (variable.is_empty()) {
if (variable == StringName()) {
return "CheckTrigger ???";
}
return "CheckTrigger " + LimboUtility::get_singleton()->decorate_var(variable);
}
BT::Status BTCheckTrigger::_tick(double p_delta) {
ERR_FAIL_COND_V_MSG(variable.is_empty(), FAILURE, "BBCheckVar: `variable` is not set.");
ERR_FAIL_COND_V_MSG(variable == StringName(), FAILURE, "BBCheckVar: `variable` is not set.");
Variant trigger_value = get_blackboard()->get_var(variable, false);
if (trigger_value == Variant(true)) {
get_blackboard()->set_var(variable, false);
@ -47,5 +47,5 @@ void BTCheckTrigger::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_variable", "p_variable"), &BTCheckTrigger::set_variable);
ClassDB::bind_method(D_METHOD("get_variable"), &BTCheckTrigger::get_variable);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "variable"), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "variable"), "set_variable", "get_variable");
}

View File

@ -1,7 +1,7 @@
/**
* bt_check_trigger.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -19,7 +19,7 @@ class BTCheckTrigger : public BTCondition {
TASK_CATEGORY(Blackboard);
private:
String variable;
StringName variable;
protected:
static void _bind_methods();
@ -28,8 +28,8 @@ protected:
virtual Status _tick(double p_delta) override;
public:
void set_variable(String p_variable);
String get_variable() const { return variable; }
void set_variable(const StringName &p_variable);
StringName get_variable() const { return variable; }
virtual PackedStringArray get_configuration_warnings() override;
};

View File

@ -1,7 +1,7 @@
/**
* bt_check_var.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -11,7 +11,7 @@
#include "bt_check_var.h"
void BTCheckVar::set_variable(String p_variable) {
void BTCheckVar::set_variable(const StringName &p_variable) {
variable = p_variable;
emit_changed();
}
@ -21,7 +21,7 @@ void BTCheckVar::set_check_type(LimboUtility::CheckType p_check_type) {
emit_changed();
}
void BTCheckVar::set_value(Ref<BBVariant> p_value) {
void BTCheckVar::set_value(const Ref<BBVariant> &p_value) {
value = p_value;
emit_changed();
if (Engine::get_singleton()->is_editor_hint() && value.is_valid()) {
@ -31,7 +31,7 @@ void BTCheckVar::set_value(Ref<BBVariant> p_value) {
PackedStringArray BTCheckVar::get_configuration_warnings() {
PackedStringArray warnings = BTCondition::get_configuration_warnings();
if (variable.is_empty()) {
if (variable == StringName()) {
warnings.append("`variable` should be assigned.");
}
if (!value.is_valid()) {
@ -41,7 +41,7 @@ PackedStringArray BTCheckVar::get_configuration_warnings() {
}
String BTCheckVar::_generate_name() {
if (variable.is_empty()) {
if (variable == StringName()) {
return "CheckVar ???";
}
@ -51,7 +51,7 @@ String BTCheckVar::_generate_name() {
}
BT::Status BTCheckVar::_tick(double p_delta) {
ERR_FAIL_COND_V_MSG(variable.is_empty(), FAILURE, "BTCheckVar: `variable` is not set.");
ERR_FAIL_COND_V_MSG(variable == StringName(), FAILURE, "BTCheckVar: `variable` is not set.");
ERR_FAIL_COND_V_MSG(!value.is_valid(), FAILURE, "BTCheckVar: `value` is not set.");
ERR_FAIL_COND_V_MSG(!get_blackboard()->has_var(variable), FAILURE, vformat("BTCheckVar: Blackboard variable doesn't exist: \"%s\". Returning FAILURE.", variable));
@ -70,7 +70,7 @@ void BTCheckVar::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_value", "p_value"), &BTCheckVar::set_value);
ClassDB::bind_method(D_METHOD("get_value"), &BTCheckVar::get_value);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "variable"), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "variable"), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::INT, "check_type", PROPERTY_HINT_ENUM, "Equal,Less Than,Less Than Or Equal,Greater Than,Greater Than Or Equal,Not Equal"), "set_check_type", "get_check_type");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "value", PROPERTY_HINT_RESOURCE_TYPE, "BBVariant"), "set_value", "get_value");
}

View File

@ -1,7 +1,7 @@
/**
* bt_check_var.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -22,7 +22,7 @@ class BTCheckVar : public BTCondition {
TASK_CATEGORY(Blackboard);
private:
String variable;
StringName variable;
LimboUtility::CheckType check_type = LimboUtility::CheckType::CHECK_EQUAL;
Ref<BBVariant> value;
@ -35,13 +35,13 @@ protected:
public:
virtual PackedStringArray get_configuration_warnings() override;
void set_variable(String p_variable);
String get_variable() const { return variable; }
void set_variable(const StringName &p_variable);
StringName get_variable() const { return variable; }
void set_check_type(LimboUtility::CheckType p_check_type);
LimboUtility::CheckType get_check_type() const { return check_type; }
void set_value(Ref<BBVariant> p_value);
void set_value(const Ref<BBVariant> &p_value);
Ref<BBVariant> get_value() const { return value; }
};

View File

@ -1,7 +1,7 @@
/**
* bt_set_var.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -12,7 +12,7 @@
#include "bt_set_var.h"
String BTSetVar::_generate_name() {
if (variable.is_empty()) {
if (variable == StringName()) {
return "SetVar ???";
}
return vformat("Set %s %s= %s",
@ -22,7 +22,7 @@ String BTSetVar::_generate_name() {
}
BT::Status BTSetVar::_tick(double p_delta) {
ERR_FAIL_COND_V_MSG(variable.is_empty(), FAILURE, "BTSetVar: `variable` is not set.");
ERR_FAIL_COND_V_MSG(variable == StringName(), FAILURE, "BTSetVar: `variable` is not set.");
ERR_FAIL_COND_V_MSG(!value.is_valid(), FAILURE, "BTSetVar: `value` is not set.");
Variant result;
Variant error_result = LW_NAME(error_value);
@ -40,12 +40,12 @@ BT::Status BTSetVar::_tick(double p_delta) {
return SUCCESS;
};
void BTSetVar::set_variable(const String &p_variable) {
void BTSetVar::set_variable(const StringName &p_variable) {
variable = p_variable;
emit_changed();
}
void BTSetVar::set_value(Ref<BBVariant> p_value) {
void BTSetVar::set_value(const Ref<BBVariant> &p_value) {
value = p_value;
emit_changed();
if (Engine::get_singleton()->is_editor_hint() && value.is_valid()) {
@ -60,7 +60,7 @@ void BTSetVar::set_operation(LimboUtility::Operation p_operation) {
PackedStringArray BTSetVar::get_configuration_warnings() {
PackedStringArray warnings = BTAction::get_configuration_warnings();
if (variable.is_empty()) {
if (variable == StringName()) {
warnings.append("`variable` should be assigned.");
}
if (!value.is_valid()) {
@ -77,7 +77,7 @@ void BTSetVar::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_operation"), &BTSetVar::get_operation);
ClassDB::bind_method(D_METHOD("set_operation", "p_operation"), &BTSetVar::set_operation);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "variable"), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "variable"), "set_variable", "get_variable");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "value", PROPERTY_HINT_RESOURCE_TYPE, "BBVariant"), "set_value", "get_value");
ADD_PROPERTY(PropertyInfo(Variant::INT, "operation", PROPERTY_HINT_ENUM, "None,Addition,Subtraction,Multiplication,Division,Modulo,Power,Bitwise Shift Left,Bitwise Shift Right,Bitwise AND,Bitwise OR,Bitwise XOR"), "set_operation", "get_operation");
}

View File

@ -1,7 +1,7 @@
/**
* bt_set_var.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -22,7 +22,7 @@ class BTSetVar : public BTAction {
TASK_CATEGORY(Blackboard);
private:
String variable;
StringName variable;
Ref<BBVariant> value;
LimboUtility::Operation operation = LimboUtility::OPERATION_NONE;
@ -35,10 +35,10 @@ protected:
public:
virtual PackedStringArray get_configuration_warnings() override;
void set_variable(const String &p_variable);
String get_variable() const { return variable; }
void set_variable(const StringName &p_variable);
StringName get_variable() const { return variable; }
void set_value(Ref<BBVariant> p_value);
void set_value(const Ref<BBVariant> &p_value);
Ref<BBVariant> get_value() const { return value; }
void set_operation(LimboUtility::Operation p_operation);

View File

@ -1,7 +1,7 @@
/**
* bt_cooldown.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -41,7 +41,7 @@ void BTCooldown::set_trigger_on_failure(bool p_value) {
emit_changed();
}
void BTCooldown::set_cooldown_state_var(String p_value) {
void BTCooldown::set_cooldown_state_var(const StringName &p_value) {
cooldown_state_var = p_value;
emit_changed();
}
@ -53,7 +53,7 @@ String BTCooldown::_generate_name() {
}
void BTCooldown::_setup() {
if (cooldown_state_var.is_empty()) {
if (cooldown_state_var == StringName()) {
cooldown_state_var = vformat("cooldown_%d", rand());
}
get_blackboard()->set_var(cooldown_state_var, false);
@ -109,5 +109,5 @@ void BTCooldown::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "process_pause"), "set_process_pause", "get_process_pause");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "start_cooled"), "set_start_cooled", "get_start_cooled");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "trigger_on_failure"), "set_trigger_on_failure", "get_trigger_on_failure");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "cooldown_state_var"), "set_cooldown_state_var", "get_cooldown_state_var");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "cooldown_state_var"), "set_cooldown_state_var", "get_cooldown_state_var");
}

View File

@ -1,7 +1,7 @@
/**
* bt_cooldown.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -31,7 +31,7 @@ private:
bool process_pause = false;
bool start_cooled = false;
bool trigger_on_failure = false;
String cooldown_state_var = "";
StringName cooldown_state_var = "";
Ref<SceneTreeTimer> timer = nullptr;
@ -58,8 +58,8 @@ public:
void set_trigger_on_failure(bool p_value);
bool get_trigger_on_failure() const { return trigger_on_failure; }
void set_cooldown_state_var(String p_value);
String get_cooldown_state_var() const { return cooldown_state_var; }
void set_cooldown_state_var(const StringName &p_value);
StringName get_cooldown_state_var() const { return cooldown_state_var; }
};
#endif // BT_COOLDOWN_H

View File

@ -1,7 +1,7 @@
/**
* bt_for_each.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -20,12 +20,12 @@
//**** Setters / Getters
void BTForEach::set_array_var(String p_value) {
void BTForEach::set_array_var(const StringName &p_value) {
array_var = p_value;
emit_changed();
}
void BTForEach::set_save_var(String p_value) {
void BTForEach::set_save_var(const StringName &p_value) {
save_var = p_value;
emit_changed();
}
@ -44,8 +44,8 @@ void BTForEach::_enter() {
BT::Status BTForEach::_tick(double p_delta) {
ERR_FAIL_COND_V_MSG(get_child_count() == 0, FAILURE, "ForEach decorator has no child.");
ERR_FAIL_COND_V_MSG(save_var.is_empty(), FAILURE, "ForEach save variable is not set.");
ERR_FAIL_COND_V_MSG(array_var.is_empty(), FAILURE, "ForEach array variable is not set.");
ERR_FAIL_COND_V_MSG(save_var == StringName(), FAILURE, "ForEach save variable is not set.");
ERR_FAIL_COND_V_MSG(array_var == StringName(), FAILURE, "ForEach array variable is not set.");
Array arr = get_blackboard()->get_var(array_var, Variant());
if (arr.size() == 0) {
@ -75,6 +75,6 @@ void BTForEach::_bind_methods() {
ClassDB::bind_method(D_METHOD("set_save_var", "p_variable"), &BTForEach::set_save_var);
ClassDB::bind_method(D_METHOD("get_save_var"), &BTForEach::get_save_var);
ADD_PROPERTY(PropertyInfo(Variant::STRING, "array_var"), "set_array_var", "get_array_var");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "save_var"), "set_save_var", "get_save_var");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "array_var"), "set_array_var", "get_array_var");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "save_var"), "set_save_var", "get_save_var");
}

View File

@ -1,7 +1,7 @@
/**
* bt_for_each.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -19,8 +19,8 @@ class BTForEach : public BTDecorator {
TASK_CATEGORY(Decorators);
private:
String array_var;
String save_var;
StringName array_var;
StringName save_var;
int current_idx;
@ -32,11 +32,11 @@ protected:
virtual Status _tick(double p_delta) override;
public:
void set_array_var(String p_value);
String get_array_var() const { return array_var; }
void set_array_var(const StringName &p_value);
StringName get_array_var() const { return array_var; }
void set_save_var(String p_value);
String get_save_var() const { return save_var; }
void set_save_var(const StringName &p_value);
StringName get_save_var() const { return save_var; }
};
#endif // BT_FOR_EACH_H

View File

@ -21,7 +21,7 @@ void BTAwaitAnimation::set_animation_player(Ref<BBNode> p_animation_player) {
}
}
void BTAwaitAnimation::set_animation_name(StringName p_animation_name) {
void BTAwaitAnimation::set_animation_name(const StringName &p_animation_name) {
animation_name = p_animation_name;
emit_changed();
}
@ -40,7 +40,7 @@ PackedStringArray BTAwaitAnimation::get_configuration_warnings() {
} else {
if (animation_player_param->get_value_source() == BBParam::SAVED_VALUE && animation_player_param->get_saved_value() == Variant()) {
warnings.append("Path to AnimationPlayer node is not set.");
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable().is_empty()) {
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable() == StringName()) {
warnings.append("AnimationPlayer blackboard variable is not set.");
}
}

View File

@ -47,7 +47,7 @@ public:
void set_animation_player(Ref<BBNode> p_animation_player);
Ref<BBNode> get_animation_player() const { return animation_player_param; }
void set_animation_name(StringName p_animation_name);
void set_animation_name(const StringName &p_animation_name);
StringName get_animation_name() const { return animation_name; }
void set_max_time(double p_max_time);

View File

@ -30,7 +30,7 @@ PackedStringArray BTPauseAnimation::get_configuration_warnings() {
} else {
if (animation_player_param->get_value_source() == BBParam::SAVED_VALUE && animation_player_param->get_saved_value() == Variant()) {
warnings.append("Path to AnimationPlayer node is not set.");
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable().is_empty()) {
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable() == StringName()) {
warnings.append("AnimationPlayer blackboard variable is not set.");
}
}

View File

@ -55,7 +55,7 @@ PackedStringArray BTPlayAnimation::get_configuration_warnings() {
} else {
if (animation_player_param->get_value_source() == BBParam::SAVED_VALUE && animation_player_param->get_saved_value() == Variant()) {
warnings.append("Path to AnimationPlayer node is not set.");
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable().is_empty()) {
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable() == StringName()) {
warnings.append("AnimationPlayer blackboard variable is not set.");
}
}

View File

@ -40,7 +40,7 @@ PackedStringArray BTStopAnimation::get_configuration_warnings() {
} else {
if (animation_player_param->get_value_source() == BBParam::SAVED_VALUE && animation_player_param->get_saved_value() == Variant()) {
warnings.append("Path to AnimationPlayer node is not set.");
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable().is_empty()) {
} else if (animation_player_param->get_value_source() == BBParam::BLACKBOARD_VAR && animation_player_param->get_variable() == StringName()) {
warnings.append("AnimationPlayer blackboard variable is not set.");
}
}

View File

@ -1,7 +1,7 @@
/**
* bt_call_method.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -20,12 +20,12 @@
//**** Setters / Getters
void BTCallMethod::set_method(StringName p_method_name) {
void BTCallMethod::set_method(const StringName &p_method_name) {
method = p_method_name;
emit_changed();
}
void BTCallMethod::set_node_param(Ref<BBNode> p_object) {
void BTCallMethod::set_node_param(const Ref<BBNode> &p_object) {
node_param = p_object;
emit_changed();
if (Engine::get_singleton()->is_editor_hint() && node_param.is_valid()) {
@ -43,7 +43,7 @@ void BTCallMethod::set_args(TypedArray<BBVariant> p_args) {
emit_changed();
}
void BTCallMethod::set_result_var(const String &p_result_var) {
void BTCallMethod::set_result_var(const StringName &p_result_var) {
result_var = p_result_var;
emit_changed();
}
@ -77,7 +77,7 @@ String BTCallMethod::_generate_name() {
method != StringName() ? method : "???",
args_str,
node_param.is_valid() && !node_param->to_string().is_empty() ? node_param->to_string() : "???",
result_var.is_empty() ? "" : LimboUtility::get_singleton()->decorate_output_var(result_var));
result_var == StringName() ? "" : LimboUtility::get_singleton()->decorate_output_var(result_var));
}
BT::Status BTCallMethod::_tick(double p_delta) {
@ -124,7 +124,7 @@ BT::Status BTCallMethod::_tick(double p_delta) {
result = obj->callv(method, call_args);
#endif // LIMBOAI_MODULE & LIMBOAI_GDEXTENSION
if (!result_var.is_empty()) {
if (result_var != StringName()) {
get_blackboard()->set_var(result_var, result);
}
@ -147,7 +147,7 @@ void BTCallMethod::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "BBNode"), "set_node_param", "get_node_param");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "method"), "set_method", "get_method");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "result_var"), "set_result_var", "get_result_var");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "result_var"), "set_result_var", "get_result_var");
ADD_GROUP("Arguments", "args_");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "args_include_delta"), "set_include_delta", "is_delta_included");
ADD_PROPERTY(PropertyInfo(Variant::ARRAY, "args", PROPERTY_HINT_ARRAY_TYPE, RESOURCE_TYPE_HINT("BBVariant")), "set_args", "get_args");

View File

@ -1,7 +1,7 @@
/**
* bt_call_method.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -26,7 +26,7 @@ private:
Ref<BBNode> node_param;
TypedArray<BBVariant> args;
bool include_delta = false;
String result_var;
StringName result_var;
protected:
static void _bind_methods();
@ -35,10 +35,10 @@ protected:
virtual Status _tick(double p_delta) override;
public:
void set_method(StringName p_method_name);
void set_method(const StringName &p_method_name);
StringName get_method() const { return method; }
void set_node_param(Ref<BBNode> p_object);
void set_node_param(const Ref<BBNode> &p_object);
Ref<BBNode> get_node_param() const { return node_param; }
void set_args(TypedArray<BBVariant> p_args);
@ -47,8 +47,8 @@ public:
void set_include_delta(bool p_include_delta);
bool is_delta_included() const { return include_delta; }
void set_result_var(const String &p_result_var);
String get_result_var() const { return result_var; }
void set_result_var(const StringName &p_result_var);
StringName get_result_var() const { return result_var; }
virtual PackedStringArray get_configuration_warnings() override;

View File

@ -1,7 +1,7 @@
/**
* bt_evaluate_expression.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
* Copyright 2024 Wilson E. Alvarez
*
* Use of this source code is governed by an MIT-style
@ -55,7 +55,7 @@ void BTEvaluateExpression::set_input_values(const TypedArray<BBVariant> &p_input
emit_changed();
}
void BTEvaluateExpression::set_result_var(const String &p_result_var) {
void BTEvaluateExpression::set_result_var(const StringName &p_result_var) {
result_var = p_result_var;
emit_changed();
}
@ -101,7 +101,7 @@ String BTEvaluateExpression::_generate_name() {
return vformat("EvaluateExpression %s node: %s %s",
!expression_string.is_empty() ? expression_string : "???",
node_param.is_valid() && !node_param->to_string().is_empty() ? node_param->to_string() : "???",
result_var.is_empty() ? "" : LimboUtility::get_singleton()->decorate_output_var(result_var));
result_var == StringName() ? "" : LimboUtility::get_singleton()->decorate_output_var(result_var));
}
BT::Status BTEvaluateExpression::_tick(double p_delta) {
@ -122,7 +122,7 @@ BT::Status BTEvaluateExpression::_tick(double p_delta) {
Variant result = expression.execute(processed_input_values, obj, false);
ERR_FAIL_COND_V_MSG(expression.has_execute_failed(), FAILURE, "BTEvaluateExpression: Failed to execute: " + expression.get_error_text());
if (!result_var.is_empty()) {
if (result_var != StringName()) {
get_blackboard()->set_var(result_var, result);
}
@ -148,7 +148,7 @@ void BTEvaluateExpression::_bind_methods() {
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "node", PROPERTY_HINT_RESOURCE_TYPE, "BBNode"), "set_node_param", "get_node_param");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "expression_string"), "set_expression_string", "get_expression_string");
ADD_PROPERTY(PropertyInfo(Variant::STRING, "result_var"), "set_result_var", "get_result_var");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "result_var"), "set_result_var", "get_result_var");
ADD_GROUP("Inputs", "input_");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "input_include_delta"), "set_input_include_delta", "is_input_delta_included");
ADD_PROPERTY(PropertyInfo(Variant::PACKED_STRING_ARRAY, "input_names", PROPERTY_HINT_ARRAY_TYPE, "String"), "set_input_names", "get_input_names");

View File

@ -1,7 +1,7 @@
/**
* bt_evaluate_expression.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
* Copyright 2024 Wilson E. Alvarez
*
* Use of this source code is governed by an MIT-style
@ -39,7 +39,7 @@ private:
TypedArray<BBVariant> input_values;
bool input_include_delta = false;
Array processed_input_values;
String result_var;
StringName result_var;
protected:
static void _bind_methods();
@ -66,8 +66,8 @@ public:
void set_input_include_delta(bool p_input_include_delta);
bool is_input_delta_included() const { return input_include_delta; }
void set_result_var(const String &p_result_var);
String get_result_var() const { return result_var; }
void set_result_var(const StringName &p_result_var);
StringName get_result_var() const { return result_var; }
virtual PackedStringArray get_configuration_warnings() override;

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_2vrmp"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_3h4dj"]
[ext_resource type="BehaviorTree" uid="uid://b1mfh8yad7rmw" path="res://demo/ai/tutorial_trees/tutorial_01_welcome.tres" id="3_ilmgw"]
[ext_resource type="BehaviorTree" uid="uid://b1mfh8yad7rmw" path="res://demo/ai/trees/tutorial/tutorial_01_welcome.tres" id="3_ilmgw"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_lia2k"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_4x2l4"]
[ext_resource type="BehaviorTree" uid="uid://b1i0xo0o676va" path="res://demo/ai/tutorial_trees/tutorial_02_introduction.tres" id="3_3esuy"]
[ext_resource type="BehaviorTree" uid="uid://b1i0xo0o676va" path="res://demo/ai/trees/tutorial/tutorial_02_introduction.tres" id="3_3esuy"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_p8nwq"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_hnwhw"]
[ext_resource type="BehaviorTree" uid="uid://cb0ybf24ahnc3" path="res://demo/ai/tutorial_trees/tutorial_03_types.tres" id="3_a31ka"]
[ext_resource type="BehaviorTree" uid="uid://cb0ybf24ahnc3" path="res://demo/ai/trees/tutorial/tutorial_03_types.tres" id="3_a31ka"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_oibr1"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_j52yc"]
[ext_resource type="BehaviorTree" uid="uid://dln8ywvtqedt7" path="res://demo/ai/tutorial_trees/tutorial_04_sequence.tres" id="3_feewj"]
[ext_resource type="BehaviorTree" uid="uid://dln8ywvtqedt7" path="res://demo/ai/trees/tutorial/tutorial_04_sequence.tres" id="3_feewj"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_62fs7"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_gdg2c"]
[ext_resource type="BehaviorTree" uid="uid://bf4r652fv5kwi" path="res://demo/ai/tutorial_trees/tutorial_05_selector.tres" id="3_pm5ep"]
[ext_resource type="BehaviorTree" uid="uid://bf4r652fv5kwi" path="res://demo/ai/trees/tutorial/tutorial_05_selector.tres" id="3_pm5ep"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_mbrnd"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_ttkri"]
[ext_resource type="BehaviorTree" uid="uid://beiki511huxb8" path="res://demo/ai/tutorial_trees/tutorial_06_decorators.tres" id="3_tpgll"]
[ext_resource type="BehaviorTree" uid="uid://beiki511huxb8" path="res://demo/ai/trees/tutorial/tutorial_06_decorators.tres" id="3_tpgll"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_k4qfc"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_q4r1n"]
[ext_resource type="BehaviorTree" uid="uid://tep50j4d6kgp" path="res://demo/ai/tutorial_trees/tutorial_07_more_decorators.tres" id="3_ta3g6"]
[ext_resource type="BehaviorTree" uid="uid://tep50j4d6kgp" path="res://demo/ai/trees/tutorial/tutorial_07_more_decorators.tres" id="3_ta3g6"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -2,7 +2,7 @@
[ext_resource type="PackedScene" uid="uid://ooigbfhfy4wa" path="res://demo/agents/agent_base.tscn" id="1_bjdsc"]
[ext_resource type="Texture2D" uid="uid://b0oeqsc0xksto" path="res://demo/assets/agent_junior_pieces.png" id="2_onjfd"]
[ext_resource type="BehaviorTree" uid="uid://dp0cglcytwcj5" path="res://demo/ai/tutorial_trees/tutorial_08_final_touch.tres" id="3_c5qx4"]
[ext_resource type="BehaviorTree" uid="uid://dp0cglcytwcj5" path="res://demo/ai/trees/tutorial/tutorial_08_final_touch.tres" id="3_c5qx4"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_52mdk"]
var/speed/name = "speed"

View File

@ -15,17 +15,17 @@ extends BTAction
## otherwise returns RUNNING.
## Blackboard variable that stores the target position (Vector2)
@export var target_position_var := "pos"
@export var target_position_var := &"pos"
## Variable that stores desired speed (float)
@export var speed_var := "speed"
@export var speed_var := &"speed"
## How close should the agent be to the target position to return SUCCESS.
@export var tolerance := 50.0
## Specifies the node to avoid (valid Node2D is expected).
## If not empty, agent will circle around the node while moving into position.
@export var avoid_var: String
@export var avoid_var: StringName
func _generate_name() -> String:

View File

@ -14,7 +14,7 @@ extends BTAction
## Returns RUNNING always.
## Blackboard variable that stores desired speed.
@export var speed_var: String = "speed"
@export var speed_var: StringName = &"speed"
## How much can we deviate from the "away" direction (in radians).
@export var max_angle_deviation: float = 0.7

View File

@ -14,7 +14,7 @@ extends BTAction
## Returns FAILURE if target is not a valid Node2D instance.
## Blackboard variable that stores our target (expecting Node2D).
@export var target_var: String = "target"
@export var target_var: StringName = &"target"
# Display a customized name (requires @tool).
func _generate_name() -> String:

View File

@ -17,7 +17,7 @@ extends BTAction
@export var group: StringName
## Blackboard variable in which the task will store the acquired node.
@export var output_var: String = "target"
@export var output_var: StringName = &"target"
func _generate_name() -> String:

View File

@ -23,7 +23,7 @@ extends BTCondition
@export var distance_max: float
## Blackboard variable that holds the target (expecting Node2D).
@export var target_var := "target"
@export var target_var: StringName = &"target"
var _min_distance_squared: float
var _max_distance_squared: float

View File

@ -15,7 +15,7 @@ extends BTCondition
## Returns FAILURE if not aligned or if target is not a valid node instance.
@export var target_var: String = "target"
@export var target_var: StringName = &"target"
@export var tolerance: float = 30.0

View File

@ -15,7 +15,7 @@ extends BTAction
## Returns RUNNING if elapsed time didn't exceed duration.
## Blackboard variable that stores desired speed.
@export var speed_var: String = "speed"
@export var speed_var: StringName = &"speed"
## How long to perform this task (in seconds).
@export var duration: float = 0.1

View File

@ -20,10 +20,10 @@ extends BTAction
const TOLERANCE := 30.0
## Blackboard variable that stores our target (expecting Node2D).
@export var target_var: String = "target"
@export var target_var: StringName = &"target"
## Blackboard variable that stores desired speed.
@export var speed_var: String = "speed"
@export var speed_var: StringName = &"speed"
## Desired distance from target.
@export var approach_distance: float = 100.0

View File

@ -21,7 +21,7 @@ enum AgentSide {
}
## Blackboard variable that holds current target (should be a Node2D instance).
@export var target_var: String = "target"
@export var target_var: StringName = &"target"
## Which agent's side should we flank?
@export var flank_side: AgentSide = AgentSide.CLOSEST
@ -33,7 +33,7 @@ enum AgentSide {
@export var range_max: int = 400
## Blackboard variable that will be used to store selected position.
@export var position_var: String = "pos"
@export var position_var: StringName = &"pos"
# Display a customized name (requires @tool).

View File

@ -10,7 +10,7 @@ extends BTAction
@export var range_max: float = 500.0
## Blackboard variable that will be used to store the desired position.
@export var position_var: String = "pos"
@export var position_var: StringName = &"pos"
# Display a customized name (requires @tool).

View File

@ -5,7 +5,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="3_bpmfp"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -40,12 +40,12 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_ulbrf"]
script = ExtResource("1_2jpsu")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTAction" id="BTAction_a4jqi"]
script = ExtResource("2_h5db5")
target_var = "target"
speed_var = "speed"
target_var = &"target"
speed_var = &"speed"
approach_distance = 100.0
[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"]
@ -58,7 +58,7 @@ children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTAction_ulbrf"),
[sub_resource type="BTAction" id="BTAction_kidxn"]
script = ExtResource("3_bpmfp")
target_var = "target"
target_var = &"target"
[sub_resource type="BTWait" id="BTWait_tadkc"]
duration = 0.1

View File

@ -7,12 +7,12 @@
[ext_resource type="Script" path="res://demo/ai/tasks/move_forward.gd" id="5_ucvak"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_qd806"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/charge_speed/name = "charge_speed"
var/charge_speed/name = &"charge_speed"
var/charge_speed/type = 3
var/charge_speed/value = 1000.0
var/charge_speed/hint = 1
@ -37,15 +37,15 @@ children = [SubResource("BTPlayAnimation_ha2ag"), SubResource("BTRandomWait_cedq
[sub_resource type="BTAction" id="BTAction_pp23y"]
script = ExtResource("1_657p6")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTAction" id="BTAction_pmvd0"]
script = ExtResource("2_t3udh")
target_var = "target"
target_var = &"target"
flank_side = 0
range_min = 500
range_max = 600
position_var = "flank_pos"
position_var = &"flank_pos"
[sub_resource type="BBNode" id="BBNode_xh3wr"]
resource_name = "AnimationPlayer"
@ -58,10 +58,10 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_87mi0"]
script = ExtResource("3_u2ra5")
target_position_var = "flank_pos"
speed_var = "speed"
target_position_var = &"flank_pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTTimeLimit" id="BTTimeLimit_is5ag"]
children = [SubResource("BTAction_87mi0")]
@ -73,7 +73,7 @@ children = [SubResource("BTAction_pp23y"), SubResource("BTAction_pmvd0"), SubRes
[sub_resource type="BTAction" id="BTAction_q5g4a"]
script = ExtResource("4_xwjl7")
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_bfijg"]
resource_name = "AnimationPlayer"
@ -103,7 +103,7 @@ blend = 0.05
[sub_resource type="BTAction" id="BTAction_o18uk"]
script = ExtResource("5_ucvak")
speed_var = "charge_speed"
speed_var = &"charge_speed"
duration = 1.5
[sub_resource type="BTSequence" id="BTSequence_8lur1"]

View File

@ -7,7 +7,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_o4ggh"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -26,14 +26,14 @@ blend = 0.1
script = ExtResource("1_cdtqu")
range_min = 200.0
range_max = 500.0
position_var = "pos"
position_var = &"pos"
[sub_resource type="BTAction" id="BTAction_5kivl"]
script = ExtResource("2_31fsn")
target_position_var = "pos"
speed_var = "speed"
target_position_var = &"pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTSequence" id="BTSequence_k184c"]
custom_name = "Chaotic Walk"
@ -71,12 +71,12 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_ulbrf"]
script = ExtResource("3_y1r1a")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTAction" id="BTAction_a4jqi"]
script = ExtResource("4_jlgat")
target_var = "target"
speed_var = "speed"
target_var = &"target"
speed_var = &"speed"
approach_distance = 100.0
[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"]
@ -89,7 +89,7 @@ children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTAction_ulbrf"),
[sub_resource type="BTAction" id="BTAction_kidxn"]
script = ExtResource("5_o4ggh")
target_var = "target"
target_var = &"target"
[sub_resource type="BTWait" id="BTWait_tadkc"]
duration = 0.1

View File

@ -9,17 +9,17 @@
[ext_resource type="Script" path="res://demo/ai/tasks/back_away.gd" id="6_fkv0k"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/fast_speed/name = "fast_speed"
var/fast_speed/name = &"fast_speed"
var/fast_speed/type = 3
var/fast_speed/value = 600.0
var/fast_speed/hint = 1
var/fast_speed/hint_string = "10,1000,10"
var/slow_speed/name = "slow_speed"
var/slow_speed/name = &"slow_speed"
var/slow_speed/type = 3
var/slow_speed/value = 300.0
var/slow_speed/hint = 1
@ -28,7 +28,7 @@ var/slow_speed/hint_string = "10,1000,10"
[sub_resource type="BTAction" id="BTAction_ulbrf"]
script = ExtResource("1_2883n")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BBNode" id="BBNode_nrd4b"]
resource_name = "AnimationPlayer"
@ -54,7 +54,7 @@ children = [SubResource("BTSequence_yhjh1")]
script = ExtResource("5_p5dih")
distance_min = 0.0
distance_max = 300.0
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_7c0g0"]
resource_name = "AnimationPlayer"
@ -68,8 +68,8 @@ speed = 1.2
[sub_resource type="BTAction" id="BTAction_jryg6"]
script = ExtResource("2_lpckh")
target_var = "target"
speed_var = "speed"
target_var = &"target"
speed_var = &"speed"
approach_distance = 100.0
[sub_resource type="BTTimeLimit" id="BTTimeLimit_lkphr"]
@ -78,7 +78,7 @@ time_limit = 1.0
[sub_resource type="BTAction" id="BTAction_kidxn"]
script = ExtResource("4_57x51")
target_var = "target"
target_var = &"target"
[sub_resource type="BTWait" id="BTWait_tadkc"]
duration = 0.2
@ -107,7 +107,7 @@ duration = 2.0
script = ExtResource("5_p5dih")
distance_min = 0.0
distance_max = 300.0
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_3iqcf"]
resource_name = "AnimationPlayer"
@ -121,7 +121,7 @@ speed = -0.7
[sub_resource type="BTAction" id="BTAction_4ye2y"]
script = ExtResource("6_fkv0k")
speed_var = "slow_speed"
speed_var = &"slow_speed"
max_angle_deviation = 0.7
[sub_resource type="BTTimeLimit" id="BTTimeLimit_cns1i"]
@ -158,18 +158,18 @@ speed = 1.2
[sub_resource type="BTAction" id="BTAction_g5ayy"]
script = ExtResource("2_cjso2")
target_var = "target"
target_var = &"target"
flank_side = 2
range_min = 90
range_max = 90
position_var = "flank_pos"
position_var = &"flank_pos"
[sub_resource type="BTAction" id="BTAction_tv4lt"]
script = ExtResource("3_treio")
target_position_var = "flank_pos"
speed_var = "fast_speed"
target_position_var = &"flank_pos"
speed_var = &"fast_speed"
tolerance = 50.0
avoid_var = "target"
avoid_var = &"target"
[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"]
children = [SubResource("BTAction_tv4lt")]

View File

@ -7,12 +7,12 @@
[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_aexyq"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/run_speed/name = "run_speed"
var/run_speed/name = &"run_speed"
var/run_speed/type = 3
var/run_speed/value = 600.0
var/run_speed/hint = 1
@ -34,7 +34,7 @@ max_duration = 1.5
[sub_resource type="BTAction" id="BTAction_c4cxo"]
script = ExtResource("1_4xk1i")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTSequence" id="BTSequence_yhjh1"]
custom_name = "Take a break"
@ -52,18 +52,18 @@ speed = 1.5
[sub_resource type="BTAction" id="BTAction_op6l6"]
script = ExtResource("4_53hao")
target_var = "target"
target_var = &"target"
flank_side = 1
range_min = 400
range_max = 1000
position_var = "pos"
position_var = &"pos"
[sub_resource type="BTAction" id="BTAction_ycjun"]
script = ExtResource("3_q4r2p")
target_position_var = "pos"
speed_var = "run_speed"
target_position_var = &"pos"
speed_var = &"run_speed"
tolerance = 50.0
avoid_var = "target"
avoid_var = &"target"
[sub_resource type="BTTimeLimit" id="BTTimeLimit_gadc6"]
children = [SubResource("BTAction_ycjun")]
@ -71,7 +71,7 @@ time_limit = 7.0
[sub_resource type="BTAction" id="BTAction_poqpu"]
script = ExtResource("5_aexyq")
target_var = "target"
target_var = &"target"
[sub_resource type="BTSequence" id="BTSequence_0gdqn"]
custom_name = "Change flank"
@ -87,11 +87,11 @@ run_chance = 0.3
[sub_resource type="BTAction" id="BTAction_kuuw2"]
script = ExtResource("4_53hao")
target_var = "target"
target_var = &"target"
flank_side = 0
range_min = 400
range_max = 1000
position_var = "shoot_pos"
position_var = &"shoot_pos"
[sub_resource type="BBNode" id="BBNode_kc64r"]
resource_name = "AnimationPlayer"
@ -104,21 +104,21 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_66hsk"]
script = ExtResource("3_q4r2p")
target_position_var = "shoot_pos"
speed_var = "speed"
target_position_var = &"shoot_pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTTimeLimit" id="BTTimeLimit_24ath"]
children = [SubResource("BTAction_66hsk")]
[sub_resource type="BTAction" id="BTAction_enw2m"]
script = ExtResource("5_aexyq")
target_var = "target"
target_var = &"target"
[sub_resource type="BTCondition" id="BTCondition_1fnyc"]
script = ExtResource("2_a8qex")
target_var = "target"
target_var = &"target"
tolerance = 150.0
[sub_resource type="BBNode" id="BBNode_s6vt4"]

View File

@ -7,12 +7,12 @@
[ext_resource type="Script" path="res://demo/ai/tasks/move_forward.gd" id="5_au5yc"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/charge_speed/name = "charge_speed"
var/charge_speed/name = &"charge_speed"
var/charge_speed/type = 3
var/charge_speed/value = 1000.0
var/charge_speed/hint = 0
@ -34,7 +34,7 @@ max_duration = 1.5
[sub_resource type="BTAction" id="BTAction_ulbrf"]
script = ExtResource("1_sf4l8")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTSequence" id="BTSequence_yhjh1"]
custom_name = "Pause before action"
@ -42,11 +42,11 @@ children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud
[sub_resource type="BTAction" id="BTAction_85keo"]
script = ExtResource("2_5nwkp")
target_var = "target"
target_var = &"target"
flank_side = 0
range_min = 300
range_max = 400
position_var = "pos"
position_var = &"pos"
[sub_resource type="BBNode" id="BBNode_wpj6d"]
resource_name = "AnimationPlayer"
@ -59,10 +59,10 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_ygjnc"]
script = ExtResource("3_3tom2")
target_position_var = "pos"
speed_var = "speed"
target_position_var = &"pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"]
children = [SubResource("BTAction_ygjnc")]
@ -73,7 +73,7 @@ children = [SubResource("BTAction_85keo"), SubResource("BTPlayAnimation_olf37"),
[sub_resource type="BTAction" id="BTAction_kidxn"]
script = ExtResource("4_hi228")
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_giv5l"]
resource_name = "AnimationPlayer"
@ -98,7 +98,7 @@ animation_name = &"attack_1"
[sub_resource type="BTAction" id="BTAction_u22bc"]
script = ExtResource("5_au5yc")
speed_var = "charge_speed"
speed_var = &"charge_speed"
duration = 0.1
[sub_resource type="BTParallel" id="BTParallel_ec2e3"]
@ -119,7 +119,7 @@ animation_name = &"attack_2"
[sub_resource type="BTAction" id="BTAction_yuxl3"]
script = ExtResource("5_au5yc")
speed_var = "charge_speed"
speed_var = &"charge_speed"
duration = 0.1
[sub_resource type="BTParallel" id="BTParallel_thojy"]
@ -140,7 +140,7 @@ animation_name = &"attack_3"
[sub_resource type="BTAction" id="BTAction_rwp18"]
script = ExtResource("5_au5yc")
speed_var = "charge_speed"
speed_var = &"charge_speed"
duration = 0.1
[sub_resource type="BTParallel" id="BTParallel_qmdfb"]

View File

@ -7,12 +7,12 @@
[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="5_r1ou0"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_46tbn"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/flank_speed/name = "flank_speed"
var/flank_speed/name = &"flank_speed"
var/flank_speed/type = 3
var/flank_speed/value = 600.0
var/flank_speed/hint = 1
@ -34,7 +34,7 @@ max_duration = 1.5
[sub_resource type="BTAction" id="BTAction_c4cxo"]
script = ExtResource("1_08fik")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTSequence" id="BTSequence_yhjh1"]
custom_name = "Pause before action"
@ -52,25 +52,25 @@ speed = 1.5
[sub_resource type="BTAction" id="BTAction_6e48s"]
script = ExtResource("2_te3yo")
target_var = "target"
target_var = &"target"
flank_side = 1
range_min = 400
range_max = 600
position_var = "flank_pos"
position_var = &"flank_pos"
[sub_resource type="BTAction" id="BTAction_66hsk"]
script = ExtResource("3_svwk8")
target_position_var = "flank_pos"
speed_var = "flank_speed"
target_position_var = &"flank_pos"
speed_var = &"flank_speed"
tolerance = 50.0
avoid_var = "target"
avoid_var = &"target"
[sub_resource type="BTTimeLimit" id="BTTimeLimit_24ath"]
children = [SubResource("BTAction_66hsk")]
[sub_resource type="BTAction" id="BTAction_enw2m"]
script = ExtResource("4_mvsyw")
target_var = "target"
target_var = &"target"
[sub_resource type="BTSequence" id="BTSequence_lhg7f"]
custom_name = "Flank player"
@ -93,8 +93,8 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_a4jqi"]
script = ExtResource("5_r1ou0")
target_var = "target"
speed_var = "speed"
target_var = &"target"
speed_var = &"speed"
approach_distance = 100.0
[sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"]
@ -103,7 +103,7 @@ time_limit = 2.0
[sub_resource type="BTAction" id="BTAction_kidxn"]
script = ExtResource("4_mvsyw")
target_var = "target"
target_var = &"target"
[sub_resource type="BTWait" id="BTWait_tadkc"]
duration = 0.1
@ -136,11 +136,11 @@ metadata/_weight_ = 4.0
[sub_resource type="BTAction" id="BTAction_mf87t"]
script = ExtResource("2_te3yo")
target_var = "target"
target_var = &"target"
flank_side = 0
range_min = 350
range_max = 600
position_var = "pos"
position_var = &"pos"
[sub_resource type="BBNode" id="BBNode_cx111"]
resource_name = "AnimationPlayer"
@ -153,10 +153,10 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_6nx58"]
script = ExtResource("3_svwk8")
target_position_var = "pos"
speed_var = "speed"
target_position_var = &"pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTTimeLimit" id="BTTimeLimit_tidwl"]
children = [SubResource("BTAction_6nx58")]
@ -164,7 +164,7 @@ time_limit = 3.0
[sub_resource type="BTAction" id="BTAction_8q20y"]
script = ExtResource("4_mvsyw")
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_s6vt4"]
resource_name = "AnimationPlayer"

View File

@ -8,7 +8,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="6_0pfsl"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_8ay3j"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -38,17 +38,17 @@ trigger_on_failure = true
[sub_resource type="BTAction" id="BTAction_ohfp7"]
script = ExtResource("1_ce4la")
group = &"player"
output_var = "target"
output_var = &"target"
[sub_resource type="BTCondition" id="BTCondition_7a5nv"]
script = ExtResource("2_atyuj")
distance_min = 0.0
distance_max = 150.0
target_var = "target"
target_var = &"target"
[sub_resource type="BTAction" id="BTAction_ddvrs"]
script = ExtResource("3_3mw7l")
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_c4nfu"]
resource_name = "AnimationPlayer"
@ -72,11 +72,11 @@ children = [SubResource("BTAction_ohfp7"), SubResource("BTCondition_7a5nv"), Sub
script = ExtResource("2_atyuj")
distance_min = 0.0
distance_max = 300.0
target_var = "target"
target_var = &"target"
[sub_resource type="BTAction" id="BTAction_wpt7j"]
script = ExtResource("3_3mw7l")
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_iv62h"]
resource_name = "AnimationPlayer"
@ -90,7 +90,7 @@ speed = -1.0
[sub_resource type="BTAction" id="BTAction_h2efl"]
script = ExtResource("4_6dr32")
speed_var = "speed"
speed_var = &"speed"
max_angle_deviation = 0.7
[sub_resource type="BTTimeLimit" id="BTTimeLimit_wm5g2"]
@ -115,18 +115,18 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_4mmh0"]
script = ExtResource("5_dho0d")
target_var = "target"
target_var = &"target"
flank_side = 0
range_min = 300
range_max = 700
position_var = "pos"
position_var = &"pos"
[sub_resource type="BTAction" id="BTAction_vb5c3"]
script = ExtResource("6_0pfsl")
target_position_var = "pos"
speed_var = "speed"
target_position_var = &"pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTTimeLimit" id="BTTimeLimit_jyks2"]
children = [SubResource("BTAction_vb5c3")]
@ -136,7 +136,7 @@ custom_name = "Short break before action"
[sub_resource type="BTAction" id="BTAction_fkevy"]
script = ExtResource("3_3mw7l")
target_var = "target"
target_var = &"target"
[sub_resource type="BBNode" id="BBNode_lh25u"]
resource_name = "AnimationPlayer"

View File

@ -4,12 +4,12 @@
[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_pshl2"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_58oq1"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 300.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/summon_cooldown/name = "summon_cooldown"
var/summon_cooldown/name = &"summon_cooldown"
var/summon_cooldown/type = 1
var/summon_cooldown/value = false
var/summon_cooldown/hint = 0
@ -53,7 +53,7 @@ type = 1
[sub_resource type="BTCheckVar" id="BTCheckVar_hc3o3"]
children = [SubResource("BTComment_ef6y0")]
variable = "summon_cooldown"
variable = &"summon_cooldown"
value = SubResource("BBVariant_hgde2")
[sub_resource type="BBNode" id="BBNode_q8bei"]
@ -72,12 +72,12 @@ duration = 0.5
script = ExtResource("1_sgn0p")
range_min = 300.0
range_max = 500.0
position_var = "minion_pos"
position_var = &"minion_pos"
[sub_resource type="BBVariant" id="BBVariant_wfjwy"]
resource_name = "$minion_pos"
value_source = 1
variable = "minion_pos"
variable = &"minion_pos"
type = 5
[sub_resource type="BBNode" id="BBNode_v271m"]
@ -92,7 +92,7 @@ args = Array[BBVariant]([SubResource("BBVariant_wfjwy")])
[sub_resource type="BTCooldown" id="BTCooldown_25f70"]
children = [SubResource("BTCallMethod_4ath5")]
duration = 6.0
cooldown_state_var = "summon_cooldown"
cooldown_state_var = &"summon_cooldown"
[sub_resource type="BTWait" id="BTWait_tdhfn"]
@ -104,7 +104,7 @@ children = [SubResource("BTCheckAgentProperty_olmdj"), SubResource("BTCheckVar_h
script = ExtResource("1_sgn0p")
range_min = 300.0
range_max = 700.0
position_var = "pos"
position_var = &"pos"
[sub_resource type="BBNode" id="BBNode_w5fh2"]
resource_name = "AnimationPlayer"
@ -117,10 +117,10 @@ blend = 0.1
[sub_resource type="BTAction" id="BTAction_dfifw"]
script = ExtResource("2_pshl2")
target_position_var = "pos"
speed_var = "speed"
target_position_var = &"pos"
speed_var = &"speed"
tolerance = 50.0
avoid_var = ""
avoid_var = &""
[sub_resource type="BTTimeLimit" id="BTTimeLimit_i05cm"]
children = [SubResource("BTAction_dfifw")]

View File

@ -1,15 +1,15 @@
[gd_resource type="BehaviorTree" load_steps=5 format=3 uid="uid://b1mfh8yad7rmw"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
[sub_resource type="BBNode" id="BBNode_fq0jf"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_rsejo"]
animation_player = SubResource("BBNode_fq0jf")

View File

@ -1,20 +1,20 @@
[gd_resource type="BehaviorTree" load_steps=9 format=3 uid="uid://b1i0xo0o676va"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
var/flank_speed/name = "flank_speed"
var/flank_speed/name = &"flank_speed"
var/flank_speed/type = 3
var/flank_speed/value = 600.0
var/flank_speed/hint = 1
var/flank_speed/hint_string = "10,1000,10"
[sub_resource type="BBNode" id="BBNode_wu06u"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dubaq"]
animation_player = SubResource("BBNode_wu06u")
@ -24,8 +24,8 @@ animation_name = &"idle"
duration = 5.0
[sub_resource type="BBNode" id="BBNode_mgehh"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_0fqno"]
animation_player = SubResource("BBNode_mgehh")

View File

@ -7,15 +7,15 @@
[ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_thvy5"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
[sub_resource type="BBNode" id="BBNode_20ku0"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_57u80"]
animation_player = SubResource("BBNode_20ku0")
@ -56,8 +56,8 @@ script = ExtResource("5_thvy5")
target_var = "target"
[sub_resource type="BBNode" id="BBNode_ilr2h"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_mrsu3"]
animation_player = SubResource("BBNode_ilr2h")
@ -67,8 +67,8 @@ animation_name = &"attack_1"
children = [SubResource("BTAction_124bm"), SubResource("BTCondition_n25o8"), SubResource("BTAction_1hfgr"), SubResource("BTPlayAnimation_mrsu3")]
[sub_resource type="BBNode" id="BBNode_fq0jf"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_rsejo"]
animation_player = SubResource("BBNode_fq0jf")

View File

@ -4,15 +4,15 @@
[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_v5eou"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
var/speed/hint_string = "10,1000,10"
[sub_resource type="BBNode" id="BBNode_fq0jf"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_rsejo"]
animation_player = SubResource("BBNode_fq0jf")
@ -22,8 +22,8 @@ animation_name = &"idle"
duration = 3.0
[sub_resource type="BBNode" id="BBNode_6d0yy"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"]
animation_player = SubResource("BBNode_6d0yy")

View File

@ -7,7 +7,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_t62a0"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -20,8 +20,8 @@ distance_max = 200.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_icf24"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_iiei3"]
animation_player = SubResource("BBNode_icf24")
@ -41,8 +41,8 @@ tolerance = 50.0
avoid_var = ""
[sub_resource type="BBNode" id="BBNode_ayt56"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"]
animation_player = SubResource("BBNode_ayt56")
@ -61,8 +61,8 @@ distance_max = 10000.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_6d0yy"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"]
animation_player = SubResource("BBNode_6d0yy")
@ -75,8 +75,8 @@ speed_var = "speed"
approach_distance = 100.0
[sub_resource type="BBNode" id="BBNode_aw5jj"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"]
animation_player = SubResource("BBNode_aw5jj")

View File

@ -8,7 +8,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="6_rpn40"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -33,8 +33,8 @@ script = ExtResource("3_orhnl")
target_var = "target"
[sub_resource type="BBNode" id="BBNode_6d0yy"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"]
await_completion = 5.0
@ -45,8 +45,8 @@ animation_name = &"attack_1"
children = [SubResource("BTCondition_m15aa"), SubResource("BTAction_oc76s"), SubResource("BTPlayAnimation_wsspf")]
[sub_resource type="BTCooldown" id="BTCooldown_3tvjt"]
duration = 5.0
children = [SubResource("BTSequence_e0f8v")]
duration = 5.0
[sub_resource type="BTCondition" id="BTCondition_x0uu7"]
script = ExtResource("2_08b67")
@ -55,8 +55,8 @@ distance_max = 200.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_icf24"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_iiei3"]
animation_player = SubResource("BBNode_icf24")
@ -76,8 +76,8 @@ tolerance = 50.0
avoid_var = ""
[sub_resource type="BBNode" id="BBNode_ayt56"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"]
animation_player = SubResource("BBNode_ayt56")
@ -96,8 +96,8 @@ distance_max = 10000.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_rpwld"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dug2k"]
animation_player = SubResource("BBNode_rpwld")
@ -110,8 +110,8 @@ speed_var = "speed"
approach_distance = 100.0
[sub_resource type="BBNode" id="BBNode_aw5jj"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"]
animation_player = SubResource("BBNode_aw5jj")

View File

@ -7,7 +7,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="6_1yikm"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -32,8 +32,8 @@ script = ExtResource("3_86p0r")
target_var = "target"
[sub_resource type="BBNode" id="BBNode_6d0yy"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"]
await_completion = 5.0
@ -41,8 +41,8 @@ animation_player = SubResource("BBNode_6d0yy")
animation_name = &"attack_1"
[sub_resource type="BBNode" id="BBNode_w45kn"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_d2lad"]
await_completion = 5.0
@ -53,8 +53,8 @@ animation_name = &"attack_2"
children = [SubResource("BTCondition_m15aa"), SubResource("BTAction_oc76s"), SubResource("BTPlayAnimation_wsspf"), SubResource("BTPlayAnimation_d2lad")]
[sub_resource type="BTCooldown" id="BTCooldown_3tvjt"]
duration = 5.0
children = [SubResource("BTSequence_e0f8v")]
duration = 5.0
[sub_resource type="BTCondition" id="BTCondition_x0uu7"]
script = ExtResource("2_mj1cj")
@ -63,8 +63,8 @@ distance_max = 200.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_wksgd"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_umlwj"]
animation_player = SubResource("BBNode_wksgd")
@ -76,15 +76,15 @@ speed_var = "speed"
max_angle_deviation = 0.7
[sub_resource type="BTTimeLimit" id="BTTimeLimit_6eii7"]
time_limit = 2.0
children = [SubResource("BTAction_6q0k4")]
time_limit = 2.0
[sub_resource type="BTAlwaysSucceed" id="BTAlwaysSucceed_ieord"]
children = [SubResource("BTTimeLimit_6eii7")]
[sub_resource type="BBNode" id="BBNode_ayt56"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"]
animation_player = SubResource("BBNode_ayt56")
@ -103,8 +103,8 @@ distance_max = 10000.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_rpwld"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dug2k"]
animation_player = SubResource("BBNode_rpwld")
@ -117,8 +117,8 @@ speed_var = "speed"
approach_distance = 100.0
[sub_resource type="BBNode" id="BBNode_aw5jj"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"]
animation_player = SubResource("BBNode_aw5jj")

View File

@ -9,7 +9,7 @@
[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="7_ekws5"]
[sub_resource type="BlackboardPlan" id="BlackboardPlan_ewfwq"]
var/speed/name = "speed"
var/speed/name = &"speed"
var/speed/type = 3
var/speed/value = 400.0
var/speed/hint = 1
@ -34,8 +34,8 @@ script = ExtResource("4_128ei")
target_var = "target"
[sub_resource type="BBNode" id="BBNode_6d0yy"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_wsspf"]
await_completion = 5.0
@ -43,8 +43,8 @@ animation_player = SubResource("BBNode_6d0yy")
animation_name = &"attack_1"
[sub_resource type="BBNode" id="BBNode_w45kn"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_d2lad"]
await_completion = 5.0
@ -55,8 +55,8 @@ animation_name = &"attack_2"
children = [SubResource("BTCondition_m15aa"), SubResource("BTAction_oc76s"), SubResource("BTPlayAnimation_wsspf"), SubResource("BTPlayAnimation_d2lad")]
[sub_resource type="BTCooldown" id="BTCooldown_3tvjt"]
duration = 5.0
children = [SubResource("BTSequence_e0f8v")]
duration = 5.0
[sub_resource type="BTCondition" id="BTCondition_x0uu7"]
script = ExtResource("5_er18b")
@ -65,8 +65,8 @@ distance_max = 200.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_wksgd"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_umlwj"]
animation_player = SubResource("BBNode_wksgd")
@ -78,15 +78,15 @@ speed_var = "speed"
max_angle_deviation = 0.7
[sub_resource type="BTTimeLimit" id="BTTimeLimit_6eii7"]
time_limit = 2.0
children = [SubResource("BTAction_6q0k4")]
time_limit = 2.0
[sub_resource type="BTAlwaysSucceed" id="BTAlwaysSucceed_ieord"]
children = [SubResource("BTTimeLimit_6eii7")]
[sub_resource type="BBNode" id="BBNode_ayt56"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_l1tdg"]
animation_player = SubResource("BBNode_ayt56")
@ -107,8 +107,8 @@ range_max = 500
position_var = "pos"
[sub_resource type="BBNode" id="BBNode_icf24"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_iiei3"]
animation_player = SubResource("BBNode_icf24")
@ -126,8 +126,8 @@ script = ExtResource("4_128ei")
target_var = "target"
[sub_resource type="BBNode" id="BBNode_h4k80"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_40yja"]
animation_player = SubResource("BBNode_h4k80")
@ -136,8 +136,8 @@ animation_name = &"throw_prepare"
[sub_resource type="BTWait" id="BTWait_2dc1v"]
[sub_resource type="BBNode" id="BBNode_slipn"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_qnpjq"]
await_completion = 5.0
@ -145,8 +145,8 @@ animation_player = SubResource("BBNode_slipn")
animation_name = &"throw"
[sub_resource type="BBNode" id="BBNode_qaqnn"]
saved_value = NodePath(".")
resource_name = "."
saved_value = NodePath(".")
[sub_resource type="BTCallMethod" id="BTCallMethod_yd0fn"]
node = SubResource("BBNode_qaqnn")
@ -156,8 +156,8 @@ method = &"throw_ninja_star"
children = [SubResource("BTAction_n0rxm"), SubResource("BTPlayAnimation_iiei3"), SubResource("BTAction_g2up4"), SubResource("BTAction_d5lkr"), SubResource("BTPlayAnimation_40yja"), SubResource("BTWait_2dc1v"), SubResource("BTPlayAnimation_qnpjq"), SubResource("BTCallMethod_yd0fn")]
[sub_resource type="BTProbability" id="BTProbability_omklt"]
run_chance = 0.25
children = [SubResource("BTSequence_ws7nq")]
run_chance = 0.25
[sub_resource type="BTCondition" id="BTCondition_d6aub"]
script = ExtResource("5_er18b")
@ -166,8 +166,8 @@ distance_max = 10000.0
target_var = "target"
[sub_resource type="BBNode" id="BBNode_rpwld"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_dug2k"]
animation_player = SubResource("BBNode_rpwld")
@ -180,8 +180,8 @@ speed_var = "speed"
approach_distance = 100.0
[sub_resource type="BBNode" id="BBNode_aw5jj"]
saved_value = NodePath("AnimationPlayer")
resource_name = "AnimationPlayer"
saved_value = NodePath("AnimationPlayer")
[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_3aihc"]
animation_player = SubResource("BBNode_aw5jj")

View File

@ -38,7 +38,7 @@ Properties
+----------------------------------------------+----------------------------------------------------------+----------+
| :ref:`ValueSource<enum_BBParam_ValueSource>` | :ref:`value_source<class_BBParam_property_value_source>` | ``0`` |
+----------------------------------------------+----------------------------------------------------------+----------+
| String | :ref:`variable<class_BBParam_property_variable>` | |
| StringName | :ref:`variable<class_BBParam_property_variable>` | |
+----------------------------------------------+----------------------------------------------------------+----------+
.. rst-class:: classref-reftable-group
@ -133,12 +133,12 @@ Specifies the source of the value for BBParam. See :ref:`ValueSource<enum_BBPara
.. rst-class:: classref-property
String **variable**
StringName **variable**
.. rst-class:: classref-property-setget
- void **set_variable** **(** String value **)**
- String **get_variable** **(** **)**
- void **set_variable** **(** StringName value **)**
- StringName **get_variable** **(** **)**
Stores the name of a :ref:`Blackboard<class_Blackboard>` variable when :ref:`value_source<class_BBParam_property_value_source>` is set to :ref:`BLACKBOARD_VAR<class_BBParam_constant_BLACKBOARD_VAR>`.

View File

@ -33,27 +33,27 @@ Methods
.. table::
:widths: auto
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`bind_var_to_property<class_Blackboard_method_bind_var_to_property>` **(** String p_name, Object p_object, StringName p_property **)** |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`erase_var<class_Blackboard_method_erase_var>` **(** String p_name **)** |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`bind_var_to_property<class_Blackboard_method_bind_var_to_property>` **(** StringName p_name, Object p_object, StringName p_property **)** |
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`erase_var<class_Blackboard_method_erase_var>` **(** StringName p_name **)** |
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Blackboard<class_Blackboard>` | :ref:`get_parent<class_Blackboard_method_get_parent>` **(** **)** |const| |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| Variant | :ref:`get_var<class_Blackboard_method_get_var>` **(** String p_name, Variant p_default=null, bool p_complain=true **)** |const| |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| bool | :ref:`has_var<class_Blackboard_method_has_var>` **(** String p_name **)** |const| |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| Variant | :ref:`get_var<class_Blackboard_method_get_var>` **(** StringName p_name, Variant p_default=null, bool p_complain=true **)** |const| |
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| bool | :ref:`has_var<class_Blackboard_method_has_var>` **(** StringName p_name **)** |const| |
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`prefetch_nodepath_vars<class_Blackboard_method_prefetch_nodepath_vars>` **(** Node p_node **)** |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`set_parent<class_Blackboard_method_set_parent>` **(** :ref:`Blackboard<class_Blackboard>` p_blackboard **)** |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`set_var<class_Blackboard_method_set_var>` **(** String p_name, Variant p_value **)** |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`set_var<class_Blackboard_method_set_var>` **(** StringName p_name, Variant p_value **)** |
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`Blackboard<class_Blackboard>` | :ref:`top<class_Blackboard_method_top>` **(** **)** |const| |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`unbind_var<class_Blackboard_method_unbind_var>` **(** String p_name **)** |
+-------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`unbind_var<class_Blackboard_method_unbind_var>` **(** StringName p_name **)** |
+-------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
@ -68,7 +68,7 @@ Method Descriptions
.. rst-class:: classref-method
void **bind_var_to_property** **(** String p_name, Object p_object, StringName p_property **)**
void **bind_var_to_property** **(** StringName p_name, Object p_object, StringName p_property **)**
Establish a binding between a variable and the object's property specified by ``p_property`` and ``p_object``. Changes to the variable update the property, and vice versa.
@ -80,7 +80,7 @@ Establish a binding between a variable and the object's property specified by ``
.. rst-class:: classref-method
void **erase_var** **(** String p_name **)**
void **erase_var** **(** StringName p_name **)**
Removes a variable by its name.
@ -104,7 +104,7 @@ Returns a Blackboard that serves as the parent scope for this instance.
.. rst-class:: classref-method
Variant **get_var** **(** String p_name, Variant p_default=null, bool p_complain=true **)** |const|
Variant **get_var** **(** StringName p_name, Variant p_default=null, bool p_complain=true **)** |const|
Returns variable value or ``p_default`` if variable doesn't exist. If ``p_complain`` is ``true``, an error will be printed if variable doesn't exist.
@ -116,7 +116,7 @@ Returns variable value or ``p_default`` if variable doesn't exist. If ``p_compla
.. rst-class:: classref-method
bool **has_var** **(** String p_name **)** |const|
bool **has_var** **(** StringName p_name **)** |const|
Returns ``true`` if the Blackboard contains the ``p_name`` variable, including the parent scopes.
@ -152,7 +152,7 @@ Assigns the parent scope. If a value isn't in the current Blackboard scope, it w
.. rst-class:: classref-method
void **set_var** **(** String p_name, Variant p_value **)**
void **set_var** **(** StringName p_name, Variant p_value **)**
Assigns a value to a Blackboard variable.
@ -176,7 +176,7 @@ Returns the topmost **Blackboard** in the scope chain.
.. rst-class:: classref-method
void **unbind_var** **(** String p_name **)**
void **unbind_var** **(** StringName p_name **)**
Remove binding from a variable.

View File

@ -55,7 +55,7 @@ Constructs a new instance of a :ref:`Blackboard<class_Blackboard>` using this pl
void **populate_blackboard** **(** :ref:`Blackboard<class_Blackboard>` p_blackboard, bool p_overwrite **)**
Populates ``p_blackboard`` with the variables from this plan. If ``p_override`` is ``true``, existing variables with the same names will be overwritten.
Populates ``p_blackboard`` with the variables from this plan. If ``p_overwrite`` is ``true``, existing variables with the same names will be overwritten.
.. |virtual| replace:: :abbr:`virtual (This method should typically be overridden by the user to have any effect.)`
.. |const| replace:: :abbr:`const (This method has no side effects. It doesn't modify any of the instance's member variables.)`

View File

@ -40,7 +40,7 @@ Properties
+-------------------------------------+---------------------------------------------------------------------------+-----------+
| :ref:`BBNode<class_BBNode>` | :ref:`node<class_BTCallMethod_property_node>` | |
+-------------------------------------+---------------------------------------------------------------------------+-----------+
| String | :ref:`result_var<class_BTCallMethod_property_result_var>` | ``""`` |
| StringName | :ref:`result_var<class_BTCallMethod_property_result_var>` | ``&""`` |
+-------------------------------------+---------------------------------------------------------------------------+-----------+
.. rst-class:: classref-section-separator
@ -124,12 +124,12 @@ Specifies the ``Node`` or ``Object`` instance containing the method to be called
.. rst-class:: classref-property
String **result_var** = ``""``
StringName **result_var** = ``&""``
.. rst-class:: classref-property-setget
- void **set_result_var** **(** String value **)**
- String **get_result_var** **(** **)**
- void **set_result_var** **(** StringName value **)**
- StringName **get_result_var** **(** **)**
if non-empty, assign the result of the method call to the blackboard variable specified by this property.

View File

@ -31,9 +31,9 @@ Properties
.. table::
:widths: auto
+--------+---------------------------------------------------------+--------+
| String | :ref:`variable<class_BTCheckTrigger_property_variable>` | ``""`` |
+--------+---------------------------------------------------------+--------+
+------------+---------------------------------------------------------+---------+
| StringName | :ref:`variable<class_BTCheckTrigger_property_variable>` | ``&""`` |
+------------+---------------------------------------------------------+---------+
.. rst-class:: classref-section-separator
@ -48,12 +48,12 @@ Property Descriptions
.. rst-class:: classref-property
String **variable** = ``""``
StringName **variable** = ``&""``
.. rst-class:: classref-property-setget
- void **set_variable** **(** String value **)**
- String **get_variable** **(** **)**
- void **set_variable** **(** StringName value **)**
- StringName **get_variable** **(** **)**
A boolean variable on the blackboard used as a trigger. See also :ref:`BTTask.blackboard<class_BTTask_property_blackboard>`.

View File

@ -29,13 +29,13 @@ Properties
.. table::
:widths: auto
+-----------------------------------------------+---------------------------------------------------------+--------+
+-----------------------------------------------+---------------------------------------------------------+---------+
| :ref:`CheckType<enum_LimboUtility_CheckType>` | :ref:`check_type<class_BTCheckVar_property_check_type>` | ``0`` |
+-----------------------------------------------+---------------------------------------------------------+--------+
+-----------------------------------------------+---------------------------------------------------------+---------+
| :ref:`BBVariant<class_BBVariant>` | :ref:`value<class_BTCheckVar_property_value>` | |
+-----------------------------------------------+---------------------------------------------------------+--------+
| String | :ref:`variable<class_BTCheckVar_property_variable>` | ``""`` |
+-----------------------------------------------+---------------------------------------------------------+--------+
+-----------------------------------------------+---------------------------------------------------------+---------+
| StringName | :ref:`variable<class_BTCheckVar_property_variable>` | ``&""`` |
+-----------------------------------------------+---------------------------------------------------------+---------+
.. rst-class:: classref-section-separator
@ -84,12 +84,12 @@ A parameter that specifies the value against which the :ref:`variable<class_BTCh
.. rst-class:: classref-property
String **variable** = ``""``
StringName **variable** = ``&""``
.. rst-class:: classref-property-setget
- void **set_variable** **(** String value **)**
- String **get_variable** **(** **)**
- void **set_variable** **(** StringName value **)**
- StringName **get_variable** **(** **)**
The name of the variable to check its value.

View File

@ -35,17 +35,17 @@ Properties
.. table::
:widths: auto
+--------+-------------------------------------------------------------------------+-----------+
| String | :ref:`cooldown_state_var<class_BTCooldown_property_cooldown_state_var>` | ``""`` |
+--------+-------------------------------------------------------------------------+-----------+
+------------+-------------------------------------------------------------------------+-----------+
| StringName | :ref:`cooldown_state_var<class_BTCooldown_property_cooldown_state_var>` | ``&""`` |
+------------+-------------------------------------------------------------------------+-----------+
| float | :ref:`duration<class_BTCooldown_property_duration>` | ``10.0`` |
+--------+-------------------------------------------------------------------------+-----------+
+------------+-------------------------------------------------------------------------+-----------+
| bool | :ref:`process_pause<class_BTCooldown_property_process_pause>` | ``false`` |
+--------+-------------------------------------------------------------------------+-----------+
+------------+-------------------------------------------------------------------------+-----------+
| bool | :ref:`start_cooled<class_BTCooldown_property_start_cooled>` | ``false`` |
+--------+-------------------------------------------------------------------------+-----------+
+------------+-------------------------------------------------------------------------+-----------+
| bool | :ref:`trigger_on_failure<class_BTCooldown_property_trigger_on_failure>` | ``false`` |
+--------+-------------------------------------------------------------------------+-----------+
+------------+-------------------------------------------------------------------------+-----------+
.. rst-class:: classref-section-separator
@ -60,12 +60,12 @@ Property Descriptions
.. rst-class:: classref-property
String **cooldown_state_var** = ``""``
StringName **cooldown_state_var** = ``&""``
.. rst-class:: classref-property-setget
- void **set_cooldown_state_var** **(** String value **)**
- String **get_cooldown_state_var** **(** **)**
- void **set_cooldown_state_var** **(** StringName value **)**
- StringName **get_cooldown_state_var** **(** **)**
A boolean variable used to store the cooldown state in the :ref:`Blackboard<class_Blackboard>`. If left empty, the variable will be automatically generated and assigned.

View File

@ -42,7 +42,7 @@ Properties
+-------------------------------------+-------------------------------------------------------------------------------------+-------------------------+
| :ref:`BBNode<class_BBNode>` | :ref:`node<class_BTEvaluateExpression_property_node>` | |
+-------------------------------------+-------------------------------------------------------------------------------------+-------------------------+
| String | :ref:`result_var<class_BTEvaluateExpression_property_result_var>` | ``""`` |
| StringName | :ref:`result_var<class_BTEvaluateExpression_property_result_var>` | ``&""`` |
+-------------------------------------+-------------------------------------------------------------------------------------+-------------------------+
.. rst-class:: classref-reftable-group
@ -161,12 +161,12 @@ Specifies the ``Node`` or ``Object`` instance containing the method to be called
.. rst-class:: classref-property
String **result_var** = ``""``
StringName **result_var** = ``&""``
.. rst-class:: classref-property-setget
- void **set_result_var** **(** String value **)**
- String **get_result_var** **(** **)**
- void **set_result_var** **(** StringName value **)**
- StringName **get_result_var** **(** **)**
if non-empty, assign the result of the method call to the blackboard variable specified by this property.

View File

@ -35,11 +35,11 @@ Properties
.. table::
:widths: auto
+--------+------------------------------------------------------+--------+
| String | :ref:`array_var<class_BTForEach_property_array_var>` | ``""`` |
+--------+------------------------------------------------------+--------+
| String | :ref:`save_var<class_BTForEach_property_save_var>` | ``""`` |
+--------+------------------------------------------------------+--------+
+------------+------------------------------------------------------+---------+
| StringName | :ref:`array_var<class_BTForEach_property_array_var>` | ``&""`` |
+------------+------------------------------------------------------+---------+
| StringName | :ref:`save_var<class_BTForEach_property_save_var>` | ``&""`` |
+------------+------------------------------------------------------+---------+
.. rst-class:: classref-section-separator
@ -54,12 +54,12 @@ Property Descriptions
.. rst-class:: classref-property
String **array_var** = ``""``
StringName **array_var** = ``&""``
.. rst-class:: classref-property-setget
- void **set_array_var** **(** String value **)**
- String **get_array_var** **(** **)**
- void **set_array_var** **(** StringName value **)**
- StringName **get_array_var** **(** **)**
A variable within the :ref:`Blackboard<class_Blackboard>` that holds an ``Array``, which is used for the iteration process.
@ -71,12 +71,12 @@ A variable within the :ref:`Blackboard<class_Blackboard>` that holds an ``Array`
.. rst-class:: classref-property
String **save_var** = ``""``
StringName **save_var** = ``&""``
.. rst-class:: classref-property-setget
- void **set_save_var** **(** String value **)**
- String **get_save_var** **(** **)**
- void **set_save_var** **(** StringName value **)**
- StringName **get_save_var** **(** **)**
A :ref:`Blackboard<class_Blackboard>` variable used to store an element of the array referenced by :ref:`array_var<class_BTForEach_property_array_var>`.

View File

@ -31,13 +31,13 @@ Properties
.. table::
:widths: auto
+-----------------------------------------------+-----------------------------------------------------+--------+
+-----------------------------------------------+-----------------------------------------------------+---------+
| :ref:`Operation<enum_LimboUtility_Operation>` | :ref:`operation<class_BTSetVar_property_operation>` | ``0`` |
+-----------------------------------------------+-----------------------------------------------------+--------+
+-----------------------------------------------+-----------------------------------------------------+---------+
| :ref:`BBVariant<class_BBVariant>` | :ref:`value<class_BTSetVar_property_value>` | |
+-----------------------------------------------+-----------------------------------------------------+--------+
| String | :ref:`variable<class_BTSetVar_property_variable>` | ``""`` |
+-----------------------------------------------+-----------------------------------------------------+--------+
+-----------------------------------------------+-----------------------------------------------------+---------+
| StringName | :ref:`variable<class_BTSetVar_property_variable>` | ``&""`` |
+-----------------------------------------------+-----------------------------------------------------+---------+
.. rst-class:: classref-section-separator
@ -88,12 +88,12 @@ Parameter that specifies the value to be assigned to the variable.
.. rst-class:: classref-property
String **variable** = ``""``
StringName **variable** = ``&""``
.. rst-class:: classref-property-setget
- void **set_variable** **(** String value **)**
- String **get_variable** **(** **)**
- void **set_variable** **(** StringName value **)**
- StringName **get_variable** **(** **)**
Name of the variable to which the value will be assigned.

View File

@ -29,13 +29,13 @@ Properties
.. table::
:widths: auto
+-----------------------------------------+------------------------------------------------------------+---------------+
+-----------------------------------------+------------------------------------------------------------+----------------+
| :ref:`BehaviorTree<class_BehaviorTree>` | :ref:`behavior_tree<class_BTState_property_behavior_tree>` | |
+-----------------------------------------+------------------------------------------------------------+---------------+
| String | :ref:`failure_event<class_BTState_property_failure_event>` | ``"failure"`` |
+-----------------------------------------+------------------------------------------------------------+---------------+
| String | :ref:`success_event<class_BTState_property_success_event>` | ``"success"`` |
+-----------------------------------------+------------------------------------------------------------+---------------+
+-----------------------------------------+------------------------------------------------------------+----------------+
| StringName | :ref:`failure_event<class_BTState_property_failure_event>` | ``&"failure"`` |
+-----------------------------------------+------------------------------------------------------------+----------------+
| StringName | :ref:`success_event<class_BTState_property_success_event>` | ``&"success"`` |
+-----------------------------------------+------------------------------------------------------------+----------------+
.. rst-class:: classref-reftable-group
@ -79,12 +79,12 @@ A :ref:`BehaviorTree<class_BehaviorTree>` resource that defines state behavior.
.. rst-class:: classref-property
String **failure_event** = ``"failure"``
StringName **failure_event** = ``&"failure"``
.. rst-class:: classref-property-setget
- void **set_failure_event** **(** String value **)**
- String **get_failure_event** **(** **)**
- void **set_failure_event** **(** StringName value **)**
- StringName **get_failure_event** **(** **)**
HSM event that will be dispatched when the behavior tree results in ``FAILURE``. See :ref:`LimboState.dispatch<class_LimboState_method_dispatch>`.
@ -96,12 +96,12 @@ HSM event that will be dispatched when the behavior tree results in ``FAILURE``.
.. rst-class:: classref-property
String **success_event** = ``"success"``
StringName **success_event** = ``&"success"``
.. rst-class:: classref-property-setget
- void **set_success_event** **(** String value **)**
- String **get_success_event** **(** **)**
- void **set_success_event** **(** StringName value **)**
- StringName **get_success_event** **(** **)**
HSM event that will be dispatched when the behavior tree results in ``SUCCESS``. See :ref:`LimboState.dispatch<class_LimboState_method_dispatch>`.

View File

@ -45,19 +45,19 @@ Methods
.. table::
:widths: auto
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`add_transition<class_LimboHSM_method_add_transition>` **(** :ref:`LimboState<class_LimboState>` p_from_state, :ref:`LimboState<class_LimboState>` p_to_state, String p_event **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`add_transition<class_LimboHSM_method_add_transition>` **(** :ref:`LimboState<class_LimboState>` p_from_state, :ref:`LimboState<class_LimboState>` p_to_state, StringName p_event **)** |
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`get_active_state<class_LimboHSM_method_get_active_state>` **(** **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`get_leaf_state<class_LimboHSM_method_get_leaf_state>` **(** **)** |const| |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`initialize<class_LimboHSM_method_initialize>` **(** Node p_agent, :ref:`Blackboard<class_Blackboard>` p_parent_scope=null **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`set_active<class_LimboHSM_method_set_active>` **(** bool p_active **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`update<class_LimboHSM_method_update>` **(** float p_delta **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
@ -183,7 +183,7 @@ Method Descriptions
.. rst-class:: classref-method
void **add_transition** **(** :ref:`LimboState<class_LimboState>` p_from_state, :ref:`LimboState<class_LimboState>` p_to_state, String p_event **)**
void **add_transition** **(** :ref:`LimboState<class_LimboState>` p_from_state, :ref:`LimboState<class_LimboState>` p_to_state, StringName p_event **)**
Establishes a transition from one state to another when ``p_event`` is dispatched. Both ``p_from_state`` and ``p_to_state`` must be immediate children of this state.

View File

@ -36,7 +36,7 @@ Properties
:widths: auto
+---------------------------------------------+-------------------------------------------------------------------+
| String | :ref:`EVENT_FINISHED<class_LimboState_property_EVENT_FINISHED>` |
| StringName | :ref:`EVENT_FINISHED<class_LimboState_property_EVENT_FINISHED>` |
+---------------------------------------------+-------------------------------------------------------------------+
| Node | :ref:`agent<class_LimboState_property_agent>` |
+---------------------------------------------+-------------------------------------------------------------------+
@ -53,35 +53,35 @@ Methods
.. table::
:widths: auto
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`_enter<class_LimboState_private_method__enter>` **(** **)** |virtual| |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`_exit<class_LimboState_private_method__exit>` **(** **)** |virtual| |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`_setup<class_LimboState_private_method__setup>` **(** **)** |virtual| |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`_update<class_LimboState_private_method__update>` **(** float p_delta **)** |virtual| |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
| void | :ref:`add_event_handler<class_LimboState_method_add_event_handler>` **(** String p_event, Callable p_handler **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`add_event_handler<class_LimboState_method_add_event_handler>` **(** StringName p_event, Callable p_handler **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`call_on_enter<class_LimboState_method_call_on_enter>` **(** Callable p_callable **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`call_on_exit<class_LimboState_method_call_on_exit>` **(** Callable p_callable **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`call_on_update<class_LimboState_method_call_on_update>` **(** Callable p_callable **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`clear_guard<class_LimboState_method_clear_guard>` **(** **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
| bool | :ref:`dispatch<class_LimboState_method_dispatch>` **(** String p_event, Variant p_cargo=null **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| bool | :ref:`dispatch<class_LimboState_method_dispatch>` **(** StringName p_event, Variant p_cargo=null **)** |
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`get_root<class_LimboState_method_get_root>` **(** **)** |const| |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| bool | :ref:`is_active<class_LimboState_method_is_active>` **(** **)** |const| |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| :ref:`LimboState<class_LimboState>` | :ref:`named<class_LimboState_method_named>` **(** String p_name **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
| void | :ref:`set_guard<class_LimboState_method_set_guard>` **(** Callable p_guard_callable **)** |
+-------------------------------------+--------------------------------------------------------------------------------------------------------------------+
+-------------------------------------+------------------------------------------------------------------------------------------------------------------------+
.. rst-class:: classref-section-separator
@ -149,11 +149,11 @@ Property Descriptions
.. rst-class:: classref-property
String **EVENT_FINISHED**
StringName **EVENT_FINISHED**
.. rst-class:: classref-property-setget
- String **event_finished** **(** **)**
- StringName **event_finished** **(** **)**
A commonly used event that indicates that the state has finished its work.
@ -268,7 +268,7 @@ Called during the update. Implement your state's behavior with this method.
.. rst-class:: classref-method
void **add_event_handler** **(** String p_event, Callable p_handler **)**
void **add_event_handler** **(** StringName p_event, Callable p_handler **)**
Registers a ``p_handler`` to be called when ``p_event`` is dispatched.
@ -328,7 +328,7 @@ Clears the guard function, removing the ``Callable`` previously set by :ref:`set
.. rst-class:: classref-method
bool **dispatch** **(** String p_event, Variant p_cargo=null **)**
bool **dispatch** **(** StringName p_event, Variant p_cargo=null **)**
Recursively dispatches a state machine event named ``p_event`` with an optional argument ``p_cargo``. Returns ``true`` if the event was consumed.

View File

@ -40,7 +40,7 @@ and point it to the proper node in the :ref:`BTPlayer<class_BTPlayer>` blackboar
extends BTCondition
@export var shape_var: String = "shape_cast"
@export var shape_var: StringName = &"shape_cast"
func _tick(delta) -> Status:
var shape_cast: ShapeCast3D = blackboard.get_var(shape_var)

View File

@ -110,7 +110,7 @@ Example 2: InRange condition
@export var distance_min: float
@export var distance_max: float
@export var target_var := "target"
@export var target_var: StringName = &"target"
var _min_distance_squared: float
var _max_distance_squared: float

View File

@ -76,7 +76,7 @@ To register a transition and associate it with a specific event, you can use the
.. code:: gdscript
hsm.add_transition(idle_state, move_state, "movement_started")
hsm.add_transition(idle_state, move_state, &"movement_started")
In this example, we're registering a transition from the ``idle_state`` to the ``move_state``
when the ``movement_started`` event is dispatched.
@ -85,7 +85,7 @@ A transition can be also associated with no particular starting state:
.. code:: gdscript
hsm.add_transition(hsm.ANYSTATE, move_state, "movement_started")
hsm.add_transition(hsm.ANYSTATE, move_state, &"movement_started")
**Events are dispatched** with the :ref:`LimboState.dispatch<class_LimboState_method_dispatch>` method.
It's important to note that this method can be called from anywhere in the state machine hierarchy and outside of it.
@ -187,8 +187,8 @@ Let's illustrate this with a practical code example:
hsm.add_child(idle_state)
hsm.add_child(move_state)
hsm.add_transition(idle_state, move_state, "movement_started")
hsm.add_transition(move_state, idle_state, "movement_ended")
hsm.add_transition(idle_state, move_state, &"movement_started")
hsm.add_transition(move_state, idle_state, &"movement_ended")
hsm.initialize(self)
hsm.set_active(true)
@ -198,7 +198,7 @@ Let's illustrate this with a practical code example:
var dir: Vector2 = Input.get_vector(
&"ui_left", &"ui_right", &"ui_up", &"ui_down")
if dir.is_zero_approx():
hsm.dispatch("movement_started")
hsm.dispatch(&"movement_started")
func _move_update(delta: float) -> void:
@ -208,4 +208,4 @@ Let's illustrate this with a practical code example:
velocity = desired_velocity
move_and_slide()
if desired_velocity.is_zero_approx():
hsm.dispatch("movement_ended")
hsm.dispatch(&"movement_ended")

View File

@ -19,7 +19,7 @@ Here's an example of how you can interact with the :ref:`Blackboard<class_Blackb
.. code:: gdscript
@export var speed_var: String = "speed"
@export var speed_var: StringName = &"speed"
func _tick(delta: float) -> Status:
# Set the value of the "speed" variable:
@ -114,7 +114,7 @@ In the following example, we have a group of agents, and we want to share a comm
extends BTAction
@export var group_target_var: String = "group_target"
@export var group_target_var: StringName = &"group_target"
func _tick(delta: float) -> Status:
if not blackboard.has_var(group_target_var):

View File

@ -33,7 +33,7 @@
<member name="value_source" type="int" setter="set_value_source" getter="get_value_source" enum="BBParam.ValueSource" default="0">
Specifies the source of the value for BBParam. See [enum ValueSource].
</member>
<member name="variable" type="String" setter="set_variable" getter="get_variable">
<member name="variable" type="StringName" setter="set_variable" getter="get_variable">
Stores the name of a [Blackboard] variable when [member value_source] is set to [constant BLACKBOARD_VAR].
</member>
</members>

View File

@ -22,7 +22,7 @@
<member name="node" type="BBNode" setter="set_node_param" getter="get_node_param">
Specifies the [Node] or [Object] instance containing the method to be called.
</member>
<member name="result_var" type="String" setter="set_result_var" getter="get_result_var" default="&quot;&quot;">
<member name="result_var" type="StringName" setter="set_result_var" getter="get_result_var" default="&amp;&quot;&quot;">
if non-empty, assign the result of the method call to the blackboard variable specified by this property.
</member>
</members>

View File

@ -10,7 +10,7 @@
<tutorials>
</tutorials>
<members>
<member name="variable" type="String" setter="set_variable" getter="get_variable" default="&quot;&quot;">
<member name="variable" type="StringName" setter="set_variable" getter="get_variable" default="&amp;&quot;&quot;">
A boolean variable on the blackboard used as a trigger. See also [member BTTask.blackboard].
If variable's value is [code]true[/code], [BTCheckTrigger] will switch it to [code]false[/code] and return [code]SUCCESS[/code].
If variable's value is [code]false[/code], [BTCheckTrigger] will return [code]FAILURE[/code].

View File

@ -15,7 +15,7 @@
<member name="value" type="BBVariant" setter="set_value" getter="get_value">
A parameter that specifies the value against which the [member variable] will be compared.
</member>
<member name="variable" type="String" setter="set_variable" getter="get_variable" default="&quot;&quot;">
<member name="variable" type="StringName" setter="set_variable" getter="get_variable" default="&amp;&quot;&quot;">
The name of the variable to check its value.
</member>
</members>

View File

@ -12,7 +12,7 @@
<tutorials>
</tutorials>
<members>
<member name="cooldown_state_var" type="String" setter="set_cooldown_state_var" getter="get_cooldown_state_var" default="&quot;&quot;">
<member name="cooldown_state_var" type="StringName" setter="set_cooldown_state_var" getter="get_cooldown_state_var" default="&amp;&quot;&quot;">
A boolean variable used to store the cooldown state in the [Blackboard]. If left empty, the variable will be automatically generated and assigned.
If the variable's value is set to [code]true[/code], it indicates that the cooldown is activated. This feature is useful for checking the cooldown state from other parts of the tree or sharing it among different sections of the [BehaviorTree].
</member>

View File

@ -36,7 +36,7 @@
<member name="node" type="BBNode" setter="set_node_param" getter="get_node_param">
Specifies the [Node] or [Object] instance containing the method to be called.
</member>
<member name="result_var" type="String" setter="set_result_var" getter="get_result_var" default="&quot;&quot;">
<member name="result_var" type="StringName" setter="set_result_var" getter="get_result_var" default="&amp;&quot;&quot;">
if non-empty, assign the result of the method call to the blackboard variable specified by this property.
</member>
</members>

View File

@ -12,10 +12,10 @@
<tutorials>
</tutorials>
<members>
<member name="array_var" type="String" setter="set_array_var" getter="get_array_var" default="&quot;&quot;">
<member name="array_var" type="StringName" setter="set_array_var" getter="get_array_var" default="&amp;&quot;&quot;">
A variable within the [Blackboard] that holds an [Array], which is used for the iteration process.
</member>
<member name="save_var" type="String" setter="set_save_var" getter="get_save_var" default="&quot;&quot;">
<member name="save_var" type="StringName" setter="set_save_var" getter="get_save_var" default="&amp;&quot;&quot;">
A [Blackboard] variable used to store an element of the array referenced by [member array_var].
</member>
</members>

View File

@ -17,7 +17,7 @@
<member name="value" type="BBVariant" setter="set_value" getter="get_value">
Parameter that specifies the value to be assigned to the variable.
</member>
<member name="variable" type="String" setter="set_variable" getter="get_variable" default="&quot;&quot;">
<member name="variable" type="StringName" setter="set_variable" getter="get_variable" default="&amp;&quot;&quot;">
Name of the variable to which the value will be assigned.
</member>
</members>

View File

@ -20,10 +20,10 @@
<member name="behavior_tree" type="BehaviorTree" setter="set_behavior_tree" getter="get_behavior_tree">
A [BehaviorTree] resource that defines state behavior.
</member>
<member name="failure_event" type="String" setter="set_failure_event" getter="get_failure_event" default="&quot;failure&quot;">
<member name="failure_event" type="StringName" setter="set_failure_event" getter="get_failure_event" default="&amp;&quot;failure&quot;">
HSM event that will be dispatched when the behavior tree results in [code]FAILURE[/code]. See [method LimboState.dispatch].
</member>
<member name="success_event" type="String" setter="set_success_event" getter="get_success_event" default="&quot;success&quot;">
<member name="success_event" type="StringName" setter="set_success_event" getter="get_success_event" default="&amp;&quot;success&quot;">
HSM event that will be dispatched when the behavior tree results in [code]SUCCESS[/code]. See [method LimboState.dispatch].
</member>
</members>

View File

@ -13,7 +13,7 @@
<methods>
<method name="bind_var_to_property">
<return type="void" />
<param index="0" name="p_name" type="String" />
<param index="0" name="p_name" type="StringName" />
<param index="1" name="p_object" type="Object" />
<param index="2" name="p_property" type="StringName" />
<description>
@ -22,7 +22,7 @@
</method>
<method name="erase_var">
<return type="void" />
<param index="0" name="p_name" type="String" />
<param index="0" name="p_name" type="StringName" />
<description>
Removes a variable by its name.
</description>
@ -35,7 +35,7 @@
</method>
<method name="get_var" qualifiers="const">
<return type="Variant" />
<param index="0" name="p_name" type="String" />
<param index="0" name="p_name" type="StringName" />
<param index="1" name="p_default" type="Variant" default="null" />
<param index="2" name="p_complain" type="bool" default="true" />
<description>
@ -44,7 +44,7 @@
</method>
<method name="has_var" qualifiers="const">
<return type="bool" />
<param index="0" name="p_name" type="String" />
<param index="0" name="p_name" type="StringName" />
<description>
Returns [code]true[/code] if the Blackboard contains the [param p_name] variable, including the parent scopes.
</description>
@ -65,7 +65,7 @@
</method>
<method name="set_var">
<return type="void" />
<param index="0" name="p_name" type="String" />
<param index="0" name="p_name" type="StringName" />
<param index="1" name="p_value" type="Variant" />
<description>
Assigns a value to a Blackboard variable.
@ -79,7 +79,7 @@
</method>
<method name="unbind_var">
<return type="void" />
<param index="0" name="p_name" type="String" />
<param index="0" name="p_name" type="StringName" />
<description>
Remove binding from a variable.
</description>

View File

@ -19,7 +19,7 @@
<param index="0" name="p_blackboard" type="Blackboard" />
<param index="1" name="p_overwrite" type="bool" />
<description>
Populates [param p_blackboard] with the variables from this plan. If [param p_override] is [code]true[/code], existing variables with the same names will be overwritten.
Populates [param p_blackboard] with the variables from this plan. If [param p_overwrite] is [code]true[/code], existing variables with the same names will be overwritten.
</description>
</method>
</methods>

View File

@ -13,7 +13,7 @@
<return type="void" />
<param index="0" name="p_from_state" type="LimboState" />
<param index="1" name="p_to_state" type="LimboState" />
<param index="2" name="p_event" type="String" />
<param index="2" name="p_event" type="StringName" />
<description>
Establishes a transition from one state to another when [param p_event] is dispatched. Both [param p_from_state] and [param p_to_state] must be immediate children of this state.
</description>

View File

@ -38,7 +38,7 @@
</method>
<method name="add_event_handler">
<return type="void" />
<param index="0" name="p_event" type="String" />
<param index="0" name="p_event" type="StringName" />
<param index="1" name="p_handler" type="Callable" />
<description>
Registers a [param p_handler] to be called when [param p_event] is dispatched.
@ -73,7 +73,7 @@
</method>
<method name="dispatch">
<return type="bool" />
<param index="0" name="p_event" type="String" />
<param index="0" name="p_event" type="StringName" />
<param index="1" name="p_cargo" type="Variant" default="null" />
<description>
Recursively dispatches a state machine event named [param p_event] with an optional argument [param p_cargo]. Returns [code]true[/code] if the event was consumed.
@ -108,7 +108,7 @@
</method>
</methods>
<members>
<member name="EVENT_FINISHED" type="String" setter="" getter="event_finished">
<member name="EVENT_FINISHED" type="StringName" setter="" getter="event_finished">
A commonly used event that indicates that the state has finished its work.
</member>
<member name="agent" type="Node" setter="set_agent" getter="get_agent">

View File

@ -48,25 +48,25 @@ void BlackboardPlanEditor::_add_var() {
ERR_FAIL_NULL(plan);
int suffix = 1;
String name = default_var_name;
while (plan->has_var(name)) {
StringName var_name = default_var_name;
while (plan->has_var(var_name)) {
suffix += 1;
name = default_var_name + itos(suffix);
var_name = String(default_var_name) + itos(suffix);
}
BBVariable var(Variant::Type::FLOAT);
plan->add_var(name, var);
plan->add_var(var_name, var);
_refresh();
}
void BlackboardPlanEditor::_trash_var(int p_index) {
ERR_FAIL_NULL(plan);
String var_name = plan->get_var_by_index(p_index).first;
StringName var_name = plan->get_var_by_index(p_index).first;
plan->remove_var(var_name);
_refresh();
}
void BlackboardPlanEditor::_rename_var(const String &p_new_name, int p_index) {
void BlackboardPlanEditor::_rename_var(const StringName &p_new_name, int p_index) {
ERR_FAIL_NULL(plan);
LineEdit *name_edit = _get_name_edit(p_index);
@ -127,8 +127,8 @@ void BlackboardPlanEditor::edit_plan(const Ref<BlackboardPlan> &p_plan) {
_refresh();
}
void BlackboardPlanEditor::set_next_var_name(const String &p_name) {
if (p_name.is_valid_identifier()) {
void BlackboardPlanEditor::set_next_var_name(const StringName &p_name) {
if (String(p_name).is_valid_identifier()) {
default_var_name = p_name;
}
}

View File

@ -56,7 +56,7 @@ private:
int drag_index = -1;
Ref<BlackboardPlan> plan;
String default_var_name;
StringName default_var_name;
VBoxContainer *rows_vbox;
Button *add_var_tool;
@ -69,7 +69,7 @@ private:
void _add_var();
void _trash_var(int p_index);
void _rename_var(const String &p_new_name, int p_index);
void _rename_var(const StringName &p_new_name, int p_index);
void _change_var_type(Variant::Type p_new_type, int p_index);
void _change_var_hint(PropertyHint p_new_hint, int p_index);
void _change_var_hint_string(const String &p_new_hint_string, int p_index);
@ -95,7 +95,7 @@ public:
_FORCE_INLINE_ static BlackboardPlanEditor *get_singleton() { return singleton; }
void edit_plan(const Ref<BlackboardPlan> &p_plan);
void set_next_var_name(const String &p_name);
void set_next_var_name(const StringName &p_name);
BlackboardPlanEditor();
};

View File

@ -200,7 +200,7 @@ bool EditorInspectorPluginVariableName::parse_property(Object *p_object, const V
#elif LIMBOAI_GDEXTENSION
bool EditorInspectorPluginVariableName::_parse_property(Object *p_object, const Variant::Type p_type, const String &p_path, const PropertyHint p_hint, const String &p_hint_text, const BitField<PropertyUsageFlags> p_usage, const bool p_wide) {
#endif
if (p_type != Variant::Type::STRING || !(p_path.ends_with("_var") || p_path.ends_with("variable"))) {
if (!(p_type == Variant::Type::STRING_NAME || p_type == Variant::Type::STRING) || !(p_path.ends_with("_var") || p_path.ends_with("variable"))) {
return false;
}

View File

@ -1,7 +1,7 @@
/**
* limbo_hsm.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -100,11 +100,11 @@ void LimboHSM::update(double p_delta) {
_update(p_delta);
}
void LimboHSM::add_transition(LimboState *p_from_state, LimboState *p_to_state, const String &p_event) {
void LimboHSM::add_transition(LimboState *p_from_state, LimboState *p_to_state, const StringName &p_event) {
ERR_FAIL_COND_MSG(p_from_state != nullptr && p_from_state->get_parent() != this, "LimboHSM: Unable to add a transition from a state that is not an immediate child of mine.");
ERR_FAIL_COND_MSG(p_to_state == nullptr, "LimboHSM: Unable to add a transition to a null state.");
ERR_FAIL_COND_MSG(p_to_state->get_parent() != this, "LimboHSM: Unable to add a transition to a state that is not an immediate child of mine.");
ERR_FAIL_COND_MSG(p_event.is_empty(), "LimboHSM: Failed to add transition due to empty event string.");
ERR_FAIL_COND_MSG(p_event == StringName(), "LimboHSM: Failed to add transition due to empty event string.");
uint64_t key = _get_transition_key(p_from_state, p_event);
transitions[key] = Object::cast_to<LimboState>(p_to_state);
@ -127,8 +127,8 @@ void LimboHSM::set_initial_state(LimboState *p_state) {
initial_state = Object::cast_to<LimboState>(p_state);
}
bool LimboHSM::_dispatch(const String &p_event, const Variant &p_cargo) {
ERR_FAIL_COND_V(p_event.is_empty(), false);
bool LimboHSM::_dispatch(const StringName &p_event, const Variant &p_cargo) {
ERR_FAIL_COND_V(p_event == StringName(), false);
bool event_consumed = false;

View File

@ -1,7 +1,7 @@
/**
* limbo_hsm.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -30,9 +30,11 @@ private:
LimboState *active_state;
HashMap<uint64_t, LimboState *> transitions;
_FORCE_INLINE_ uint64_t _get_transition_key(LimboState *p_from_state, const String &p_event) {
_FORCE_INLINE_ uint64_t _get_transition_key(LimboState *p_from_state, const StringName &p_event) {
uint64_t key = hash_djb2_one_64(Variant::OBJECT);
key = hash_djb2_one_64(Variant(p_from_state).hash(), key);
if (p_from_state != nullptr) {
key = hash_djb2_one_64(hash_one_uint64(hash_make_uint64_t(p_from_state)), key);
}
key = hash_djb2_one_64(p_event.hash(), key);
return key;
}
@ -43,7 +45,7 @@ protected:
void _notification(int p_what);
virtual void _initialize(Node *p_agent, const Ref<Blackboard> &p_blackboard) override;
virtual bool _dispatch(const String &p_event, const Variant &p_cargo = Variant()) override;
virtual bool _dispatch(const StringName &p_event, const Variant &p_cargo = Variant()) override;
virtual void _enter() override;
virtual void _exit() override;
@ -65,7 +67,7 @@ public:
virtual void initialize(Node *p_agent, const Ref<Blackboard> &p_parent_scope = nullptr);
void update(double p_delta);
void add_transition(LimboState *p_from_state, LimboState *p_to_state, const String &p_event);
void add_transition(LimboState *p_from_state, LimboState *p_to_state, const StringName &p_event);
LimboState *anystate() const { return nullptr; }
LimboHSM();

View File

@ -1,7 +1,7 @@
/**
* limbo_state.cpp
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -34,7 +34,7 @@ LimboState *LimboState::get_root() const {
return const_cast<LimboState *>(state);
}
LimboState *LimboState::named(String p_name) {
LimboState *LimboState::named(const String &p_name) {
set_name(p_name);
return this;
}
@ -80,8 +80,8 @@ void LimboState::_initialize(Node *p_agent, const Ref<Blackboard> &p_blackboard)
_setup();
}
bool LimboState::_dispatch(const String &p_event, const Variant &p_cargo) {
ERR_FAIL_COND_V(p_event.is_empty(), false);
bool LimboState::_dispatch(const StringName &p_event, const Variant &p_cargo) {
ERR_FAIL_COND_V(p_event == StringName(), false);
if (handlers.size() > 0 && handlers.has(p_event)) {
Variant ret;
@ -120,13 +120,13 @@ bool LimboState::_dispatch(const String &p_event, const Variant &p_cargo) {
return false;
}
void LimboState::add_event_handler(const String &p_event, const Callable &p_handler) {
ERR_FAIL_COND(p_event.is_empty());
void LimboState::add_event_handler(const StringName &p_event, const Callable &p_handler) {
ERR_FAIL_COND(p_event == StringName());
ERR_FAIL_COND(!p_handler.is_valid());
handlers.insert(p_event, p_handler);
}
bool LimboState::dispatch(const String &p_event, const Variant &p_cargo) {
bool LimboState::dispatch(const StringName &p_event, const Variant &p_cargo) {
return get_root()->_dispatch(p_event, p_cargo);
}
@ -196,7 +196,7 @@ void LimboState::_bind_methods() {
// TODO: Registering virtual functions is not available in godot-cpp...
#endif
ADD_PROPERTY(PropertyInfo(Variant::STRING, "EVENT_FINISHED", PROPERTY_HINT_NONE, "", 0), "", "event_finished");
ADD_PROPERTY(PropertyInfo(Variant::STRING_NAME, "EVENT_FINISHED", PROPERTY_HINT_NONE, "", 0), "", "event_finished");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "agent", PROPERTY_HINT_RESOURCE_TYPE, "Node", 0), "set_agent", "get_agent");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "blackboard", PROPERTY_HINT_RESOURCE_TYPE, "Blackboard", 0), "", "get_blackboard");
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "blackboard_plan", PROPERTY_HINT_RESOURCE_TYPE, "BlackboardPlan", PROPERTY_USAGE_DEFAULT), "set_blackboard_plan", "get_blackboard_plan");

View File

@ -1,7 +1,7 @@
/**
* limbo_state.h
* =============================================================================
* Copyright 2021-2023 Serhii Snitsaruk
* Copyright 2021-2024 Serhii Snitsaruk
*
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
@ -41,7 +41,7 @@ private:
Ref<BlackboardPlan> blackboard_plan;
Node *agent;
Ref<Blackboard> blackboard;
HashMap<String, Callable> handlers;
HashMap<StringName, Callable> handlers;
Callable guard_callable;
protected:
@ -54,7 +54,7 @@ protected:
void _notification(int p_what);
virtual void _initialize(Node *p_agent, const Ref<Blackboard> &p_blackboard);
virtual bool _dispatch(const String &p_event, const Variant &p_cargo = Variant());
virtual bool _dispatch(const StringName &p_event, const Variant &p_cargo = Variant());
virtual void _setup();
virtual void _enter();
@ -69,7 +69,7 @@ protected:
#endif // LIMBOAI_MODULE
public:
void set_blackboard_plan(const Ref<BlackboardPlan> p_plan) { blackboard_plan = p_plan; }
void set_blackboard_plan(const Ref<BlackboardPlan> &p_plan) { blackboard_plan = p_plan; }
Ref<BlackboardPlan> get_blackboard_plan() const { return blackboard_plan; }
Ref<Blackboard> get_blackboard() const { return blackboard; }
@ -77,15 +77,15 @@ public:
Node *get_agent() const { return agent; }
void set_agent(Node *p_agent) { agent = p_agent; }
LimboState *named(String p_name);
LimboState *named(const String &p_name);
LimboState *call_on_enter(const Callable &p_callable);
LimboState *call_on_exit(const Callable &p_callable);
LimboState *call_on_update(const Callable &p_callable);
void add_event_handler(const String &p_event, const Callable &p_handler);
bool dispatch(const String &p_event, const Variant &p_cargo = Variant());
void add_event_handler(const StringName &p_event, const Callable &p_handler);
bool dispatch(const StringName &p_event, const Variant &p_cargo = Variant());
_FORCE_INLINE_ String event_finished() const { return LW_NAME(EVENT_FINISHED); }
_FORCE_INLINE_ StringName event_finished() const { return LW_NAME(EVENT_FINISHED); }
LimboState *get_root() const;
bool is_active() const { return active; }

Some files were not shown because too many files have changed in this diff Show More