3 个版本 (重大变更)

0.3.0 2024 年 8 月 11 日
0.2.0 2024 年 8 月 11 日
0.1.0 2024 年 7 月 22 日

#577文件系统

Download history 117/week @ 2024-07-22 15/week @ 2024-07-29 125/week @ 2024-08-05 102/week @ 2024-08-12

每月 359 次下载
bevy_dogoap 中使用

MIT 许可证

34KB
804

dogoap - 数据导向、目标导向的动作规划

License Crates.io Downloads Docs ci

以数据导向的方式实现 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