Skip to content

Commit a8d1d0a

Browse files
authored
Fix bsn nested entity references (bevyengine#24742)
fix nested named entities # Objective Fix nested entity references ## Solution Iterate over entity references instead of only insert first ## Testing Added relevent test case --------- Co-authored-by: Heart <>
1 parent 434f3e9 commit a8d1d0a

2 files changed

Lines changed: 62 additions & 1 deletion

File tree

crates/bevy_scene/src/lib.rs

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2959,4 +2959,65 @@ mod tests {
29592959
.unwrap();
29602960
assert!(entity.get::<Foo>().is_some());
29612961
}
2962+
2963+
#[test]
2964+
fn scene_nested_entity_references() {
2965+
let mut app = test_app();
2966+
let world = app.world_mut();
2967+
2968+
#[derive(Component, FromTemplate)]
2969+
struct Ref(Entity);
2970+
2971+
let patch = bsn! {
2972+
#patch
2973+
Children [
2974+
Ref(#patch)
2975+
]
2976+
};
2977+
2978+
let root = bsn! {
2979+
#root
2980+
patch
2981+
};
2982+
2983+
let expected_id = Some(world.spawn_scene(root).unwrap().id());
2984+
let actual_id = world
2985+
.query::<&Ref>()
2986+
.query(world)
2987+
.single()
2988+
.ok()
2989+
.map(|r| r.0);
2990+
2991+
assert_eq!(expected_id, actual_id);
2992+
}
2993+
2994+
#[test]
2995+
fn scene_list_nested_entity_references() {
2996+
let mut app = test_app();
2997+
let world = app.world_mut();
2998+
2999+
#[derive(Component, FromTemplate)]
3000+
struct Ref(Entity);
3001+
3002+
let patch = bsn! {
3003+
#patch
3004+
Children [
3005+
Ref(#patch)
3006+
]
3007+
};
3008+
3009+
let root = bsn_list! {
3010+
#root patch
3011+
};
3012+
3013+
let expected_id = Some(world.spawn_scene_list(root).unwrap()[0]);
3014+
let actual_id = world
3015+
.query::<&Ref>()
3016+
.query(world)
3017+
.single()
3018+
.ok()
3019+
.map(|r| r.0);
3020+
3021+
assert_eq!(expected_id, actual_id);
3022+
}
29623023
}

crates/bevy_scene/src/resolved_scene.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ impl ResolvedScene {
226226
writer_ops: impl FnOnce(&mut TemplateContext, &mut BundleWriter),
227227
) -> Result<(), ApplySceneError> {
228228
let mut bundle_writer = bundle_scratch.writer();
229-
if let Some(entity_reference) = self.entity_references.first().copied() {
229+
for entity_reference in self.entity_references.iter().copied() {
230230
context
231231
.entity_references
232232
.set(entity_reference, context.entity.id());

0 commit comments

Comments
 (0)