用途:在 Dojo 框架中定义游戏状态模型,采用实体组件系统(ECS)模式,把游戏数据组织为可组合的模型。适用于定义游戏实体、组件,或需要“添加 Position 模型”“创建带生命值和等级的 Player 实体”“生成 Inventory 模型”等场景。
主要能力:生成带 #[dojo::model] 注解的 Cairo 结构体,包含必需 trait 派生(Drop、Serde)、键字段配置(#[key])以及适配数据的字段类型。支持玩家拥有型模型(以玩家地址为键)、复合键(多个 #[key],读取时需提供全部键)、全局单例(常量键)以及 ECS 组合(小而专注的模型组合到实体上)。
使用方式:交互模式下说明需求,会询问模型名、键字段、数据字段及类型;直接模式可描述如“创建 Position 模型,player 为键,x、y 坐标”。模型文件中导入 use starknet::ContractAddress; 嵌套结构需 use dojo::meta::Introspect;。系统中导入模型与 use dojo::model::{ModelStorage, ModelValueStorage};,通过 world.read_model(...) 读取、world.write_model(@...) 写入,复合键用元组读取,world.uuid() 生成唯一 ID。
限制与规则:每个模型至少一个 #[key];键字段必须位于数据字段之前;键不存储,仅用于索引查找;读取复合键时必须提供全部键;自定义嵌套结构体、枚举需派生 Introspect。字段类型包括 u8 至 u256、felt252、bool、ContractAddress 及需派生 Introspect 的自定义类型。后续可配合 dojo-system、dojo-test、dojo-config 等技能使用。