#api #gamedev #wasm #游戏引擎 #api-bindings

snowplay

雪玩是一个用于Stormgate游戏的Rust语言的惯用接口,Stormgate是由Frost Giant Studios开发的实时策略游戏。

1 个不稳定版本

0.1.0 2023年4月7日

#465#游戏引擎

MIT/Apache

7KB

雪玩

雪玩WebAssembly API的Rust惯用接口,用于Frost Giant Studios开发的实时策略游戏Stormgate。

WebAssembly和标准库

雪玩提供了一个API,模组可以通过调用该API来影响游戏。这个API通过WebAssembly(WASM)公开。对于初学者来说,WASM是一种平台无关的二进制代码格式,非常适合第三方模组,因为它允许使用各种工具进行模组化(如Rust!),同时保持良好的性能并确保安全性(例如,确保模组只能执行它们被允许的操作,不会被用于病毒或其他类型的恶意软件)。

通常,当你编译Rust代码时,你会将其编译成适用于你的CPU架构的本地代码。当为雪玩构建模组时,你需要将其编译成WebAssembly。然后,可以将这段WebAssembly代码导入到雪玩引擎中。然而,因为你正在编译为WebAssembly并在雪玩中运行,你无法访问标准库——最重要的是,你不能分配堆内存,所以没有 VecString,只有静态大小的数组(如 [u8; 10])和字符串切片(&str)。

快速入门

为了编译为WASM并设置您的代码不链接到标准库,您需要执行以下操作

  1. 使用 cargo new --lib <crate_name_here> 创建一个新的Cargo项目
  2. 在您的Cargo项目中创建 .cargo/config.toml 文件,并填写以下配置,这将使您的crate编译为WASM
    [build]
    target = "wasm32-unknown-unknown"
    
  3. 在您的 lib.rs 文件的顶部,使用 no_std 属性禁用标准库,并使用此crate提供的panic处理器(有关panic处理的更多详细信息,请参见下文)
    #![no_std]
    
    // Don't use the panic handler during tests since tests will have access to std.
    #[cfg(not(test))]
    #[panic_handler]
    fn panic_handler(panic_info: &core::panic::PanicInfo) -> ! {
        snowplay::panic_handler(panic_info)
    }
    
  4. 最后,在您的 Cargo.toml 中,将您的crate类型设置为 cdylib 以在构建时生成 .wasm
    [lib]
    crate_type = ["cdylib"]
    
  5. 现在,一旦运行 cargo build,您应该在 my_crate/target/wasm32-unknown-unknown/debug 文件夹中看到 my_crate.wasm 文件!

Panic处理

标准库包含一个“panic处理器”,这是一个在您的代码中发生panic时被调用的函数。由于我们没有使用标准库,我们无法免费获得这个panic处理器。幸运的是,对于您来说,snowplay crate为您定义了一个panic处理器,当发生panic时,它会在游戏中打印出错误消息。如果您愿意,您可以使用自己的panic处理器。

snowplay_sys

这个crate使用一个低级别的crate,snowplay_sys,来调用Snowplay的API。您很可能会想使用这个crate以获得易于使用的更高层接口,但如果您想自定义API的使用,可以直接使用snowplay_sys

这个crate的状态

Snowplay目前尚未发布。因此,这个crate现在为空。一旦Stormgate发布带有公共API的版本,这个crate将实现其承诺的功能。如果您也对这个感兴趣,请与我们联系!

免责声明

本项目与Frost Giant Studios没有任何关联或官方支持。

依赖项