1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
use std::sync::Arc;
use tracing::{error, info, warn};
use bevy::prelude::*;
use bevy_ecs::message::{MessageReader, MessageWriter};
use crate::{runtime::WasmInstance, Message};
pub fn tick_mods<In: Message + bevy::prelude::Message, Out: Message + bevy::prelude::Message>(
mut events_in: MessageReader<In>,
mut events_out: MessageWriter<Out>,
mut wasm_mods: Query<&mut WasmInstance>,
) {
let serialized_events_in: Vec<Arc<[u8]>> = events_in
.read()
.flat_map(|event| bincode::serialize(event))
.map(|bytes| bytes.into())
.collect();
for mut wasm_mod in wasm_mods.iter_mut() {
let serialized_events_out = match wasm_mod.tick(serialized_events_in.as_slice()) {
Ok(events) => events,
Err(err) => {
error!("Error while ticking mod: {}", err);
continue;
}
};
/*
for serialized_event_out in serialized_events_out {
match bincode::deserialize(&serialized_event_out) {
Ok(event_out) => events_out.write(event_out),
Err(err) => error!("Error while deserializing event: {}", err),
}
}
*/
for serialized_event_out in serialized_events_out {
/*
match bincode::deserialize(&serialized_event_out) {
Ok(event_out) => events_out.send(event_out),
// Err(err) => error!("Error while deserializing event: {}", err),
// Err(err) => {
//
// error!("Error while deserializing event: {}", err);
Err(e/rr) => error!("Error while deserializing event: {}", err),
}
*/
if let Err(err) = bincode::deserialize::<Out>(&serialized_event_out) {
error!("Error while deserializing event: {}", err);
} else if let Ok(event_out) = bincode::deserialize(&serialized_event_out) {
// events_out.send(event_out);
events_out.write(event_out);
}
}
}
}