From 9355a539803d1bfe0a44f3da27ae529a3aca3468 Mon Sep 17 00:00:00 2001 From: Carter Anderson Date: Sun, 8 Mar 2020 23:19:07 -0700 Subject: [PATCH] upgrade legion (breaks plugins) --- Cargo.toml | 3 +- bevy_transform/Cargo.toml | 3 +- .../src/local_to_world_propagate_system.rs | 7 +-- examples/custom_shader.rs | 4 +- examples/entity_builder_comparison.rs | 4 +- examples/instancing.rs | 4 +- examples/parenting.rs | 4 +- .../plugin_loading/example_plugin/src/lib.rs | 23 +++++---- examples/plugin_loading/main.rs | 5 +- examples/serializing.rs | 8 +-- examples/simple.rs | 4 +- examples/spawner.rs | 4 +- examples/texture.rs | 6 +-- examples/ui.rs | 4 +- src/app/app.rs | 20 +++++--- src/app/app_builder.rs | 33 ++++++------- src/ecs/mod.rs | 2 +- src/prelude.rs | 6 ++- src/render/render_graph/draw_target.rs | 4 +- .../assigned_meshes_draw_target.rs | 13 ++--- .../draw_targets/meshes_draw_target.rs | 2 + .../draw_targets/ui_draw_target.rs | 13 +++-- src/render/render_graph/render_graph.rs | 4 +- src/render/render_graph/renderable.rs | 19 +++---- src/render/render_graph/renderer.rs | 15 +++++- .../renderers/wgpu_renderer/wgpu_renderer.rs | 49 +++++++++++++------ src/render/render_graph/resource_provider.rs | 13 +++-- .../camera2d_resource_provider.rs | 19 +++++-- .../camera_resource_provider.rs | 19 +++++-- .../frame_texture_resource_provider.rs | 20 +++++--- .../light_resource_provider.rs | 10 +++- .../mesh_resource_provider.rs | 13 +++-- .../ui_resource_provider.rs | 12 +++-- .../uniform_resource_provider.rs | 16 ++++-- src/serialization/world.rs | 42 ++++++++-------- 35 files changed, 270 insertions(+), 157 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7a0596758b..4a9360476e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,8 @@ edition = "2018" [dependencies] # Modified to use std::any::type_name instead of std::any::TypeId -legion = { path = "bevy_legion", features = ["serde-1"] } +# legion = { path = "bevy_legion", features = ["serde-1"] } +legion = { git = "https://github.com/TomGillen/legion", rev = "c5b9628630d4f9fc54b6843b5ce02d0669434a61", features = ["serialize"] } wgpu = { git = "https://github.com/gfx-rs/wgpu-rs.git", rev = "a7b0d5ae5bc0934439ef559ed145e93f0117c39a"} glam = "0.8.4" winit = "0.21.0" diff --git a/bevy_transform/Cargo.toml b/bevy_transform/Cargo.toml index 51e7eb724a..042cd91905 100644 --- a/bevy_transform/Cargo.toml +++ b/bevy_transform/Cargo.toml @@ -7,7 +7,8 @@ edition = "2018" license = "MIT" [dependencies] -legion = { path = "../bevy_legion" } +# legion = { path = "../bevy_legion" } +legion = { git = "https://github.com/TomGillen/legion", rev = "c5b9628630d4f9fc54b6843b5ce02d0669434a61", features = ["serialize"] } glam = "0.8.3" log = "0.4" rayon = "1.2" diff --git a/bevy_transform/src/local_to_world_propagate_system.rs b/bevy_transform/src/local_to_world_propagate_system.rs index 8e2e0eeb3f..f8ab5d7495 100644 --- a/bevy_transform/src/local_to_world_propagate_system.rs +++ b/bevy_transform/src/local_to_world_propagate_system.rs @@ -1,8 +1,5 @@ #![allow(dead_code)] -use crate::{ - components::*, - ecs::{prelude::*, system::SubWorld}, -}; +use crate::{components::*, ecs::{prelude::*, systems::SubWorld}}; pub fn build(_: &mut World) -> Box { SystemBuilder::<()>::new("LocalToWorldPropagateSystem") @@ -59,7 +56,7 @@ mod test { use crate::{ hierarchy_maintenance_system, local_to_parent_system, local_to_world_propagate_system, local_to_world_system, - math::{Vec3, Mat4} + math::{Mat4, Vec3}, }; #[test] diff --git a/examples/custom_shader.rs b/examples/custom_shader.rs index 02b6d4f39a..5063c01841 100644 --- a/examples/custom_shader.rs +++ b/examples/custom_shader.rs @@ -73,9 +73,9 @@ fn main() { .run(); } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube_handle = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); mesh_storage.add(Mesh::load(MeshType::Cube)) }; diff --git a/examples/entity_builder_comparison.rs b/examples/entity_builder_comparison.rs index 5697a6a6dd..de1ddd65b2 100644 --- a/examples/entity_builder_comparison.rs +++ b/examples/entity_builder_comparison.rs @@ -160,12 +160,12 @@ fn create_entities_builder_archetype( .build(); } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let plane = Mesh::load(MeshType::Plane { size: 10.0 }); let (cube_handle, plane_handle) = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); (mesh_storage.add(cube), mesh_storage.add(plane)) }; diff --git a/examples/instancing.rs b/examples/instancing.rs index 935c7723a7..36f96cc559 100644 --- a/examples/instancing.rs +++ b/examples/instancing.rs @@ -29,10 +29,10 @@ fn main() { .run(); } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let cube_handle = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); mesh_storage.add(cube) }; diff --git a/examples/parenting.rs b/examples/parenting.rs index d9d9d0e808..57ed1cb1ac 100644 --- a/examples/parenting.rs +++ b/examples/parenting.rs @@ -21,12 +21,12 @@ fn build_rotator_system() -> Box { }) } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let plane = Mesh::load(MeshType::Plane { size: 10.0 }); let (cube_handle, plane_handle) = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); (mesh_storage.add(cube), mesh_storage.add(plane)) }; diff --git a/examples/plugin_loading/example_plugin/src/lib.rs b/examples/plugin_loading/example_plugin/src/lib.rs index 21246ef1a3..e39d9c492c 100644 --- a/examples/plugin_loading/example_plugin/src/lib.rs +++ b/examples/plugin_loading/example_plugin/src/lib.rs @@ -1,4 +1,4 @@ -use bevy::prelude::*; +use bevy::{prelude::*, plugin::AppPlugin}; use bevy_derive::RegisterAppPlugin; #[derive(RegisterAppPlugin)] @@ -14,29 +14,32 @@ impl AppPlugin for ExamplePlugin { } } -pub fn setup(world: &mut World) { +pub fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let plane = Mesh::load(MeshType::Plane { size: 10.0 }); let (cube_handle, plane_handle) = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); (mesh_storage.add(cube), mesh_storage.add(plane)) }; world.build() // plane - .add_archetype(NewMeshEntity { + .add_archetype(MeshEntity { mesh: plane_handle, - material: Material::new(Albedo::Color(math::vec4(0.1, 0.2, 0.1, 1.0))), - local_to_world: LocalToWorld::identity(), - translation: Translation::new(0.0, 0.0, 0.0), + material: StandardMaterial { + albedo: math::vec4(0.1, 0.2, 0.1, 1.0).into(), + }, + ..Default::default() }) // cube - .add_archetype(NewMeshEntity { + .add_archetype(MeshEntity { mesh: cube_handle, - material: Material::new(Albedo::Color(math::vec4(0.5, 0.3, 0.3, 1.0))), - local_to_world: LocalToWorld::identity(), + material: StandardMaterial { + albedo: math::vec4(0.5, 0.4, 0.3, 1.0).into(), + }, translation: Translation::new(0.0, 0.0, 1.0), + ..Default::default() }) // light // .add_archetype(LightEntity { diff --git a/examples/plugin_loading/main.rs b/examples/plugin_loading/main.rs index 67307e82c8..e5f4ea611c 100644 --- a/examples/plugin_loading/main.rs +++ b/examples/plugin_loading/main.rs @@ -3,6 +3,9 @@ use bevy::prelude::*; fn main() { AppBuilder::new() .add_defaults() - .load_plugin("examples/plugin_loading/example_plugin/target/release/libexample_plugin.so") + .load_plugin(concat!( + env!("CARGO_MANIFEST_DIR"), + "/examples/plugin_loading/example_plugin/target/release/libexample_plugin.so" + )) .run(); } diff --git a/examples/serializing.rs b/examples/serializing.rs index 3f1af2febb..fd7d7a9858 100644 --- a/examples/serializing.rs +++ b/examples/serializing.rs @@ -9,7 +9,7 @@ fn main() { let tag_registrations = []; let ser_helper = SerializeImpl::new(&comp_registrations, &tag_registrations); - let serializable = legion::ser::serializable_world(&app.world, &ser_helper); + let serializable = legion::serialize::ser::serializable_world(&app.world, &ser_helper); let serialized_data = serde_json::to_string(&serializable).unwrap(); println!("{}", serialized_data); let de_helper = DeserializeImpl::new( @@ -20,13 +20,13 @@ fn main() { let mut new_world = app.universe.create_world(); let mut deserializer = serde_json::Deserializer::from_str(&serialized_data); - legion::de::deserialize(&mut new_world, &de_helper, &mut deserializer).unwrap(); + legion::serialize::de::deserialize(&mut new_world, &de_helper, &mut deserializer).unwrap(); let ser_helper = SerializeImpl::new_with_map( &comp_registrations, &tag_registrations, de_helper.entity_map.into_inner(), ); - let serializable = legion::ser::serializable_world(&new_world, &ser_helper); + let serializable = legion::serialize::ser::serializable_world(&new_world, &ser_helper); let roundtrip_data = serde_json::to_string(&serializable).unwrap(); println!("{}", roundtrip_data); assert_eq!(roundtrip_data, serialized_data); @@ -39,7 +39,7 @@ pub struct Test { pub y: f32, } -fn setup(world: &mut World) { +fn setup(world: &mut World, _resources: &mut Resources) { // plane world.insert((), vec![(Test { x: 3.0, y: 4.0 },)]); } diff --git a/examples/simple.rs b/examples/simple.rs index a331910146..10c965c089 100644 --- a/examples/simple.rs +++ b/examples/simple.rs @@ -4,12 +4,12 @@ fn main() { AppBuilder::new().add_defaults().setup_world(setup).run(); } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let plane = Mesh::load(MeshType::Plane { size: 10.0 }); let (cube_handle, plane_handle) = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); (mesh_storage.add(cube), mesh_storage.add(plane)) }; diff --git a/examples/spawner.rs b/examples/spawner.rs index 36bf641de6..18194a2c8b 100644 --- a/examples/spawner.rs +++ b/examples/spawner.rs @@ -61,12 +61,12 @@ fn build_print_status_system() -> Box { }) } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let plane = Mesh::load(MeshType::Plane { size: 10.0 }); let (cube_handle, plane_handle) = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); (mesh_storage.add(cube), mesh_storage.add(plane)) }; diff --git a/examples/texture.rs b/examples/texture.rs index 29f2765e8d..b8508cf259 100644 --- a/examples/texture.rs +++ b/examples/texture.rs @@ -4,14 +4,14 @@ fn main() { AppBuilder::new().add_defaults().setup_world(setup).run(); } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube_handle = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); mesh_storage.add(Mesh::load(MeshType::Cube)) }; let texture_handle = { - let mut texture_storage = world.resources.get_mut::>().unwrap(); + let mut texture_storage = resources.get_mut::>().unwrap(); let texture = Texture::load(TextureType::Png( concat!(env!("CARGO_MANIFEST_DIR"), "/assets/temp_bevy_logo.png").to_string(), )); diff --git a/examples/ui.rs b/examples/ui.rs index 62743947a7..75a2e0b49d 100644 --- a/examples/ui.rs +++ b/examples/ui.rs @@ -4,10 +4,10 @@ fn main() { AppBuilder::new().add_defaults().setup_world(setup).run(); } -fn setup(world: &mut World) { +fn setup(world: &mut World, resources: &mut Resources) { let cube = Mesh::load(MeshType::Cube); let cube_handle = { - let mut mesh_storage = world.resources.get_mut::>().unwrap(); + let mut mesh_storage = resources.get_mut::>().unwrap(); mesh_storage.add(cube) }; diff --git a/src/app/app.rs b/src/app/app.rs index 6197ab8cca..1eede46b1d 100644 --- a/src/app/app.rs +++ b/src/app/app.rs @@ -15,6 +15,7 @@ use crate::{ pub struct App { pub universe: Universe, pub world: World, + pub resources: Resources, pub renderer: Option>, pub render_graph: RenderGraph, pub schedule: Schedule, @@ -25,6 +26,7 @@ impl App { universe: Universe, world: World, schedule: Schedule, + resources: Resources, renderer: Option>, render_graph: RenderGraph, ) -> App { @@ -33,6 +35,7 @@ impl App { world, schedule, renderer, + resources, render_graph, } } @@ -42,16 +45,20 @@ impl App { } fn update(&mut self) { - if let Some(mut time) = self.world.resources.get_mut::