#[cfg(not(feature = "serde"))]
fn main() {}
#[cfg(feature = "serde")]
fn main() -> anyhow::Result<()> {
use flax::{components::name, *};
use glam::*;
use rand::{distributions::Standard, rngs::StdRng, Rng, SeedableRng};
component! {
position: Vec3 => [Debuggable],
velocity: Vec3 => [Debuggable],
}
tracing_subscriber::fmt().init();
use flax::serialize::{SerdeBuilder, SerializeFormat};
tracing::info!("It works");
let mut world = World::new();
let mut rng = StdRng::seed_from_u64(239);
let mut batch = BatchSpawn::new(16);
batch.set(
position(),
(&mut rng).sample_iter(Standard).map(|v: Vec3| v * 2.0),
)?;
batch.set(velocity(), (&mut rng).sample_iter(Standard))?;
batch.set(name(), (0..).map(|v| format!("id.{v}")))?;
batch.spawn(&mut world);
let mut batch = BatchSpawn::new(8);
batch.set(
position(),
(&mut rng).sample_iter(Standard).map(|v: Vec3| v * 2.0),
)?;
batch.set(name(), (16..).map(|v| format!("id.{v}")))?;
batch.spawn(&mut world);
let (serializer, deserializer) = SerdeBuilder::new()
.with(name())
.with(position())
.with(velocity())
.build();
let json =
serde_json::to_string_pretty(&serializer.serialize(&world, SerializeFormat::RowMajor))?;
let mut world = World::new();
let mut batch = BatchSpawn::new(32);
batch.set(
position(),
(&mut rng).sample_iter(Standard).map(|v: Vec3| v * 2.0),
)?;
batch.set(name(), (0..).map(|v| format!("other_id.{v}")))?;
batch.spawn(&mut world);
let mut result = deserializer.deserialize(&mut serde_json::Deserializer::from_str(&json))?;
world.merge_with(&mut result);
Ok(())
}