-
Notifications
You must be signed in to change notification settings - Fork 1
/
randomsequence.go
41 lines (36 loc) · 1.22 KB
/
randomsequence.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//nolint:dupl
package composite
import (
"github.com/alkaid/behavior/bcore"
)
// RandomSequence 随机序列,节点按从左到右的顺序随机执行其子节点。当其中一个子节点失败时,序列节点也将停止执行。如果有子节点失败,那么序列就会失败。如果该序列的所有子节点运行都成功执行,则序列节点成功。
type RandomSequence struct {
Sequence
randomWorker *RandomWorker
}
// InitNodeWorker
// @override Node.InitNodeWorker
// @receiver c
// @param worker
func (r *RandomSequence) InitNodeWorker(worker bcore.INodeWorker) error {
err := r.Sequence.InitNodeWorker(worker)
r.randomWorker = NewRandomWorker(r)
return err
}
// PropertiesClassProvider
// @implement INodeWorker.PropertiesClassProvider
// @receiver n
// @return any
func (r *RandomSequence) PropertiesClassProvider() any {
return r.randomWorker.PropertiesClassProvider()
}
// OnOrder
// @implement INonParallelWorker.OnOrder
// @receiver r
// @param brain
// @param originChildrenOrder
// @return orders
// @return needOrder
func (r *RandomSequence) OnOrder(brain bcore.IBrain, originChildrenOrder []int) (orders []int, needOrder bool) {
return r.randomWorker.OnOrder(brain, originChildrenOrder)
}