#json #gamedev #serde #serde-json #game-assets #behavior

mini_asset_loader

可组合的游戏资源加载系统

7 个版本

0.2.1 2023 年 5 月 13 日
0.2.0 2023 年 5 月 13 日
0.1.4 2023 年 5 月 13 日

#24#game-assets

Download history 30/week @ 2024-03-28 15/week @ 2024-04-04

66 每月下载量

MIT 许可证

19KB
224

mini_asset_loader

Crates.io docs.rs GitHub Workflow Status Crates.io

mini_asset_loader 提供了一个可扩展的资源加载系统,旨在从各种来源加载资源以供游戏使用。

资源类型、加载源、缓存行为等完全可定制。资源是引用计数的,且线程安全。

asset 模块中提供了一个基于 serde_json 和类型标签的简单资源类型。

示例

此示例使用了 asset 功能。此功能提供了一个简单的标记 JSON 资源类型,仅在 nightly rust 上工作。但是,将其替换为自定义资源类型将在 stable rust 上工作。

use serde::{Serialize, Deserialize};
use mini_asset_loader::asset::{TaggedJsonAsset, TaggedJsonAssetCreationHandler};
use mini_asset_loader::loaders::ToCached;
use mini_asset_loader::{TypedAssetLoader, asset_loader_vec};
use std::path::PathBuf;


// Creating an asset type is as easy as making a Serializable/Deserializable struct...
#[derive(Serialize, Deserialize)]
struct StringAsset {
    value: String
}

// ...and then tagging it with these two lines:
#[typetag::serde]
impl TaggedJsonAsset for StringAsset {}



// ...Then, when we want to *load* assets...
fn main() {
    // We create our loader setup as usual...
    let mut loader = asset_loader_vec![
        PathBuf::from("assets/"),
        PathBuf::from("/global_assets/")
    ].to_cached();

    // Make a TaggedJsonAssetCreationHandler...
    let mut handler = TaggedJsonAssetCreationHandler;
    
    // And we can load our assets!
    if let Some(my_string_asset) = loader.load_typed_asset::<StringAsset>(&mut handler, "my_string_asset.json") {
        println!("String asset loaded: {}", my_string_asset.read().value);
    }
}

依赖关系

~0–1.1MB
~20K SLoC