原生调用与枚举
lib/ 里有一批没有函数体的函数。它们不是 Rust 代码,而是节点图里的一个节点 —— 编译器读到调用点,就地合成那个节点。直接调用
co.kill();
let e = Entity::current();
log(e.nickname());- 别去
lib/里找这些函数的实现 —— 没有 - 它们不能写进
const上下文,也不能当成函数指针传来传去
定义游戏枚举
#[native_enum(N)] 标过的枚举:#[native_enum(15)]
pub enum EntityKind {
Stage = 1401,
Object = 1402,
Player = 1403,
Character = 1404,
Creation = 1405,
}N是枚举类型 ID 的紧凑形式 —— 参考项目data.json里EnumTypes[].TypeID减10000。ID 错了节点图导不进游戏- 变体的值就是游戏枚举值 —— 必须显式写出来。省略的话按 Rust 规则递增,很容易和游戏端对不上
== 比较,比较会编译成一个节点:if e.kind() == EntityKind::Character {
// ...
}lib/src/event/character.rs。要加一个新的原生调用
lib/ 的事,做法见加一个原生调用。