Implement basic BTState
|
@ -0,0 +1,34 @@
|
||||||
|
/* bt_state.cpp */
|
||||||
|
|
||||||
|
#include "bt_state.h"
|
||||||
|
#include "core/variant.h"
|
||||||
|
#include "modules/limboai/bt/bt_task.h"
|
||||||
|
|
||||||
|
void BTState::_setup() {
|
||||||
|
blackboard->prefetch_nodepath_vars(this);
|
||||||
|
root_task = behavior_tree->instance(get_owner(), blackboard);
|
||||||
|
root_task->initialize(get_owner(), blackboard);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BTState::_exit() {
|
||||||
|
root_task->cancel();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BTState::_update(float p_delta) {
|
||||||
|
int status = root_task->execute(p_delta);
|
||||||
|
if (status == BTTask::SUCCESS) {
|
||||||
|
get_root()->dispatch("success", Variant());
|
||||||
|
} else if (status == BTTask::FAILURE) {
|
||||||
|
get_root()->dispatch("failure", Variant());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void BTState::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("set_behavior_tree", "p_value"), &BTState::set_behavior_tree);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_behavior_tree"), &BTState::get_behavior_tree);
|
||||||
|
// ClassDB::bind_method(D_METHOD("set_blackboard", "p_blackboard"), &BTState::set_blackboard);
|
||||||
|
ClassDB::bind_method(D_METHOD("get_blackboard"), &BTState::get_blackboard);
|
||||||
|
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "behavior_tree", PROPERTY_HINT_RESOURCE_TYPE, "BehaviorTree"), "set_behavior_tree", "get_behavior_tree");
|
||||||
|
ADD_PROPERTY(PropertyInfo(Variant::OBJECT, "blackboard", PROPERTY_HINT_NONE, "Blackboard", 0), "", "get_blackboard");
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
/* bt_state.h */
|
||||||
|
|
||||||
|
#ifndef BT_STATE_H
|
||||||
|
#define BT_STATE_H
|
||||||
|
|
||||||
|
#include "core/object.h"
|
||||||
|
#include "modules/limboai/bt/behavior_tree.h"
|
||||||
|
#include "modules/limboai/bt/bt_task.h"
|
||||||
|
#include "modules/limboai/limbo_state.h"
|
||||||
|
|
||||||
|
class BTState : public LimboState {
|
||||||
|
GDCLASS(BTState, LimboState);
|
||||||
|
|
||||||
|
private:
|
||||||
|
Ref<BehaviorTree> behavior_tree;
|
||||||
|
Ref<Blackboard> blackboard;
|
||||||
|
Ref<BTTask> root_task;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
static void _bind_methods();
|
||||||
|
|
||||||
|
virtual void _setup();
|
||||||
|
// virtual void _enter() {}
|
||||||
|
virtual void _exit();
|
||||||
|
virtual void _update(float p_delta);
|
||||||
|
|
||||||
|
public:
|
||||||
|
void set_behavior_tree(const Ref<BehaviorTree> &p_value) { behavior_tree = p_value; }
|
||||||
|
Ref<BehaviorTree> get_behavior_tree() const { return behavior_tree; }
|
||||||
|
// void set_blackboard(const Ref<Blackboard> &p_value) { blackboard = p_value; }
|
||||||
|
Ref<Blackboard> get_blackboard() const { return blackboard; }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BT_STATE_H
|
Before Width: | Height: | Size: 301 B After Width: | Height: | Size: 301 B |
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 375 B |
Before Width: | Height: | Size: 141 B After Width: | Height: | Size: 141 B |
|
@ -1 +0,0 @@
|
||||||
<svg enable-background="new 0 0 16 16" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="m16 10.03v-4h-6v1.5h-6.5v-3.53h2.5v-4h-6v4h2.5v10.5h.17.83 6.5v1.5h6v-4h-6v1.5h-6.5v-4.97h6.5v1.5z" fill="#cea4f1"/></svg>
|
|
Before Width: | Height: | Size: 225 B |
|
@ -13,6 +13,7 @@
|
||||||
#include "bt/actions/bt_wait_ticks.h"
|
#include "bt/actions/bt_wait_ticks.h"
|
||||||
#include "bt/behavior_tree.h"
|
#include "bt/behavior_tree.h"
|
||||||
#include "bt/bt_player.h"
|
#include "bt/bt_player.h"
|
||||||
|
#include "bt/bt_state.h"
|
||||||
#include "bt/bt_task.h"
|
#include "bt/bt_task.h"
|
||||||
#include "bt/composites/bt_composite.h"
|
#include "bt/composites/bt_composite.h"
|
||||||
#include "bt/composites/bt_dynamic_selector.h"
|
#include "bt/composites/bt_dynamic_selector.h"
|
||||||
|
@ -59,6 +60,7 @@ void register_limboai_types() {
|
||||||
ClassDB::register_class<BTTask>();
|
ClassDB::register_class<BTTask>();
|
||||||
ClassDB::register_class<BehaviorTree>();
|
ClassDB::register_class<BehaviorTree>();
|
||||||
ClassDB::register_class<BTPlayer>();
|
ClassDB::register_class<BTPlayer>();
|
||||||
|
ClassDB::register_class<BTState>();
|
||||||
|
|
||||||
ClassDB::register_class<BTComposite>();
|
ClassDB::register_class<BTComposite>();
|
||||||
ClassDB::register_class<BTSequence>();
|
ClassDB::register_class<BTSequence>();
|
||||||
|
|