#coroutine #async-executor #synchronous #loops #single-threaded #blazingly #unity

koryto

🎮 游戏循环 + 🐷 协程 + 🌯 墨西哥卷饼 = 🚀🔥 极速同步异步执行器 🔥🚀

4 个版本

0.1.1 2023年7月5日
0.1.0 2023年7月5日
0.0.2 2023年7月4日
0.0.1 2023年7月4日

#12 in #blazingly

MIT 许可证

450KB
121

🐷 科里托 🐷

Crates.io Documentation Build Status License

发音类似于 corrito,就像把 coroutineburrito 结合起来一样,因为众所周知,协程是端点函子类别中的 墨西哥卷饼

专注于游戏循环的异步执行器,满足所有您的协程需求。灵感来自 macroquad 的实验性协程cosync crateUnity 的惊人协程以及最后是 Godot 的协程,它们在一段时间内 并不是真正的墨西哥卷饼

科里托在捷克语中意为槽,这是猪吃的东西。

科里托是单线程且简单的。执行器上下文 Koryto 期望每帧都使用游戏的 delta time 进行轮询。

示例

// Create a new instance of the executor
let mut ko = Koryto::new();

// Shared state the coroutine sets
let val = Rc::new(RefCell::new(3));
let val_inner = val.clone();

// Start a new coroutine
ko.start(async move {
    wait_seconds(0.5).await;

    *val_inner.borrow_mut() = 9
});

// Delta time obtained from the game loop
let dt = 0.2;

// Poll coroutines as part of the game loop
ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 3);

ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 3);

// At this point 0.5 seconds have passed and we observe the coroutine be
// resumed and set the value.
ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 9);

ko.poll_coroutines(dt);
assert_eq!(*val.borrow(), 9);

常见问题解答

这是否稳定?

否。

为什么不用 cosync,因为它做的正好一样?

虽然 cosync 确实有效,但其 API 比游戏更灵活,这并不方便。Macroquad 的协程 与此 crate 的哲学更一致。如果您喜欢 cosync,请继续使用它!

cosync 相比,koryto 的一个优点是它不假设协程是 Sync

许可证

koryto 具有双重许可

依赖项