5 个版本
0.0.5 | 2023年11月10日 |
---|---|
0.0.4 | 2023年10月8日 |
0.0.3 | 2023年4月3日 |
0.0.2 | 2023年3月27日 |
0.0.1 | 2023年3月20日 |
#490 in 游戏开发
每月48次下载
在 redshell 中使用
290KB
4.5K SLoC
tuig
tuig 是一个专注于系统化文本模式游戏的引擎。
你应该查看仓库的 README 文件。你看到的就是在 crates.io 上看到的那个。
lib.rs
:
tuig 是一个专注于系统化文本模式游戏的引擎。
如果你想直接通过示例开始,请查看 docs::walkthrough
。
功能选择
在您实际上运行游戏之前,您需要使用 Cargo 特性选择一些后端功能。
运行器实际将消息传递给每个 Agent
和 Game
,并协调与所有这些的 IO 系统。选择以下之一
run_rayon
:一个非常合理的默认选项。使用rayon
将代理分布在多个线程上,它在有效地使用所有可用核心方面非常出色。run_single
:只有在某些原因(例如,小型单元测试或no_std
)使您不希望使用rayon
时才有用。
IO 系统——tuig-iosys::backends
之一——将处理我们的平台输入和输出。所有 tuig-iosys
后端都可用,但特性具有额外的 io_
前缀。因此,您有
io_nop
:非常适合集成测试,在您实际上不关心输入或输出,但希望有一个其他方面完整的 tuig 时。io_cli_crossterm
:使用crossterm
将字符网格渲染到真实终端。io_gui_softbuffer
:使用 CPU 渲染和softbuffer
将字符网格渲染到winit
窗口。它具有非常广泛的兼容性,因为您实际上不需要任何 3D 硬件才能使其工作。
您必须选择 exactly one 运动员,但您可以选择多个 IO 系统。 Runner::load_run
将尝试根据您已开启的系统智能选择 "最好的它可以做到的",但如果您有合理的不同意见,或者如果您想使用第三方后端,您可以加载您首选的系统并使用 Runner::run
代替。
架构
tuig 是围绕共享的消息总线构建的。游戏中发生的所有事情都由一个单一的类型 M: [Message]
来表示。您还将拥有各种 Agent<M>
,它们执行所有的实际模拟和消息处理。玩家实际上与之交互的是 Game<M>
,它处理用户输入并渲染输出,并通过产生消息与代理进行通信。点击这些链接获取每个特定特质的更多详细信息。
Agent
和 Game(巧合的是我的新 ska 乐队名字)可以通过
Replies
注入新的代理或消息,这是对游戏内部大多数事物的通用处理方式。一个 Agent
可以通过返回不同的 ControlFlow
来让自己进入睡眠状态——包括永远——这有助于通过减少需要考虑的代理数量来提高性能,但不应依赖于任何太严肃的事情。 Game
也有类似的选项在 Response
中,尽管它们将不断被调用,因此它们的响应主要是重新渲染文本或完全退出游戏。
传递的消息被松散地组织成 "轮次"。当消息传递给代理时,它们的回复被收集,然后在每个代理都看到完整当前轮次之后才应用。然而,代理 不会 步调一致地运行。它们甚至不一定看到相同的轮次!您偶尔会看到它们被提到,因为这解释了引擎内部是如何工作的,以及为什么某些事情会发生或不发生。简而言之:不要指望队列中的消息或产生的代理是 立即的,只是 "不久的将来"。
依赖
~0.7–14MB
~123K SLoC