Skip to content

Commit e7ef4a5

Browse files
committed
Scenes are Worlds too
1 parent 0d6579a commit e7ef4a5

File tree

5 files changed

+40
-85
lines changed

5 files changed

+40
-85
lines changed

crates/bevy_transform/src/components/children.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ impl MapEntities for Children {
2626

2727
// TODO: We need to impl either FromWorld or Default so Children can be registered as Reflect.
2828
// This is because Reflect deserialize by creating an instance and apply a patch on top.
29-
// However Children should only ever be set with a real user-defined entities. Its worth looking
29+
// However Children should only ever be set with a real user-defined entities. Its worth looking
3030
// into better ways to handle cases like this.
3131
impl FromWorld for Children {
3232
fn from_world(_world: &mut World) -> Self {

crates/bevy_transform/src/hierarchy/child_builder.rs

+36-53
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ use bevy_ecs::{
1212
use smallvec::SmallVec;
1313

1414
fn push_move_events(world: &mut World, events: SmallVec<[ChildMoved; 8]>) {
15-
{
16-
let mut removed = world.resource_mut::<Events<ChildRemoved>>();
15+
if let Some(mut removed) = world.get_resource_mut::<Events<ChildRemoved>>() {
1716
for evt in events.iter() {
1817
removed.send(ChildRemoved {
1918
child: evt.child,
@@ -22,19 +21,21 @@ fn push_move_events(world: &mut World, events: SmallVec<[ChildMoved; 8]>) {
2221
}
2322
}
2423

25-
let mut moved_events = world.resource_mut::<Events<ChildMoved>>();
26-
for evt in events {
27-
moved_events.send(evt);
24+
if let Some(mut moved) = world.get_resource_mut::<Events<ChildMoved>>() {
25+
for evt in events {
26+
moved.send(evt);
27+
}
2828
}
2929
}
3030

3131
fn push_add_events(world: &mut World, parent: Entity, children: &[Entity]) {
32-
let mut added = world.resource_mut::<Events<ChildAdded>>();
33-
for child in children.iter() {
34-
added.send(ChildAdded {
35-
child: *child,
36-
parent,
37-
});
32+
if let Some(mut added) = world.get_resource_mut::<Events<ChildAdded>>() {
33+
for child in children.iter() {
34+
added.send(ChildAdded {
35+
child: *child,
36+
parent,
37+
});
38+
}
3839
}
3940
}
4041

@@ -106,17 +107,19 @@ impl Command for AddChild {
106107
}
107108
if let Some(previous) = previous {
108109
remove_from_children(world, previous, self.child);
109-
world
110-
.resource_mut::<Events<ChildRemoved>>()
111-
.send(ChildRemoved {
110+
if let Some(mut removed) = world.get_resource_mut::<Events<ChildRemoved>>() {
111+
removed.send(ChildRemoved {
112112
child: self.child,
113113
parent: previous,
114114
});
115-
world.resource_mut::<Events<ChildMoved>>().send(ChildMoved {
116-
child: self.child,
117-
previous_parent: previous,
118-
new_parent: self.parent,
119-
});
115+
}
116+
if let Some(mut removed) = world.get_resource_mut::<Events<ChildMoved>>() {
117+
removed.send(ChildMoved {
118+
child: self.child,
119+
previous_parent: previous,
120+
new_parent: self.parent,
121+
});
122+
}
120123
}
121124
let mut parent = world.entity_mut(self.parent);
122125
if let Some(mut children) = parent.get_mut::<Children>() {
@@ -126,10 +129,12 @@ impl Command for AddChild {
126129
} else {
127130
parent.insert(Children(smallvec::smallvec![self.child]));
128131
}
129-
world.resource_mut::<Events<ChildAdded>>().send(ChildAdded {
130-
child: self.child,
131-
parent: self.parent,
132-
});
132+
if let Some(mut added) = world.get_resource_mut::<Events<ChildAdded>>() {
133+
added.send(ChildAdded {
134+
child: self.child,
135+
parent: self.parent,
136+
});
137+
}
133138
}
134139
}
135140

@@ -190,8 +195,7 @@ fn remove_children(parent: Entity, children: &[Entity], world: &mut World) {
190195
});
191196
}
192197

193-
{
194-
let mut removed = world.resource_mut::<Events<ChildRemoved>>();
198+
if let Some(mut removed) = world.get_resource_mut::<Events<ChildRemoved>>() {
195199
for evt in events {
196200
removed.send(evt);
197201
}
@@ -331,12 +335,12 @@ impl<'w> WorldChildBuilder<'w> {
331335
.id();
332336
push_child_unchecked(self.world, parent_entity, entity);
333337
self.current_entity = Some(entity);
334-
self.world
335-
.resource_mut::<Events<ChildAdded>>()
336-
.send(ChildAdded {
338+
if let Some(mut added) = self.world.get_resource_mut::<Events<ChildAdded>>() {
339+
added.send(ChildAdded {
337340
child: entity,
338341
parent: parent_entity,
339342
});
343+
}
340344
self.world.entity_mut(entity)
341345
}
342346

@@ -346,12 +350,12 @@ impl<'w> WorldChildBuilder<'w> {
346350
let entity = self.world.spawn().insert(Parent(parent_entity)).id();
347351
push_child_unchecked(self.world, parent_entity, entity);
348352
self.current_entity = Some(entity);
349-
self.world
350-
.resource_mut::<Events<ChildAdded>>()
351-
.send(ChildAdded {
353+
if let Some(mut added) = self.world.get_resource_mut::<Events<ChildAdded>>() {
354+
added.send(ChildAdded {
352355
child: entity,
353356
parent: parent_entity,
354357
});
358+
}
355359
self.world.entity_mut(entity)
356360
}
357361

@@ -510,11 +514,10 @@ impl<'w> BuildWorldChildren for WorldChildBuilder<'w> {
510514
#[cfg(test)]
511515
mod tests {
512516
use super::{BuildChildren, BuildWorldChildren};
513-
use crate::prelude::{ChildAdded, ChildMoved, ChildRemoved, Children, Parent};
517+
use crate::prelude::{Children, Parent};
514518
use bevy_ecs::{
515519
component::Component,
516520
entity::Entity,
517-
event::Events,
518521
system::{CommandQueue, Commands},
519522
world::World,
520523
};
@@ -526,11 +529,6 @@ mod tests {
526529
#[test]
527530
fn build_children() {
528531
let mut world = World::default();
529-
530-
world.insert_resource(Events::<ChildAdded>::default());
531-
world.insert_resource(Events::<ChildRemoved>::default());
532-
world.insert_resource(Events::<ChildMoved>::default());
533-
534532
let mut queue = CommandQueue::default();
535533
let mut commands = Commands::new(&mut queue, &world);
536534

@@ -557,11 +555,6 @@ mod tests {
557555
#[test]
558556
fn push_and_insert_and_remove_children_commands() {
559557
let mut world = World::default();
560-
561-
world.insert_resource(Events::<ChildAdded>::default());
562-
world.insert_resource(Events::<ChildRemoved>::default());
563-
world.insert_resource(Events::<ChildMoved>::default());
564-
565558
let entities = world
566559
.spawn_batch(vec![(C(1),), (C(2),), (C(3),), (C(4),), (C(5),)])
567560
.collect::<Vec<Entity>>();
@@ -625,11 +618,6 @@ mod tests {
625618
#[test]
626619
fn push_and_insert_and_remove_children_world() {
627620
let mut world = World::default();
628-
629-
world.insert_resource(Events::<ChildAdded>::default());
630-
world.insert_resource(Events::<ChildRemoved>::default());
631-
world.insert_resource(Events::<ChildMoved>::default());
632-
633621
let entities = world
634622
.spawn_batch(vec![(C(1),), (C(2),), (C(3),), (C(4),), (C(5),)])
635623
.collect::<Vec<Entity>>();
@@ -678,11 +666,6 @@ mod tests {
678666
#[test]
679667
fn regression_push_children_same_archetype() {
680668
let mut world = World::new();
681-
682-
world.insert_resource(Events::<ChildAdded>::default());
683-
world.insert_resource(Events::<ChildRemoved>::default());
684-
world.insert_resource(Events::<ChildMoved>::default());
685-
686669
let child = world.spawn().id();
687670
world.spawn().push_children(&[child]);
688671
}

crates/bevy_transform/src/hierarchy/hierarchy.rs

+1-10
Original file line numberDiff line numberDiff line change
@@ -111,16 +111,12 @@ impl<'w> DespawnRecursiveExt for EntityMut<'w> {
111111
mod tests {
112112
use bevy_ecs::{
113113
component::Component,
114-
event::Events,
115114
system::{CommandQueue, Commands},
116115
world::World,
117116
};
118117

119118
use super::DespawnRecursiveExt;
120-
use crate::{
121-
components::Children,
122-
hierarchy::{BuildChildren, ChildAdded, ChildMoved, ChildRemoved},
123-
};
119+
use crate::{components::Children, hierarchy::BuildChildren};
124120

125121
#[derive(Component, Clone, Copy, PartialEq, Eq, Ord, PartialOrd, Debug)]
126122
struct Idx(u32);
@@ -131,11 +127,6 @@ mod tests {
131127
#[test]
132128
fn despawn_recursive() {
133129
let mut world = World::default();
134-
135-
world.insert_resource(Events::<ChildAdded>::default());
136-
world.insert_resource(Events::<ChildRemoved>::default());
137-
world.insert_resource(Events::<ChildMoved>::default());
138-
139130
let mut queue = CommandQueue::default();
140131
let grandparent_entity;
141132
{

crates/bevy_transform/src/transform_propagate_system.rs

+1-11
Original file line numberDiff line numberDiff line change
@@ -76,26 +76,21 @@ fn propagate_recursive(
7676
#[cfg(test)]
7777
mod test {
7878
use bevy_ecs::{
79-
event::Events,
8079
schedule::{Schedule, Stage, SystemStage},
8180
system::{CommandQueue, Commands},
8281
world::World,
8382
};
8483

8584
use super::*;
8685
use crate::{
87-
hierarchy::{BuildChildren, BuildWorldChildren, ChildAdded, ChildMoved, ChildRemoved},
86+
hierarchy::{BuildChildren, BuildWorldChildren},
8887
TransformBundle,
8988
};
9089

9190
#[test]
9291
fn did_propagate() {
9392
let mut world = World::default();
9493

95-
world.insert_resource(Events::<ChildAdded>::default());
96-
world.insert_resource(Events::<ChildRemoved>::default());
97-
world.insert_resource(Events::<ChildMoved>::default());
98-
9994
let mut update_stage = SystemStage::parallel();
10095
update_stage.add_system(transform_propagate_system);
10196

@@ -139,11 +134,6 @@ mod test {
139134
#[test]
140135
fn did_propagate_command_buffer() {
141136
let mut world = World::default();
142-
143-
world.insert_resource(Events::<ChildAdded>::default());
144-
world.insert_resource(Events::<ChildRemoved>::default());
145-
world.insert_resource(Events::<ChildMoved>::default());
146-
147137
let mut update_stage = SystemStage::parallel();
148138
update_stage.add_system(transform_propagate_system);
149139

crates/bevy_ui/src/update.rs

+1-10
Original file line numberDiff line numberDiff line change
@@ -137,15 +137,11 @@ fn update_clipping(
137137
mod tests {
138138
use bevy_ecs::{
139139
component::Component,
140-
event::Events,
141140
schedule::{Schedule, Stage, SystemStage},
142141
system::{CommandQueue, Commands},
143142
world::World,
144143
};
145-
use bevy_transform::{
146-
components::Transform,
147-
hierarchy::{BuildChildren, ChildAdded, ChildMoved, ChildRemoved},
148-
};
144+
use bevy_transform::{components::Transform, hierarchy::BuildChildren};
149145

150146
use crate::Node;
151147

@@ -169,11 +165,6 @@ mod tests {
169165
#[test]
170166
fn test_ui_z_system() {
171167
let mut world = World::default();
172-
173-
world.insert_resource(Events::<ChildAdded>::default());
174-
world.insert_resource(Events::<ChildRemoved>::default());
175-
world.insert_resource(Events::<ChildMoved>::default());
176-
177168
let mut queue = CommandQueue::default();
178169
let mut commands = Commands::new(&mut queue, &world);
179170
commands.spawn_bundle(node_with_transform("0"));

0 commit comments

Comments
 (0)