Path: blob/main/crates/bevy_dev_tools/src/world_asset_helpers.rs
30635 views
//! This modules contains functions that can make working with [`WorldAsset`] easier12use bevy_asset::{Assets, Handle};3use bevy_ecs::system::SystemState;4use bevy_mesh::{Mesh, Mesh3d};5use bevy_transform::helper::TransformHelper;6use bevy_world_serialization::WorldAsset;78/// Merge all the [`Mesh3d`] of a [`WorldAsset`] into a single [`Mesh`]9pub fn merge_all_mesh_3d(10world_assets: &mut Assets<WorldAsset>,11meshes: &mut Assets<Mesh>,12scene_handle: &Handle<WorldAsset>,13) -> Option<Mesh> {14let mut scene = world_assets.get_mut(scene_handle)?;15let mut merged: Option<Mesh> = None;1617let mut system_state = SystemState::<TransformHelper>::new(&mut scene.world);18let helper = system_state.get(&scene.world).ok()?;1920for entity_ref in scene.world.iter_entities() {21let Some(mesh) = entity_ref22.get::<Mesh3d>()23.and_then(|mesh3d| meshes.get(mesh3d))24else {25continue;26};27let Ok(global_transform) = helper.compute_global_transform(entity_ref.id()) else {28continue;29};30let transform = global_transform.compute_transform();31let transformed = mesh.clone().transformed_by(transform);32match &mut merged {33Some(mesh) => {34let _ = mesh.merge(&transformed);35}36None => {37merged = Some(transformed);38}39}40}41merged42}434445