Skip to content

Commit

Permalink
gltf: add a name to nodes without names (#4396)
Browse files Browse the repository at this point in the history
# Objective

- Animation is using `Name` to be able to address nodes in an entity free way
- When loading random animated gltf files, I noticed some had animations without names sometimes

## Solution

- Add default names to all nodes
  • Loading branch information
mockersf committed Apr 4, 2022
1 parent d9d2fb6 commit 703ae5d
Showing 1 changed file with 14 additions and 10 deletions.
24 changes: 14 additions & 10 deletions crates/bevy_gltf/src/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -518,15 +518,21 @@ async fn load_gltf<'a, 'b>(
Ok(())
}

fn node_name(node: &Node) -> Name {
let name = node
.name()
.map(|s| s.to_string())
.unwrap_or_else(|| format!("GltfNode{}", node.index()));
Name::new(name)
}

fn paths_recur(node: Node, current_path: &[Name], paths: &mut HashMap<usize, Vec<Name>>) {
if let Some(name) = node.name() {
let mut path = current_path.to_owned();
path.push(Name::new(name.to_string()));
for child in node.children() {
paths_recur(child, &path, paths);
}
paths.insert(node.index(), path);
let mut path = current_path.to_owned();
path.push(node_name(&node));
for child in node.children() {
paths_recur(child, &path, paths);
}
paths.insert(node.index(), path);
}

/// Loads a glTF texture as a bevy [`Image`] and returns it together with its label.
Expand Down Expand Up @@ -678,9 +684,7 @@ fn load_node(
Mat4::from_cols_array_2d(&transform.matrix()),
)));

if let Some(name) = gltf_node.name() {
node.insert(Name::new(name.to_string()));
}
node.insert(node_name(gltf_node));

// create camera node
if let Some(camera) = gltf_node.camera() {
Expand Down

0 comments on commit 703ae5d

Please sign in to comment.