2个不稳定版本

0.2.0 2019年1月26日
0.1.0 2019年1月12日

#894 in 游戏

MIT 许可证

17KB
280 代码行

rbx_tree

rbx_tree on crates.io rbx_tree docs

Roblox DOM的弱类型实现,用于在外部工具中表示实例。

覆盖率

由于rbx_tree是弱类型的,当Roblox中添加新实例时,它不需要更新。然而,当添加新数据类型如Vector3int16时,它必须更新。

数据类型覆盖率

  • BinaryString
  • Bool
  • CFrame
  • Color3
  • Color3uint8
  • Enum
  • Float32
  • Int32
  • String
  • Vector2
  • Vector2int16
  • Vector3
  • Vector3int16
  • 内容
  • 物理属性(目前为占位符)
  • 引用

lib.rs:

rbx_tree是Rust中Roblox DOM的通用表示。它设计得很好,与借用检查器兼容,并允许以常数时间通过ID访问实例。

rbx_tree的API并不完全稳定,但大部分设计已经锁定。它绝对是一个0.x.y质量的库。

通过首先创建一个描述树根实例的RbxInstanceProperties对象,然后将其包装在RbxTree中,来完成新实例树的构建。

use std::collections::HashMap;
use rbx_tree::{RbxInstanceProperties, RbxTree};

let props = RbxInstanceProperties {
    name: "My Cool Game".to_owned(),
    class_name: "DataModel".to_owned(),
    properties: HashMap::new(),
};

let mut tree = RbxTree::new(props);
println!("ID of instance we just inserted is {}", tree.get_root_id());

请注意,maplit 包对于定义属性非常有用。

一旦我们有了树,我们就可以使用RbxTree::insert_instanceRbxTree::get_instance将实例添加到树中并检索它们。

use rbx_tree::RbxValue;
use maplit::hashmap;
#
#
#
let http_service = RbxInstanceProperties {
    name: "HttpService".to_owned(),
    class_name: "HttpService".to_owned(),
    properties: hashmap! {
        "HttpEnabled".to_owned() => RbxValue::Bool {
            value: true,
        },
    },
};

let datamodel_id = tree.get_root_id();
let http_service_id = tree.insert_instance(http_service, datamodel_id);

println!("HttpService has ID {}", http_service_id);

要更改树中已存在的实例上的属性,请使用RbxTree::get_instance_mut。请注意,不可能通过此方法添加或删除子项,请改用RbxTree::insert_instance

依赖关系

~1.2–2MB
~36K SLoC