#parser #quake #format #id #utilities #entities #map

qentities

与q-entities格式相关的工具

4个版本

0.2.2 2023年8月8日
0.2.1 2023年8月8日
0.2.0 2023年8月4日
0.1.0 2023年8月2日

1744解析器实现

MPL-2.0 许可证

84KB
1.5K SLoC

q-entities

Crates.io Crates.io docs.rs

一个Rust包,包含与q-entities格式相关的工具。

q-entities格式

q-entities格式是本包对id Software的Quake及其衍生作品所使用的未命名的格式的非官方名称,用于存储地图中的实体。

此格式没有正式规范,衍生作品有时会修改其解析方式,这使得为所有作品定义一个完整规范变得不可行。本包通过定义一个基线来解析此格式,可以使用简单的构建器模式进一步修改。

基本用法

包的最高级别模块包含用于存储和访问q-entities集合的类型(最显著的是QEntities)。

parse 模块包含用于将q-entities文件解析为q-entities集合的类型(最显著的是QEntitiesParseOptions)。

最小示例

use qentities::parse::QEntitiesParseOptions;

const FILE_DATA: &'static [u8] = br#"
{
"classname" "worldspawn"
"wad" "mywad.wad"
}
{
"classname" "light"
"origin" "0 0 32"
}
{
"classname" "info_player_start"
"origin" "0 0 0"
}
"#;

fn main() {
    let entities = QEntitiesParseOptions::new().parse(&FILE_DATA[..]).unwrap();
    for entity in entities.iter() {
        println!("{{");
        for kv in entity.iter() {
            let key = String::from_utf8_lossy(kv.key());
            let value = String::from_utf8_lossy(kv.value());

            println!("{key:?} {value:?}");
        }
        println!("}}");
    }
}

依赖

~2.5MB
~38K SLoC