diff --git a/README.md b/README.md index 4628ac7..cccdb4f 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,8 @@ Current state is in development. - [X] Entity synchronization - [X] Component synchronization - [X] Parent/Child entity synchronization +- [ ] Skippable channel for Unordered+Unreliable + - [ ] Transform - [X] SimpleMaterial (through sync channel) - [ ] Refactor asset transfer through http - [x] Asset: Mesh diff --git a/assets/cube.glb b/assets/cube.glb new file mode 100644 index 0000000..7b373f4 Binary files /dev/null and b/assets/cube.glb differ diff --git a/tests/asset_sync.rs b/tests/asset_sync.rs index da6556b..be32841 100644 --- a/tests/asset_sync.rs +++ b/tests/asset_sync.rs @@ -1,11 +1,11 @@ mod assert; mod setup; -use assert::{material_has_color, assets_has_sample_mesh}; +use assert::{assets_has_sample_mesh, material_has_color}; use bevy::prelude::*; use bevy_sync::SyncComponent; use serial_test::serial; -use setup::{spawn_new_material, spawn_new_mesh, TestRun}; +use setup::{spawn_new_material, spawn_new_mesh, TestRun, load_cube}; #[test] #[serial] @@ -105,3 +105,29 @@ fn test_mesh_transferred_from_client() { }, ); } + +#[test] +#[serial] +fn test_with_asset_loader() { + TestRun::default().run( + 1, + |env| { + env.setup_registration::>(); + env.setup_registration::>(); + for app in [&mut env.server, &mut env.clients[0]] { + app.sync_meshes(true); + app.sync_materials(true); + } + }, + |env| { + let app = &mut env.server; + load_cube(app) + }, + |env, _, (mesh_id, material_id)| { + println!("{:?} {:?}", mesh_id, material_id); + assets_has_sample_mesh(&mut env.clients[0], mesh_id); + material_has_color(&mut env.clients[0], material_id, Color::RED); + }, + ); +} + diff --git a/tests/setup/mod.rs b/tests/setup/mod.rs index f3979fe..12f09dd 100644 --- a/tests/setup/mod.rs +++ b/tests/setup/mod.rs @@ -1,7 +1,7 @@ use std::{ error::Error, fmt::Display, - net::{IpAddr, Ipv4Addr}, + net::{IpAddr, Ipv4Addr}, os::unix::thread, time::Duration, }; use bevy::{ @@ -242,3 +242,21 @@ pub(crate) fn sample_mesh() -> Mesh { mesh } + +#[allow(dead_code)] +pub(crate) fn load_cube(app: &mut App) -> (AssetId, AssetId) { + app.init_asset::(); + app.init_asset::(); + app.init_asset::(); + let assets = app.world.resource_mut::(); + let scene = assets.load("cube.glb#Scene0"); + app.world.spawn(SceneBundle { + scene, + ..Default::default() + }); + let meshes = app.world.resource_mut::>(); + let mesh_id = meshes.iter().next().unwrap().0; + let materials = app.world.resource_mut::>(); + let material_id = materials.iter().next().unwrap().0; + (mesh_id, material_id) +}