#godot #collection #wrapper #gamedev #variant #traits #book

gdvariants

Rust标准库集合包装器,实现了godot-rust变体特性,便于在使用godot-rust时使用。

9个版本 (2个稳定版)

1.1.0 2022年4月19日
0.7.0 2022年4月18日

#1356游戏开发

Download history 67/week @ 2024-07-22

每月67 次下载

MIT/Apache

180KB
3K SLoC

gdvariants

Rust标准库集合包装器,实现了godot-rust变体特性,便于在使用godot-rust时使用。

在标准库实现之上实现的特性

  • Export 用于属性特性的必要。
  • FromVariant 用于将Godot类型转换为Rust类型。
  • ToVariant 用于将Rust类型转换为Godot类型。
  • Borrow 用于借用基本标准库类型。
  • BorrowMut 用于以可变引用借用基本标准库类型。
  • From 用于将标准库类型转换为gdvariant类型。

类型

  • HashMap
  • HashSet
  • Vec

用法

将以下内容添加到您的 Cargo.toml

gdvariants = "*"

阅读godot-rust书籍 了解如何设置使用Rust的Godot项目。

属性

use gdnative::api::*;
use gdnative::prelude::*;

use gdvariants::collections::HashMap;

#[derive(NativeClass, Default)]
#[inherit(Node)]
pub struct ExampleHashMapProperty {
    #[property]
    players: HashMap<i64, String>,
}

网络

use gdnative::api::*;
use gdnative::prelude::*;

use gdvariants::collections::HashMap;

...

fn send_data(&mut self, owner: &Node) {
    let mut data: HashMap<i64, i64> = HashMap::new();
    data.insert(1, 0);

    for player in self.players.keys() {
        owner.rpc_id(*player, "data", &[data.to_variant()]);
    }
}
use gdnative::api::*;
use gdnative::prelude::*;

use gdvariants::collections::HashMap;

...

fn receive_data(&mut self, owner: &Node, data: HashMap<i64, i64>) {
    let mut data: HashMap<i64, i64> = HashMap::new();
    data.insert(1, 0);

    for player in self.players.keys() {
        owner.rpc_id(*player, "data", &[data.to_variant()]);
    }
}

crate功能

  • serde: 为集合启用反序列化和序列化。

依赖关系

~8–15MB
~218K SLoC