use cosync::SerialCosync;
struct Game {
cosync: SerialCosync<World>,
world: World,
}
struct World {
main_actor_position: f32,
supporting_actor_position: f32,
cancel_game: bool,
}
fn main() {
let cosync = SerialCosync::new();
let world = World {
main_actor_position: 100.0,
supporting_actor_position: 0.0,
cancel_game: false,
};
let mut game = Game { cosync, world };
let main_marks = vec![100.0, 200.0, 300.0];
let support_marks = vec![0.0, 2.0, 3.0];
game.cosync.queue(move |mut world| async move {
for pos in main_marks {
world.get().main_actor_position = pos;
cosync::yield_now().await;
}
});
game.cosync.queue(move |mut world| async move {
for pos in support_marks {
world.get().supporting_actor_position = pos;
cosync::yield_now().await;
}
world.get().cancel_game = true;
});
loop {
game.cosync.run(&mut game.world);
if game.world.cancel_game {
break;
}
}
assert_eq!(game.world.main_actor_position, 300.0);
assert_eq!(game.world.supporting_actor_position, 3.0);
}