Skip to content

Commit

Permalink
Add VoxelInstanceReady event
Browse files Browse the repository at this point in the history
  • Loading branch information
Utsira committed Aug 6, 2024
1 parent 88b09fb commit a1ccfb4
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 24 deletions.
7 changes: 5 additions & 2 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,10 @@ pub use model::{
queryable::VoxelQueryable,
};
pub use model::{Voxel, VoxelData, VoxelElement, VoxelModel, VoxelModelCollection, VoxelPalette};
pub use scene::{DidSpawnVoxelChild, VoxelLayer, VoxelModelInstance, VoxelScene, VoxelSceneBundle};
pub use scene::{
DidSpawnVoxelChild, VoxelInstanceReady, VoxelLayer, VoxelModelInstance, VoxelScene,
VoxelSceneBundle,
};

/// Plugin adding functionality for loading `.vox` files.
///
Expand All @@ -78,7 +81,7 @@ pub use scene::{DidSpawnVoxelChild, VoxelLayer, VoxelModelInstance, VoxelScene,
pub struct VoxScenePlugin {
/// Inject global settings. This is a workaround for `load_with_settings` currently being broken.
/// See: https://github.com/bevyengine/bevy/issues/12320
/// and: https://github.com/bevyengine/bevy/issues/11111
/// and: https://github.com/bevyengine/bevy/issues/11111
pub global_settings: Option<VoxLoaderSettings>,
}

Expand Down
14 changes: 3 additions & 11 deletions src/load/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -126,12 +126,7 @@ impl VoxSceneLoader {

// Scene graph

let root = parse_xform_node(
&file.scenes,
&file.scenes[0],
None,
settings.voxel_size,
);
let root = parse_xform_node(&file.scenes, &file.scenes[0], None, settings.voxel_size);
let layers: Vec<LayerInfo> = file
.layers
.iter()
Expand All @@ -154,11 +149,8 @@ impl VoxSceneLoader {
.map(|(index, (maybe_name, model))| {
let name = maybe_name.clone().unwrap_or(format!("model-{}", index));
index_for_model_name.insert(name.to_string(), index);
let data = VoxelData::from_model(
&model,
settings.mesh_outer_faces,
settings.voxel_size,
);
let data =
VoxelData::from_model(&model, settings.mesh_outer_faces, settings.voxel_size);
let (visible_voxels, ior) = data.visible_voxels(&indices_of_refraction);
let mesh = load_context.labeled_asset_scope(format!("{}@mesh", name), |_| {
crate::model::mesh::mesh_model(&visible_voxels, &data)
Expand Down
20 changes: 9 additions & 11 deletions src/model/mesh.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,17 +48,15 @@ pub(crate) fn mesh_model(voxels: &[VisibleVoxel], data: &VoxelData) -> Mesh {
for quad in group.iter() {
let palette_index = voxels[data.shape.linearize(quad.minimum) as usize].index;
indices.extend_from_slice(&face.quad_mesh_indices(positions.len() as u32));
positions.extend_from_slice(
&face
.quad_mesh_positions(quad, data.voxel_size)
.map(|position| {
[
position[0] - position_offset.x,
position[1] - position_offset.y,
position[2] - position_offset.z,
]
}),
);
positions.extend_from_slice(&face.quad_mesh_positions(quad, data.voxel_size).map(
|position| {
[
position[0] - position_offset.x,
position[1] - position_offset.y,
position[2] - position_offset.z,
]
},
));
let u = ((palette_index % 16) as f32 + 0.5) / 16.0;
let v = ((palette_index / 16) as f32 + 0.5) / 16.0;
uvs.extend_from_slice(&[[u, v], [u, v], [u, v], [u, v]]);
Expand Down
4 changes: 4 additions & 0 deletions src/scene/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,3 +110,7 @@ pub struct DidSpawnVoxelChild {
/// the [`VoxelLayer`] name of the child entity
pub layer_name: Option<String>,
}

/// Event triggered on the root entity once a VoxelScene has finished spawning
#[derive(Event)]
pub struct VoxelInstanceReady;
3 changes: 3 additions & 0 deletions src/scene/systems.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ use bevy::{

use crate::scene::{VoxelLayer, VoxelModelInstance, VoxelNode, VoxelScene};

use super::VoxelInstanceReady;

pub(crate) fn spawn_vox_scenes(
mut commands: Commands,
query: Query<(
Expand Down Expand Up @@ -42,6 +44,7 @@ pub(crate) fn spawn_vox_scenes(
if let Some(visibility) = visibility {
entity.insert(*visibility);
}
commands.trigger_targets(VoxelInstanceReady, root);
}
}

Expand Down

0 comments on commit a1ccfb4

Please sign in to comment.