3 个版本 (重大变更)
0.3.0 | 2024 年 8 月 11 日 |
---|---|
0.2.0 | 2024 年 8 月 11 日 |
0.1.0 | 2024 年 7 月 22 日 |
#577 在 文件系统
每月 359 次下载
在 bevy_dogoap 中使用
34KB
804 行
dogoap
- 数据导向、目标导向的动作规划
以数据导向的方式实现 GOAP,以便动态设置状态/动作/目标,而不是静态的
这是一个独立的 Rust 库,用于声明式地执行 GOAP。
伪示例
给定一个当前状态如下
is_hungry = true
以下可用的动作
eat_action = Mutator::set("is_hungry", false)
以下目标
is_hungry = false
神奇的规划器可以找出达到该目标的最佳动作路径。在这种情况下,最佳方案只有一个 eat_action
,将 is_hungry
状态变量设置为 false
,一个非常简单的示例。
这是基础。当然,当我们开始包含先决条件、多个动作和多个状态变量时,事情会变得更有趣,规划器需要找出到达那里的正确方式。
代码/API 示例
这是库的实际 API
use dogoap::prelude::*;
let start = LocalState::new().with_datum("is_hungry", Datum::Bool(true));
let goal = Goal::new().with_req("is_hungry", Compare::Equals(Datum::Bool(false)));
let eat_action = Action {
key: "eat".to_string(),
preconditions: vec![],
effects: vec![Effect {
action: "eat".to_string(),
mutators: vec![Mutator::Set("is_hungry".to_string(), Datum::Bool(false))],
state: LocalState::new(),
cost: 1,
}],
};
let actions: Vec<Action> = vec![eat_action];
let plan = make_plan(&start, &actions[..], &goal);
print_plan(plan.unwrap());
依赖关系
~6.5MB
~118K SLoC