Skip to content

Commit 646a2c9

Browse files
committed
Implement for all label types
1 parent 5e651d0 commit 646a2c9

File tree

8 files changed

+28
-28
lines changed

8 files changed

+28
-28
lines changed

crates/bevy_app/src/app.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,7 @@ impl App {
864864
sub_app_runner: impl Fn(&mut World, &mut App) + 'static,
865865
) -> &mut Self {
866866
self.sub_apps.insert(
867-
Box::new(label),
867+
label.dyn_clone(),
868868
SubApp {
869869
app,
870870
runner: Box::new(sub_app_runner),

crates/bevy_ecs/src/schedule/label.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,6 @@ define_label!(SystemLabel);
66
define_label!(AmbiguitySetLabel);
77
define_label!(RunCriteriaLabel);
88

9-
impl StageLabel for Box<dyn StageLabel> {
10-
fn dyn_clone(&self) -> Box<dyn StageLabel> {
11-
self.as_ref().dyn_clone()
12-
}
13-
}
14-
159
pub(crate) type BoxedStageLabel = Box<dyn StageLabel>;
1610
pub(crate) type BoxedSystemLabel = Box<dyn SystemLabel>;
1711
pub(crate) type BoxedAmbiguitySetLabel = Box<dyn AmbiguitySetLabel>;

crates/bevy_ecs/src/schedule/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ impl Schedule {
111111
/// schedule.add_stage("my_stage", SystemStage::parallel());
112112
/// ```
113113
pub fn add_stage<S: Stage>(&mut self, label: impl StageLabel, stage: S) -> &mut Self {
114-
let label: Box<dyn StageLabel> = Box::new(label);
114+
let label: Box<dyn StageLabel> = label.dyn_clone();
115115
self.stage_order.push(label.clone());
116116
let prev = self.stages.insert(label.clone(), Box::new(stage));
117117
assert!(prev.is_none(), "Stage already exists: {:?}.", label);
@@ -135,7 +135,7 @@ impl Schedule {
135135
label: impl StageLabel,
136136
stage: S,
137137
) -> &mut Self {
138-
let label: Box<dyn StageLabel> = Box::new(label);
138+
let label: Box<dyn StageLabel> = label.dyn_clone();
139139
let target = &target as &dyn StageLabel;
140140
let target_index = self
141141
.stage_order
@@ -169,7 +169,7 @@ impl Schedule {
169169
label: impl StageLabel,
170170
stage: S,
171171
) -> &mut Self {
172-
let label: Box<dyn StageLabel> = Box::new(label);
172+
let label: Box<dyn StageLabel> = label.dyn_clone();
173173
let target = &target as &dyn StageLabel;
174174
let target_index = self
175175
.stage_order

crates/bevy_ecs/src/schedule/run_criteria.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ where
205205
L: RunCriteriaLabel,
206206
{
207207
fn into(self) -> RunCriteriaDescriptorOrLabel {
208-
RunCriteriaDescriptorOrLabel::Label(Box::new(self))
208+
RunCriteriaDescriptorOrLabel::Label(self.dyn_clone())
209209
}
210210
}
211211

@@ -232,24 +232,24 @@ pub trait RunCriteriaDescriptorCoercion<Param> {
232232

233233
impl RunCriteriaDescriptorCoercion<()> for RunCriteriaDescriptor {
234234
fn label(mut self, label: impl RunCriteriaLabel) -> RunCriteriaDescriptor {
235-
self.label = Some(Box::new(label));
235+
self.label = Some(label.dyn_clone());
236236
self.duplicate_label_strategy = DuplicateLabelStrategy::Panic;
237237
self
238238
}
239239

240240
fn label_discard_if_duplicate(mut self, label: impl RunCriteriaLabel) -> RunCriteriaDescriptor {
241-
self.label = Some(Box::new(label));
241+
self.label = Some(label.dyn_clone());
242242
self.duplicate_label_strategy = DuplicateLabelStrategy::Discard;
243243
self
244244
}
245245

246246
fn before(mut self, label: impl RunCriteriaLabel) -> RunCriteriaDescriptor {
247-
self.before.push(Box::new(label));
247+
self.before.push(label.dyn_clone());
248248
self
249249
}
250250

251251
fn after(mut self, label: impl RunCriteriaLabel) -> RunCriteriaDescriptor {
252-
self.after.push(Box::new(label));
252+
self.after.push(label.dyn_clone());
253253
self
254254
}
255255
}
@@ -320,7 +320,7 @@ impl RunCriteria {
320320
label: None,
321321
duplicate_label_strategy: DuplicateLabelStrategy::Panic,
322322
before: vec![],
323-
after: vec![Box::new(label)],
323+
after: vec![label.dyn_clone()],
324324
}
325325
}
326326
}

crates/bevy_ecs/src/schedule/system_descriptor.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -149,22 +149,22 @@ impl ParallelSystemDescriptorCoercion<()> for ParallelSystemDescriptor {
149149
}
150150

151151
fn label(mut self, label: impl SystemLabel) -> ParallelSystemDescriptor {
152-
self.labels.push(Box::new(label));
152+
self.labels.push(label.dyn_clone());
153153
self
154154
}
155155

156156
fn before<Marker>(mut self, label: impl AsSystemLabel<Marker>) -> ParallelSystemDescriptor {
157-
self.before.push(Box::new(label.as_system_label()));
157+
self.before.push(label.as_system_label().dyn_clone());
158158
self
159159
}
160160

161161
fn after<Marker>(mut self, label: impl AsSystemLabel<Marker>) -> ParallelSystemDescriptor {
162-
self.after.push(Box::new(label.as_system_label()));
162+
self.after.push(label.as_system_label().dyn_clone());
163163
self
164164
}
165165

166166
fn in_ambiguity_set(mut self, set: impl AmbiguitySetLabel) -> ParallelSystemDescriptor {
167-
self.ambiguity_sets.push(Box::new(set));
167+
self.ambiguity_sets.push(set.dyn_clone());
168168
self
169169
}
170170
}
@@ -295,22 +295,22 @@ impl ExclusiveSystemDescriptorCoercion for ExclusiveSystemDescriptor {
295295
}
296296

297297
fn label(mut self, label: impl SystemLabel) -> ExclusiveSystemDescriptor {
298-
self.labels.push(Box::new(label));
298+
self.labels.push(label.dyn_clone());
299299
self
300300
}
301301

302302
fn before(mut self, label: impl SystemLabel) -> ExclusiveSystemDescriptor {
303-
self.before.push(Box::new(label));
303+
self.before.push(label.dyn_clone());
304304
self
305305
}
306306

307307
fn after(mut self, label: impl SystemLabel) -> ExclusiveSystemDescriptor {
308-
self.after.push(Box::new(label));
308+
self.after.push(label.dyn_clone());
309309
self
310310
}
311311

312312
fn in_ambiguity_set(mut self, set: impl AmbiguitySetLabel) -> ExclusiveSystemDescriptor {
313-
self.ambiguity_sets.push(Box::new(set));
313+
self.ambiguity_sets.push(set.dyn_clone());
314314
self
315315
}
316316

crates/bevy_ecs/src/schedule/system_set.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,19 @@ impl SystemSet {
9090

9191
#[must_use]
9292
pub fn label(mut self, label: impl SystemLabel) -> Self {
93-
self.labels.push(Box::new(label));
93+
self.labels.push(label.dyn_clone());
9494
self
9595
}
9696

9797
#[must_use]
9898
pub fn before(mut self, label: impl SystemLabel) -> Self {
99-
self.before.push(Box::new(label));
99+
self.before.push(label.dyn_clone());
100100
self
101101
}
102102

103103
#[must_use]
104104
pub fn after(mut self, label: impl SystemLabel) -> Self {
105-
self.after.push(Box::new(label));
105+
self.after.push(label.dyn_clone());
106106
self
107107
}
108108

crates/bevy_ecs/src/system/function_system.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -446,7 +446,7 @@ where
446446
);
447447
}
448448
fn default_labels(&self) -> Vec<Box<dyn SystemLabel>> {
449-
vec![Box::new(self.func.as_system_label())]
449+
vec![self.func.as_system_label().dyn_clone()]
450450
}
451451
}
452452

crates/bevy_utils/src/label.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,5 +97,11 @@ macro_rules! define_label {
9797
Box::new(<&str>::clone(self))
9898
}
9999
}
100+
101+
impl $label_trait_name for Box<dyn $label_trait_name> {
102+
fn dyn_clone(&self) -> Self {
103+
self.as_ref().dyn_clone()
104+
}
105+
}
100106
};
101107
}

0 commit comments

Comments
 (0)