Add Random Sequence and Selector
This commit is contained in:
parent
e9b3b9eb54
commit
8b1431f712
|
@ -0,0 +1,26 @@
|
||||||
|
/* bt_random_selector.cpp */
|
||||||
|
|
||||||
|
#include "bt_random_selector.h"
|
||||||
|
|
||||||
|
void BTRandomSelector::_enter() {
|
||||||
|
last_running_idx = 0;
|
||||||
|
if (_indicies.size() != get_child_count()) {
|
||||||
|
_indicies.resize(get_child_count());
|
||||||
|
for (int i = 0; i < get_child_count(); i++) {
|
||||||
|
_indicies.set(i, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_indicies.shuffle();
|
||||||
|
}
|
||||||
|
|
||||||
|
int BTRandomSelector::_tick(float p_delta) {
|
||||||
|
int status = FAILURE;
|
||||||
|
for (int i = 0; i < get_child_count(); i++) {
|
||||||
|
status = get_child(_indicies[i])->execute(p_delta);
|
||||||
|
if (status != FAILURE) {
|
||||||
|
last_running_idx = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* bt_random_selector.h */
|
||||||
|
|
||||||
|
#ifndef BT_RANDOM_SELECTOR_H
|
||||||
|
#define BT_RANDOM_SELECTOR_H
|
||||||
|
|
||||||
|
#include "bt_composite.h"
|
||||||
|
#include "core/vector.h"
|
||||||
|
|
||||||
|
class BTRandomSelector : public BTComposite {
|
||||||
|
GDCLASS(BTRandomSelector, BTComposite);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int last_running_idx = 0;
|
||||||
|
Array _indicies;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void _enter();
|
||||||
|
virtual int _tick(float p_delta);
|
||||||
|
};
|
||||||
|
#endif // BT_RANDOM_SELECTOR_H
|
|
@ -0,0 +1,26 @@
|
||||||
|
/* bt_random_sequence.cpp */
|
||||||
|
|
||||||
|
#include "bt_random_sequence.h"
|
||||||
|
|
||||||
|
void BTRandomSequence::_enter() {
|
||||||
|
last_running_idx = 0;
|
||||||
|
if (_indicies.size() != get_child_count()) {
|
||||||
|
_indicies.resize(get_child_count());
|
||||||
|
for (int i = 0; i < get_child_count(); i++) {
|
||||||
|
_indicies.set(i, i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_indicies.shuffle();
|
||||||
|
}
|
||||||
|
|
||||||
|
int BTRandomSequence::_tick(float p_delta) {
|
||||||
|
int status = SUCCESS;
|
||||||
|
for (int i = 0; i < get_child_count(); i++) {
|
||||||
|
status = get_child(_indicies[i])->execute(p_delta);
|
||||||
|
if (status != SUCCESS) {
|
||||||
|
last_running_idx = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return status;
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
/* bt_random_sequence.h */
|
||||||
|
|
||||||
|
#ifndef BT_RANDOM_SEQUENCE_H
|
||||||
|
#define BT_RANDOM_SEQUENCE_H
|
||||||
|
|
||||||
|
#include "bt_composite.h"
|
||||||
|
#include "core/vector.h"
|
||||||
|
|
||||||
|
class BTRandomSequence : public BTComposite {
|
||||||
|
GDCLASS(BTRandomSequence, BTComposite);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int last_running_idx = 0;
|
||||||
|
Array _indicies;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void _enter();
|
||||||
|
virtual int _tick(float p_delta);
|
||||||
|
};
|
||||||
|
#endif // BT_RANDOM_SEQUENCE_H
|
|
@ -17,6 +17,8 @@
|
||||||
#include "bt/bt_invert.h"
|
#include "bt/bt_invert.h"
|
||||||
#include "bt/bt_parallel.h"
|
#include "bt/bt_parallel.h"
|
||||||
#include "bt/bt_probability.h"
|
#include "bt/bt_probability.h"
|
||||||
|
#include "bt/bt_random_selector.h"
|
||||||
|
#include "bt/bt_random_sequence.h"
|
||||||
#include "bt/bt_repeat.h"
|
#include "bt/bt_repeat.h"
|
||||||
#include "bt/bt_repeat_until_failure.h"
|
#include "bt/bt_repeat_until_failure.h"
|
||||||
#include "bt/bt_repeat_until_success.h"
|
#include "bt/bt_repeat_until_success.h"
|
||||||
|
@ -40,6 +42,9 @@ void register_limboai_types() {
|
||||||
ClassDB::register_class<BTDynamicSequence>();
|
ClassDB::register_class<BTDynamicSequence>();
|
||||||
ClassDB::register_class<BTDynamicSelector>();
|
ClassDB::register_class<BTDynamicSelector>();
|
||||||
ClassDB::register_class<BTSelector>();
|
ClassDB::register_class<BTSelector>();
|
||||||
|
ClassDB::register_class<BTRandomSelector>();
|
||||||
|
ClassDB::register_class<BTRandomSequence>();
|
||||||
|
ClassDB::register_class<BTSelector>();
|
||||||
ClassDB::register_class<BTParallel>();
|
ClassDB::register_class<BTParallel>();
|
||||||
|
|
||||||
ClassDB::register_class<BTInvert>();
|
ClassDB::register_class<BTInvert>();
|
||||||
|
|
Loading…
Reference in New Issue