2 个版本

0.7.0 2022年3月28日
0.1.1 2022年2月25日
0.1.0 2022年2月25日

#1761算法

自定义许可

19KB
299

sequencer

创建要执行的项目依赖图的途径。

数据和执行模型

这个包允许你创建一个有向无环图(DAG),并跟踪哪些项目目前是“活动”的。一旦一个项目被标记为完成,任何该项目的所有父节点都已完成的子节点将被标记为活动。

预期用途

这个包是为游戏中的事件排序/脚本而制作的,尽管它可以用于任何可以建模为依赖图的任何东西。

Cargo

将以下内容添加到 Cargo.toml 中

sequencer = "0.1"

示例

一个简单的线性序列,例如等待 5 个滴答,然后打印某物,可以表示为

enum Actions {
    Wait(usize)
    Print(String)
}

impl Actions {
    fn tick(&mut self) -> bool {
        match self {
            ...
        }
    }
}

fn main() {
    let mut sequencer = Sequencer::default();
    sequencer.new_seq(vec![Wait(5usize), Print("Done waiting".to_string())]);
    while sequencer.is_active() {
        // Activate next nodes ready for processing
        sequencer.drain_queue(|_key, action| {});
        // Process active nodes. Returning true means the node was finishes.
        sequencer.for_each_active(|_key, item| item.tick());
    }
}

查看示例目录以获取完整示例。

要添加的功能

  • 创建图时更直观的方法,特别是具有并行执行的方法
  • 可选的 serde 支持
  • 图的视觉调试
  • 图的视觉编辑
  • 垃圾回收已完成节点的功能

依赖

~370KB