Add Delay, Invert, AlwaysSucceed and AlwaysFail
This commit is contained in:
parent
aac0acd51e
commit
b116d1fdcd
|
@ -0,0 +1,10 @@
|
|||
/* bt_always_fail.cpp */
|
||||
|
||||
#include "bt_always_fail.h"
|
||||
|
||||
int BTAlwaysFail::_tick(float p_delta) {
|
||||
if (get_child(0)->execute(p_delta) == RUNNING) {
|
||||
return RUNNING;
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/* bt_always_fail.h */
|
||||
|
||||
#ifndef BT_ALWAYS_FAIL_H
|
||||
#define BT_ALWAYS_FAIL_H
|
||||
|
||||
#include "bt_decorator.h"
|
||||
#include "core/object.h"
|
||||
|
||||
class BTAlwaysFail : public BTDecorator {
|
||||
GDCLASS(BTAlwaysFail, BTDecorator);
|
||||
|
||||
protected:
|
||||
virtual int _tick(float p_delta);
|
||||
};
|
||||
|
||||
#endif // BT_ALWAYS_FAIL_H
|
|
@ -0,0 +1,10 @@
|
|||
/* bt_always_succeed.cpp */
|
||||
|
||||
#include "bt_always_succeed.h"
|
||||
|
||||
int BTAlwaysSucceed::_tick(float p_delta) {
|
||||
if (get_child(0)->execute(p_delta) == RUNNING) {
|
||||
return RUNNING;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/* bt_always_succeed.h */
|
||||
|
||||
#ifndef BT_ALWAYS_SUCCEED_H
|
||||
#define BT_ALWAYS_SUCCEED_H
|
||||
|
||||
#include "bt_decorator.h"
|
||||
#include "core/object.h"
|
||||
|
||||
class BTAlwaysSucceed : public BTDecorator {
|
||||
GDCLASS(BTAlwaysSucceed, BTDecorator);
|
||||
|
||||
protected:
|
||||
virtual int _tick(float p_delta);
|
||||
};
|
||||
|
||||
#endif // BT_ALWAYS_SUCCEED_H
|
|
@ -0,0 +1,29 @@
|
|||
/* bt_delay.cpp */
|
||||
|
||||
#include "bt_delay.h"
|
||||
#include "core/array.h"
|
||||
#include "core/class_db.h"
|
||||
#include "core/object.h"
|
||||
#include "core/variant.h"
|
||||
|
||||
String BTDelay::_generate_name() const {
|
||||
return vformat("Delay %ss", seconds);
|
||||
}
|
||||
|
||||
void BTDelay::_enter() {
|
||||
time_passed = 0.0;
|
||||
}
|
||||
|
||||
int BTDelay::_tick(float p_delta) {
|
||||
time_passed += p_delta;
|
||||
if (time_passed <= seconds) {
|
||||
return RUNNING;
|
||||
}
|
||||
return get_child(0)->execute(p_delta);
|
||||
}
|
||||
|
||||
void BTDelay::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_seconds", "p_value"), &BTDelay::set_seconds);
|
||||
ClassDB::bind_method(D_METHOD("get_seconds"), &BTDelay::get_seconds);
|
||||
ADD_PROPERTY(PropertyInfo(Variant::REAL, "seconds"), "set_seconds", "get_seconds");
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
/* bt_delay.h */
|
||||
|
||||
#ifndef BT_DELAY
|
||||
#define BT_DELAY
|
||||
|
||||
#include "bt_decorator.h"
|
||||
#include "core/object.h"
|
||||
|
||||
class BTDelay : public BTDecorator {
|
||||
GDCLASS(BTDelay, BTDecorator);
|
||||
|
||||
private:
|
||||
float seconds = 1.0;
|
||||
float time_passed = 0.0;
|
||||
|
||||
protected:
|
||||
static void _bind_methods();
|
||||
|
||||
virtual String _generate_name() const;
|
||||
virtual void _enter();
|
||||
virtual int _tick(float p_delta);
|
||||
|
||||
public:
|
||||
void set_seconds(float p_value) {
|
||||
seconds = p_value;
|
||||
emit_changed();
|
||||
};
|
||||
float get_seconds() const { return seconds; };
|
||||
};
|
||||
|
||||
#endif // BT_DELAY
|
|
@ -0,0 +1,13 @@
|
|||
/* bt_invert.cpp */
|
||||
|
||||
#include "bt_invert.h"
|
||||
|
||||
int BTInvert::_tick(float p_delta) {
|
||||
int status = get_child(0)->execute(p_delta);
|
||||
if (status == SUCCESS) {
|
||||
status = FAILURE;
|
||||
} else if (status == FAILURE) {
|
||||
status = SUCCESS;
|
||||
}
|
||||
return status;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
/* bt_invert.h */
|
||||
|
||||
#ifndef BT_INVERT_H
|
||||
#define BT_INVERT_H
|
||||
|
||||
#include "bt_decorator.h"
|
||||
#include "core/object.h"
|
||||
|
||||
class BTInvert : public BTDecorator {
|
||||
GDCLASS(BTInvert, BTDecorator);
|
||||
|
||||
protected:
|
||||
virtual int _tick(float p_delta);
|
||||
};
|
||||
|
||||
#endif // BT_INVERT_H
|
|
@ -5,9 +5,13 @@
|
|||
#include "core/class_db.h"
|
||||
|
||||
#include "bt_action.h"
|
||||
#include "bt_always_fail.h"
|
||||
#include "bt_always_succeed.h"
|
||||
#include "bt_composite.h"
|
||||
#include "bt_condition.h"
|
||||
#include "bt_decorator.h"
|
||||
#include "bt_delay.h"
|
||||
#include "bt_invert.h"
|
||||
#include "bt_parallel.h"
|
||||
#include "bt_selector.h"
|
||||
#include "bt_sequence.h"
|
||||
|
@ -24,6 +28,10 @@ void register_limboai_types() {
|
|||
ClassDB::register_class<BTSequence>();
|
||||
ClassDB::register_class<BTSelector>();
|
||||
ClassDB::register_class<BTParallel>();
|
||||
ClassDB::register_class<BTInvert>();
|
||||
ClassDB::register_class<BTAlwaysFail>();
|
||||
ClassDB::register_class<BTAlwaysSucceed>();
|
||||
ClassDB::register_class<BTDelay>();
|
||||
LimboStringNames::create();
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue