Skip to content

Commit

Permalink
expose extras from gltf nodes (bevyengine#2154)
Browse files Browse the repository at this point in the history
fixes bevyengine#2153 

expose the `extras` field value as a string
  • Loading branch information
mockersf authored and aevyrie committed Jun 7, 2022
1 parent 16d9942 commit 3eac2fb
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 14 deletions.
1 change: 1 addition & 0 deletions crates/bevy_gltf/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ bevy_utils = { path = "../bevy_utils", version = "0.7.0-dev" }
gltf = { version = "1.0.0", default-features = false, features = [
"KHR_lights_punctual",
"KHR_materials_unlit",
"extras",
"names",
"utils",
] }
Expand Down
10 changes: 9 additions & 1 deletion crates/bevy_gltf/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@ pub use loader::*;

use bevy_app::prelude::*;
use bevy_asset::{AddAsset, Handle};
use bevy_ecs::{prelude::Component, reflect::ReflectComponent};
use bevy_pbr::StandardMaterial;
use bevy_reflect::TypeUuid;
use bevy_reflect::{Reflect, TypeUuid};
use bevy_render::mesh::Mesh;
use bevy_scene::Scene;

Expand All @@ -19,6 +20,7 @@ pub struct GltfPlugin;
impl Plugin for GltfPlugin {
fn build(&self, app: &mut App) {
app.init_asset_loader::<GltfLoader>()
.register_type::<GltfExtras>()
.add_asset::<Gltf>()
.add_asset::<GltfNode>()
.add_asset::<GltfPrimitive>()
Expand Down Expand Up @@ -69,3 +71,9 @@ pub struct GltfPrimitive {
pub mesh: Handle<Mesh>,
pub material: Option<Handle<StandardMaterial>>,
}

#[derive(Clone, Debug, Reflect, Default, Component)]
#[reflect(Component)]
pub struct GltfExtras {
pub value: String,
}
45 changes: 32 additions & 13 deletions crates/bevy_gltf/src/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -703,6 +703,12 @@ fn load_node(

node.insert(node_name(gltf_node));

if let Some(extras) = gltf_node.extras() {
node.insert(super::GltfExtras {
value: extras.get().to_string(),
});
}

// create camera node
if let Some(camera) = gltf_node.camera() {
node.insert_bundle((
Expand Down Expand Up @@ -780,21 +786,24 @@ fn load_node(
let material_asset_path =
AssetPath::new_ref(load_context.path(), Some(&material_label));

let node = parent
.spawn_bundle(PbrBundle {
mesh: load_context.get_handle(mesh_asset_path),
material: load_context.get_handle(material_asset_path),
..Default::default()
})
.insert(Aabb::from_min_max(
Vec3::from_slice(&bounds.min),
Vec3::from_slice(&bounds.max),
))
.id();

let mut mesh_entity = parent.spawn_bundle(PbrBundle {
mesh: load_context.get_handle(mesh_asset_path),
material: load_context.get_handle(material_asset_path),
..Default::default()
});
mesh_entity.insert(Aabb::from_min_max(
Vec3::from_slice(&bounds.min),
Vec3::from_slice(&bounds.max),
));

if let Some(extras) = primitive.extras() {
mesh_entity.insert(super::GltfExtras {
value: extras.get().to_string(),
});
}
// Mark for adding skinned mesh
if let Some(skin) = gltf_node.skin() {
entity_to_skin_index_map.insert(node, skin.index());
entity_to_skin_index_map.insert(mesh_entity.id(), skin.index());
}
}
}
Expand All @@ -815,6 +824,11 @@ fn load_node(
if let Some(name) = light.name() {
entity.insert(Name::new(name.to_string()));
}
if let Some(extras) = light.extras() {
entity.insert(super::GltfExtras {
value: extras.get().to_string(),
});
}
}
gltf::khr_lights_punctual::Kind::Point => {
let mut entity = parent.spawn_bundle(PointLightBundle {
Expand All @@ -833,6 +847,11 @@ fn load_node(
if let Some(name) = light.name() {
entity.insert(Name::new(name.to_string()));
}
if let Some(extras) = light.extras() {
entity.insert(super::GltfExtras {
value: extras.get().to_string(),
});
}
}
gltf::khr_lights_punctual::Kind::Spot {
inner_cone_angle: _inner_cone_angle,
Expand Down

0 comments on commit 3eac2fb

Please sign in to comment.