Files
kunpocc-behaviortree/src/behaviortree/BTNode/Action.ts

69 lines
1.7 KiB
TypeScript
Raw Normal View History

import { BT } from "../BT";
2025-06-04 23:10:59 +08:00
import { Status } from "../header";
2025-09-03 10:54:07 +08:00
import { LeafNode } from "./AbstractNodes";
2025-06-04 23:10:59 +08:00
/**
* ()
2025-09-02 17:05:46 +08:00
* RUNNING
2025-06-04 23:10:59 +08:00
* SUCCESS
*/
@BT.ActionNode("WaitTicks", {
name: "等待次数",
group: "基础行为节点",
desc: "等待指定次数后返回成功",
})
2025-09-03 10:54:07 +08:00
export class WaitTicks extends LeafNode {
@BT.prop({ type: BT.ParamType.int, description: "最大等待次数", defaultValue: 0, step: 1 })
2025-09-02 17:05:46 +08:00
private _max: number;
private _value: number;
2025-06-04 23:10:59 +08:00
constructor(maxTicks: number = 0) {
super();
2025-09-02 17:05:46 +08:00
this._max = maxTicks;
this._value = 0;
2025-06-04 23:10:59 +08:00
}
2025-09-03 10:54:07 +08:00
protected override open(): void {
super.open();
2025-09-02 17:05:46 +08:00
this._value = 0;
2025-06-04 23:10:59 +08:00
}
2025-09-03 10:54:07 +08:00
public tick(): Status {
2025-09-02 17:05:46 +08:00
if (++this._value >= this._max) {
2025-06-04 23:10:59 +08:00
return Status.SUCCESS;
}
return Status.RUNNING;
}
}
/**
2025-09-02 17:05:46 +08:00
* ()
* SUCCESSRUNNING
2025-06-04 23:10:59 +08:00
*/
@BT.ActionNode("WaitTime", {
name: "等待时间",
group: "基础行为节点",
desc: "等待指定时间(秒)后返回成功",
})
2025-09-03 10:54:07 +08:00
export class WaitTime extends LeafNode {
@BT.prop({ type: BT.ParamType.float, description: "等待时间(秒)", defaultValue: 0, step: 0.01 })
2025-09-02 17:05:46 +08:00
private _max: number;
private _value: number = 0;
2025-06-04 23:10:59 +08:00
constructor(duration: number = 0) {
super();
this._max = duration;
2025-06-04 23:10:59 +08:00
}
2025-09-03 10:54:07 +08:00
protected override open(): void {
super.open();
2025-09-02 17:05:46 +08:00
this._value = new Date().getTime();
2025-06-04 23:10:59 +08:00
}
2025-09-03 10:54:07 +08:00
public tick(): Status {
2025-09-02 17:05:46 +08:00
const currTime = new Date().getTime();
if (currTime - this._value >= this._max * 1000) {
2025-06-04 23:10:59 +08:00
return Status.SUCCESS;
}
return Status.RUNNING;
}
}