原生调用与枚举

lib/ 里有一批没有函数体的函数。它们不是 Rust 代码,而是节点图里的一个节点 —— 编译器读到调用点,就地合成那个节点。

直接调用

你不需要任何特殊语法,当成普通函数用:
co.kill();
let e = Entity::current();
log(e.nickname());
每条这样的调用在节点图里占一个节点,不在 Rust 里执行。所以它们没有函数体也无所谓。顺带两个后果:

定义游戏枚举

游戏端的枚举(实体种类、元素类型、结算状态……)在 Rust 侧对应 #[native_enum(N)] 标过的枚举:
#[native_enum(15)]
pub enum EntityKind {
    Stage = 1401,
    Object = 1402,
    Player = 1403,
    Character = 1404,
    Creation = 1405,
}
两条要点:这类枚举可以用 == 比较,比较会编译成一个节点:
if e.kind() == EntityKind::Character {
    // ...
}
定义在 lib/src/event/character.rs。

要加一个新的原生调用

那是改 lib/ 的事,做法见加一个原生调用。