Skip to content

Commit 8e4bda1

Browse files
cartKu95
authored and
Ku95
committed
default() shorthand (bevyengine#4071)
Adds a `default()` shorthand for `Default::default()` ... because life is too short to constantly type `Default::default()`. ```rust use bevy::prelude::*; #[derive(Default)] struct Foo { bar: usize, baz: usize, } // Normally you would do this: let foo = Foo { bar: 10, ..Default::default() }; // But now you can do this: let foo = Foo { bar: 10, ..default() }; ``` The examples have been adapted to use `..default()`. I've left internal crates as-is for now because they don't pull in the bevy prelude, and the ergonomics of each case should be considered individually.
1 parent 05fbc04 commit 8e4bda1

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+446
-408
lines changed

crates/bevy_internal/src/prelude.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
pub use crate::{
33
app::prelude::*, asset::prelude::*, core::prelude::*, ecs::prelude::*, input::prelude::*,
44
log::prelude::*, math::prelude::*, reflect::prelude::*, scene::prelude::*,
5-
transform::prelude::*, window::prelude::*, DefaultPlugins, MinimalPlugins,
5+
transform::prelude::*, utils::prelude::*, window::prelude::*, DefaultPlugins, MinimalPlugins,
66
};
77

88
pub use bevy_derive::bevy_main;

crates/bevy_utils/src/default.rs

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/// An ergonomic abbreviation for [`Default::default()`] to make initializing structs easier.
2+
/// This is especially helpful when combined with ["struct update syntax"](https://doc.rust-lang.org/book/ch05-01-defining-structs.html#creating-instances-from-other-instances-with-struct-update-syntax).
3+
/// ```
4+
/// use bevy_utils::default;
5+
///
6+
/// #[derive(Default)]
7+
/// struct Foo {
8+
/// a: usize,
9+
/// b: usize,
10+
/// c: usize,
11+
/// }
12+
///
13+
/// // Normally you would initialize a struct with defaults using "struct update syntax"
14+
/// // combined with `Default::default()`. This example sets `Foo::bar` to 10 and the remaining
15+
/// // values to their defaults.
16+
/// let foo = Foo {
17+
/// a: 10,
18+
/// ..Default::default()
19+
/// };
20+
///
21+
/// // But now you can do this, which is equivalent:
22+
/// let foo = Foo {
23+
/// a: 10,
24+
/// ..default()
25+
/// };
26+
/// ```
27+
#[inline]
28+
pub fn default<T: Default>() -> T {
29+
std::default::Default::default()
30+
}

crates/bevy_utils/src/lib.rs

+11-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
1-
mod enum_variant_meta;
1+
pub mod prelude {
2+
pub use crate::default;
3+
}
4+
25
pub mod label;
36

7+
mod default;
8+
mod enum_variant_meta;
9+
410
pub use ahash::AHasher;
11+
pub use default::default;
512
pub use enum_variant_meta::*;
6-
pub type Entry<'a, K, V> = hashbrown::hash_map::Entry<'a, K, V, RandomState>;
713
pub use hashbrown;
8-
use hashbrown::hash_map::RawEntryMut;
914
pub use instant::{Duration, Instant};
1015
pub use tracing;
1116
pub use uuid::Uuid;
1217

1318
use ahash::RandomState;
19+
use hashbrown::hash_map::RawEntryMut;
1420
use std::{
1521
fmt::Debug,
1622
future::Future,
@@ -26,6 +32,8 @@ pub type BoxedFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
2632
#[cfg(target_arch = "wasm32")]
2733
pub type BoxedFuture<'a, T> = Pin<Box<dyn Future<Output = T> + 'a>>;
2834

35+
pub type Entry<'a, K, V> = hashbrown::hash_map::Entry<'a, K, V, RandomState>;
36+
2937
/// A hasher builder that will create a fixed hasher.
3038
#[derive(Debug, Clone, Default)]
3139
pub struct FixedState;

examples/2d/contributors.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -100,11 +100,11 @@ fn setup_contributor_selection(mut commands: Commands, asset_server: Res<AssetSe
100100
custom_size: Some(Vec2::new(1.0, 1.0) * SPRITE_SIZE),
101101
color: Color::hsla(hue, SATURATION_DESELECTED, LIGHTNESS_DESELECTED, ALPHA),
102102
flip_x: flipped,
103-
..Default::default()
103+
..default()
104104
},
105105
texture: texture_handle.clone(),
106106
transform,
107-
..Default::default()
107+
..default()
108108
})
109109
.id();
110110

@@ -126,7 +126,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
126126
.insert_bundle(TextBundle {
127127
style: Style {
128128
align_self: AlignSelf::FlexEnd,
129-
..Default::default()
129+
..default()
130130
},
131131
text: Text {
132132
sections: vec![
@@ -147,9 +147,9 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
147147
},
148148
},
149149
],
150-
..Default::default()
150+
..default()
151151
},
152-
..Default::default()
152+
..default()
153153
});
154154
}
155155

examples/2d/many_sprites.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,9 @@ fn setup(mut commands: Commands, assets: Res<AssetServer>) {
5757
},
5858
sprite: Sprite {
5959
custom_size: Some(tile_size),
60-
..Default::default()
60+
..default()
6161
},
62-
..Default::default()
62+
..default()
6363
});
6464
}
6565
}

examples/2d/mesh2d.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@ fn setup(
1717
mesh: meshes.add(Mesh::from(shape::Quad::default())).into(),
1818
transform: Transform::default().with_scale(Vec3::splat(128.)),
1919
material: materials.add(ColorMaterial::from(Color::PURPLE)),
20-
..Default::default()
20+
..default()
2121
});
2222
}

examples/2d/move_sprite.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
2020
.spawn_bundle(SpriteBundle {
2121
texture: asset_server.load("branding/icon.png"),
2222
transform: Transform::from_xyz(100., 0., 0.),
23-
..Default::default()
23+
..default()
2424
})
2525
.insert(Direction::Up);
2626
}

examples/2d/rect.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ fn setup(mut commands: Commands) {
1313
sprite: Sprite {
1414
color: Color::rgb(0.25, 0.25, 0.75),
1515
custom_size: Some(Vec2::new(50.0, 50.0)),
16-
..Default::default()
16+
..default()
1717
},
18-
..Default::default()
18+
..default()
1919
});
2020
}

examples/2d/rotation.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
6666
commands
6767
.spawn_bundle(SpriteBundle {
6868
texture: ship_handle,
69-
..Default::default()
69+
..default()
7070
})
7171
.insert(Player {
7272
movement_speed: 500.0, // metres per second
@@ -78,14 +78,14 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
7878
.spawn_bundle(SpriteBundle {
7979
texture: enemy_a_handle.clone(),
8080
transform: Transform::from_xyz(0.0 - horizontal_margin, 0.0, 0.0),
81-
..Default::default()
81+
..default()
8282
})
8383
.insert(SnapToPlayer);
8484
commands
8585
.spawn_bundle(SpriteBundle {
8686
texture: enemy_a_handle,
8787
transform: Transform::from_xyz(0.0, 0.0 - vertical_margin, 0.0),
88-
..Default::default()
88+
..default()
8989
})
9090
.insert(SnapToPlayer);
9191

@@ -94,7 +94,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
9494
.spawn_bundle(SpriteBundle {
9595
texture: enemy_b_handle.clone(),
9696
transform: Transform::from_xyz(0.0 + horizontal_margin, 0.0, 0.0),
97-
..Default::default()
97+
..default()
9898
})
9999
.insert(RotateToPlayer {
100100
rotation_speed: f32::to_radians(45.0), // degrees per second
@@ -103,7 +103,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
103103
.spawn_bundle(SpriteBundle {
104104
texture: enemy_b_handle,
105105
transform: Transform::from_xyz(0.0, 0.0 + vertical_margin, 0.0),
106-
..Default::default()
106+
..default()
107107
})
108108
.insert(RotateToPlayer {
109109
rotation_speed: f32::to_radians(90.0), // degrees per second

examples/2d/sprite.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,6 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
1111
commands.spawn_bundle(OrthographicCameraBundle::new_2d());
1212
commands.spawn_bundle(SpriteBundle {
1313
texture: asset_server.load("branding/icon.png"),
14-
..Default::default()
14+
..default()
1515
});
1616
}

examples/2d/sprite_flipping.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
1616
flip_x: true,
1717
// And don't flip it upside-down ( the default )
1818
flip_y: false,
19-
..Default::default()
19+
..default()
2020
},
21-
..Default::default()
21+
..default()
2222
});
2323
}

examples/2d/sprite_sheet.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ fn setup(
4242
.spawn_bundle(SpriteSheetBundle {
4343
texture_atlas: texture_atlas_handle,
4444
transform: Transform::from_scale(Vec3::splat(6.0)),
45-
..Default::default()
45+
..default()
4646
})
4747
.insert(AnimationTimer(Timer::from_seconds(0.1, true)));
4848
}

examples/2d/text2d.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -34,21 +34,21 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
3434
commands
3535
.spawn_bundle(Text2dBundle {
3636
text: Text::with_section("translation", text_style.clone(), text_alignment),
37-
..Default::default()
37+
..default()
3838
})
3939
.insert(AnimateTranslation);
4040
// Demonstrate changing rotation
4141
commands
4242
.spawn_bundle(Text2dBundle {
4343
text: Text::with_section("rotation", text_style.clone(), text_alignment),
44-
..Default::default()
44+
..default()
4545
})
4646
.insert(AnimateRotation);
4747
// Demonstrate changing scale
4848
commands
4949
.spawn_bundle(Text2dBundle {
5050
text: Text::with_section("scale", text_style, text_alignment),
51-
..Default::default()
51+
..default()
5252
})
5353
.insert(AnimateScale);
5454
}

examples/2d/texture_atlas.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -66,16 +66,16 @@ fn setup(
6666
transform: Transform {
6767
translation: Vec3::new(150.0, 0.0, 0.0),
6868
scale: Vec3::splat(4.0),
69-
..Default::default()
69+
..default()
7070
},
7171
sprite: TextureAtlasSprite::new(vendor_index),
7272
texture_atlas: atlas_handle,
73-
..Default::default()
73+
..default()
7474
});
7575
// draw the atlas itself
7676
commands.spawn_bundle(SpriteBundle {
7777
texture: texture_atlas_texture,
7878
transform: Transform::from_xyz(-300.0, 0.0, 0.0),
79-
..Default::default()
79+
..default()
8080
});
8181
}

examples/3d/3d_scene.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -18,28 +18,28 @@ fn setup(
1818
commands.spawn_bundle(PbrBundle {
1919
mesh: meshes.add(Mesh::from(shape::Plane { size: 5.0 })),
2020
material: materials.add(Color::rgb(0.3, 0.5, 0.3).into()),
21-
..Default::default()
21+
..default()
2222
});
2323
// cube
2424
commands.spawn_bundle(PbrBundle {
2525
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
2626
material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
2727
transform: Transform::from_xyz(0.0, 0.5, 0.0),
28-
..Default::default()
28+
..default()
2929
});
3030
// light
3131
commands.spawn_bundle(PointLightBundle {
3232
point_light: PointLight {
3333
intensity: 1500.0,
3434
shadows_enabled: true,
35-
..Default::default()
35+
..default()
3636
},
3737
transform: Transform::from_xyz(4.0, 8.0, 4.0),
38-
..Default::default()
38+
..default()
3939
});
4040
// camera
4141
commands.spawn_bundle(PerspectiveCameraBundle {
4242
transform: Transform::from_xyz(-2.0, 2.5, 5.0).looking_at(Vec3::ZERO, Vec3::Y),
43-
..Default::default()
43+
..default()
4444
});
4545
}

0 commit comments

Comments
 (0)