behaviour-nodes-module/behaviour_node.cpp

34 lines
996 B
C++

#include "behaviour_node.h"
#include "behaviour_nodes/behaviour_tree.h"
#include "core/config/engine.h"
#include "core/object/class_db.h"
#include "macros.h"
void BehaviourNode::_bind_methods() {
BIND_ENUM_CONSTANT(Fail);
BIND_ENUM_CONSTANT(Running);
BIND_ENUM_CONSTANT(Success);
ClassDB::bind_method(D_METHOD("get_behaviour_tree"), &self_type::get_behaviour_tree);
ClassDB::bind_method(D_METHOD("set_status", "status"), &self_type::set_status);
ClassDB::bind_method(D_METHOD("get_status"), &self_type::get_status);
}
void BehaviourNode::_notification(int what) {
if (Engine::get_singleton()->is_editor_hint()) {
return;
}
switch (what) {
default:
return;
case NOTIFICATION_ENTER_TREE:
Node *parent{ get_parent() };
this->parent = cast_to<BehaviourNode>(parent);
while (this->behaviour_tree == nullptr && parent != nullptr) {
if ((this->behaviour_tree = cast_to<BehaviourTree>(parent))) {
break;
}
parent = parent->get_parent();
}
return;
}
}