44 个版本
0.12.0 | 2024年7月3日 |
---|---|
0.11.5 | 2024年4月15日 |
0.11.4 | 2024年3月20日 |
0.11.0 | 2023年12月30日 |
0.1.3 | 2020年3月23日 |
#28 在 缓存
723 每月下载
用于 8 个crate (7 个直接)
245KB
5.5K SLoC
资产管理系统
这个crate旨在提供文件系统抽象,以便轻松加载外部资源。最初是为游戏设计的,但当然也可以在其他环境中使用。
最初的想法受到了Veloren的资产系统的启发。
这个crate遵循semver约定,并支持rustc 1.71及以上版本。更改此版本被认为是破坏性的更改。
目标
这个crate专注于
-
良好的性能:
对于性能导向的应用程序(如游戏)至关重要。
加载的资产被缓存,因此加载多次与加载一次一样快。这个crate是为了与并发一起使用而设计的。 -
热重载:
热重载意味着在相应文件更改时立即更新内存中的资产,而无需重新启动程序。这可能极大地简化了开发过程。
您的时间很宝贵,对热重载的一流支持可以帮助您节省时间。 -
易于使用:
良好的文档化的高级API,易于学习。
内置对常见格式的支持:序列化、图像、声音。
可以从文件系统、zip存档甚至嵌入到二进制文件中加载资源。 -
轻量级:
取之有道,无依赖性膨胀。
示例
假设您有一个文件 assets/common/position.ron
,它包含以下内容
Point(
x: 5,
y: -6,
)
然后您可以这样加载它(启用ron
功能)
use assets_manager::{Asset, AssetCache, loader};
use serde::Deserialize;
// The struct you want to load
#[derive(Deserialize)]
struct Point {
x: i32,
y: i32,
}
// Specify how you want the structure to be loaded
impl Asset for Point {
// The extension of the files to look into
const EXTENSION: &'static str = "ron";
// The serialization format (RON)
type Loader = loader::RonLoader;
}
// Create a new cache to load assets under the "./assets" folder
let cache = AssetCache::new("assets")?;
// Get a handle on the asset
// This will load the file `./assets/common/position.ron`
let handle = cache.load::<Point>("common.position")?;
// Lock the asset for reading
// Any number of read locks can exist at the same time,
// but none can exist when the asset is reloaded
let point = handle.read();
// The asset is now ready to be used
assert_eq!(point.x, 5);
assert_eq!(point.y, -6);
// Loading the same asset retrieves it from the cache
let other_handle = cache.load("common.position")?;
assert!(std::ptr::eq(handle, other_handle));
热重载也很容易使用
let cache = AssetCache::new("assets")?;
let handle = cache.load::<Point>("common.position")?;
loop {
// Reload all cached files that changed
cache.hot_reload();
// Assets are updated without any further work
println!("Current value: {:?}", handle.read());
}
许可
以下任一许可下获得许可
- Apache License,版本2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- 麻省理工学院许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您有意提交以包含在本作品中的任何贡献,将如上双授权,不附加任何额外的条款或条件。
依赖项
~1–11MB
~112K SLoC