我有一个正在生成其他实体的实体。例如生成器有一个位置组件,我希望生成的实体与生成器具有相同的位置。
在生成系统中,似乎我需要读取和写入一个组件,这听起来不可能。唯一的选择似乎是 a LazyUpdate
,但我想避免这种情况,因为它需要调用world::maintain
,并且我想在同一框架内的另一个系统中使用生成的实体。
我的系统代码:
#[derive(Debug)]
struct Position {
x: f32, // meters
y: f32,
z: f32,
direction: f32,
}
impl Component for Position {
type Storage = VecStorage<Self>;
}
struct GenerateEntity;
impl<'a> System<'a> for GenerateEntity {
type SystemData = (
ReadStorage<'a, Generator>,
ReadStorage<'a, Position>,
Entities<'a>,
);
fn run(&mut self, (gen, pos, entities): Self::SystemData) {
for (pos, gen) in (&pos, &gen).join() {
let generated = entities.create();
// This gives an error because position can only be read
pos.insert(generated, pos.clone());
}
}
}
我该如何解决这个问题?