mirror of
https://github.com/bevyengine/bevy
synced 2024-11-25 06:00:20 +00:00
Fix CI for Rust 1.72 (#9562)
# Objective [Rust 1.72.0](https://blog.rust-lang.org/2023/08/24/Rust-1.72.0.html) is now stable. # Notes - `let-else` formatting has arrived! - I chose to allow `explicit_iter_loop` due to https://github.com/rust-lang/rust-clippy/issues/11074. We didn't hit any of the false positives that prevent compilation, but fixing this did produce a lot of the "symbol soup" mentioned, e.g. `for image in &mut *image_events {`. Happy to undo this if there's consensus the other way. --------- Co-authored-by: François <mockersf@gmail.com>
This commit is contained in:
parent
b88ff154f2
commit
a788e31ad5
46 changed files with 235 additions and 159 deletions
|
@ -341,9 +341,13 @@ fn verify_no_ancestor_player(
|
||||||
player_parent: Option<&Parent>,
|
player_parent: Option<&Parent>,
|
||||||
parents: &Query<(Option<With<AnimationPlayer>>, Option<&Parent>)>,
|
parents: &Query<(Option<With<AnimationPlayer>>, Option<&Parent>)>,
|
||||||
) -> bool {
|
) -> bool {
|
||||||
let Some(mut current) = player_parent.map(Parent::get) else { return true };
|
let Some(mut current) = player_parent.map(Parent::get) else {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
loop {
|
loop {
|
||||||
let Ok((maybe_player, parent)) = parents.get(current) else { return true };
|
let Ok((maybe_player, parent)) = parents.get(current) else {
|
||||||
|
return true;
|
||||||
|
};
|
||||||
if maybe_player.is_some() {
|
if maybe_player.is_some() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -506,7 +510,9 @@ fn apply_animation(
|
||||||
for (path, bone_id) in &animation_clip.paths {
|
for (path, bone_id) in &animation_clip.paths {
|
||||||
let cached_path = &mut animation.path_cache[*bone_id];
|
let cached_path = &mut animation.path_cache[*bone_id];
|
||||||
let curves = animation_clip.get_curves(*bone_id).unwrap();
|
let curves = animation_clip.get_curves(*bone_id).unwrap();
|
||||||
let Some(target) = entity_from_path(root, path, children, names, cached_path) else { continue };
|
let Some(target) = entity_from_path(root, path, children, names, cached_path) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
// SAFETY: The verify_no_ancestor_player check above ensures that two animation players cannot alias
|
// SAFETY: The verify_no_ancestor_player check above ensures that two animation players cannot alias
|
||||||
// any of their descendant Transforms.
|
// any of their descendant Transforms.
|
||||||
//
|
//
|
||||||
|
@ -519,7 +525,9 @@ fn apply_animation(
|
||||||
// This means only the AnimationPlayers closest to the root of the hierarchy will be able
|
// This means only the AnimationPlayers closest to the root of the hierarchy will be able
|
||||||
// to run their animation. Any players in the children or descendants will log a warning
|
// to run their animation. Any players in the children or descendants will log a warning
|
||||||
// and do nothing.
|
// and do nothing.
|
||||||
let Ok(mut transform) = (unsafe { transforms.get_unchecked(target) }) else { continue };
|
let Ok(mut transform) = (unsafe { transforms.get_unchecked(target) }) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
let mut morphs = unsafe { morphs.get_unchecked(target) };
|
let mut morphs = unsafe { morphs.get_unchecked(target) };
|
||||||
for curve in curves {
|
for curve in curves {
|
||||||
// Some curves have only one keyframe used to set a transform
|
// Some curves have only one keyframe used to set a transform
|
||||||
|
|
|
@ -790,7 +790,8 @@ mod test {
|
||||||
let asset_server = setup(".");
|
let asset_server = setup(".");
|
||||||
asset_server.add_loader(FakePngLoader);
|
asset_server.add_loader(FakePngLoader);
|
||||||
|
|
||||||
let Ok(MaybeAssetLoader::Ready(t)) = asset_server.get_path_asset_loader("test.png", true) else {
|
let Ok(MaybeAssetLoader::Ready(t)) = asset_server.get_path_asset_loader("test.png", true)
|
||||||
|
else {
|
||||||
panic!();
|
panic!();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -802,7 +803,8 @@ mod test {
|
||||||
let asset_server = setup(".");
|
let asset_server = setup(".");
|
||||||
asset_server.add_loader(FakePngLoader);
|
asset_server.add_loader(FakePngLoader);
|
||||||
|
|
||||||
let Ok(MaybeAssetLoader::Ready(t)) = asset_server.get_path_asset_loader("test.PNG", true) else {
|
let Ok(MaybeAssetLoader::Ready(t)) = asset_server.get_path_asset_loader("test.PNG", true)
|
||||||
|
else {
|
||||||
panic!();
|
panic!();
|
||||||
};
|
};
|
||||||
assert_eq!(t.extensions()[0], "png");
|
assert_eq!(t.extensions()[0], "png");
|
||||||
|
@ -855,7 +857,9 @@ mod test {
|
||||||
let asset_server = setup(".");
|
let asset_server = setup(".");
|
||||||
asset_server.add_loader(FakePngLoader);
|
asset_server.add_loader(FakePngLoader);
|
||||||
|
|
||||||
let Ok(MaybeAssetLoader::Ready(t)) = asset_server.get_path_asset_loader("test-v1.2.3.png", true) else {
|
let Ok(MaybeAssetLoader::Ready(t)) =
|
||||||
|
asset_server.get_path_asset_loader("test-v1.2.3.png", true)
|
||||||
|
else {
|
||||||
panic!();
|
panic!();
|
||||||
};
|
};
|
||||||
assert_eq!(t.extensions()[0], "png");
|
assert_eq!(t.extensions()[0], "png");
|
||||||
|
@ -866,7 +870,9 @@ mod test {
|
||||||
let asset_server = setup(".");
|
let asset_server = setup(".");
|
||||||
asset_server.add_loader(FakeMultipleDotLoader);
|
asset_server.add_loader(FakeMultipleDotLoader);
|
||||||
|
|
||||||
let Ok(MaybeAssetLoader::Ready(t)) = asset_server.get_path_asset_loader("test.test.png", true) else {
|
let Ok(MaybeAssetLoader::Ready(t)) =
|
||||||
|
asset_server.get_path_asset_loader("test.test.png", true)
|
||||||
|
else {
|
||||||
panic!();
|
panic!();
|
||||||
};
|
};
|
||||||
assert_eq!(t.extensions()[0], "test.png");
|
assert_eq!(t.extensions()[0], "test.png");
|
||||||
|
|
|
@ -201,7 +201,9 @@ pub fn filesystem_watcher_system(
|
||||||
} = event
|
} = event
|
||||||
{
|
{
|
||||||
for path in &paths {
|
for path in &paths {
|
||||||
let Some(set) = watcher.path_map.get(path) else {continue};
|
let Some(set) = watcher.path_map.get(path) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
for to_reload in set {
|
for to_reload in set {
|
||||||
// When an asset is modified, note down the timestamp (overriding any previous modification events)
|
// When an asset is modified, note down the timestamp (overriding any previous modification events)
|
||||||
changed.insert(to_reload.to_owned(), Instant::now());
|
changed.insert(to_reload.to_owned(), Instant::now());
|
||||||
|
|
|
@ -19,7 +19,7 @@ impl Plugin for BlitPlugin {
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
return
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
render_app
|
render_app
|
||||||
|
|
|
@ -163,7 +163,10 @@ impl ViewNode for BloomNode {
|
||||||
pipeline_cache.get_render_pipeline(downsampling_pipeline_ids.main),
|
pipeline_cache.get_render_pipeline(downsampling_pipeline_ids.main),
|
||||||
pipeline_cache.get_render_pipeline(upsampling_pipeline_ids.id_main),
|
pipeline_cache.get_render_pipeline(upsampling_pipeline_ids.id_main),
|
||||||
pipeline_cache.get_render_pipeline(upsampling_pipeline_ids.id_final),
|
pipeline_cache.get_render_pipeline(upsampling_pipeline_ids.id_final),
|
||||||
) else { return Ok(()) };
|
)
|
||||||
|
else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
|
||||||
render_context.command_encoder().push_debug_group("bloom");
|
render_context.command_encoder().push_debug_group("bloom");
|
||||||
|
|
||||||
|
|
|
@ -53,10 +53,15 @@ impl Node for CASNode {
|
||||||
let sharpening_pipeline = world.resource::<CASPipeline>();
|
let sharpening_pipeline = world.resource::<CASPipeline>();
|
||||||
let uniforms = world.resource::<ComponentUniforms<CASUniform>>();
|
let uniforms = world.resource::<ComponentUniforms<CASUniform>>();
|
||||||
|
|
||||||
let Ok((target, pipeline, uniform_index)) = self.query.get_manual(world, view_entity) else { return Ok(()) };
|
let Ok((target, pipeline, uniform_index)) = self.query.get_manual(world, view_entity)
|
||||||
|
else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
|
||||||
let uniforms_id = uniforms.buffer().unwrap().id();
|
let uniforms_id = uniforms.buffer().unwrap().id();
|
||||||
let Some(uniforms) = uniforms.binding() else { return Ok(()) };
|
let Some(uniforms) = uniforms.binding() else {
|
||||||
|
return Ok(());
|
||||||
|
};
|
||||||
|
|
||||||
let pipeline = pipeline_cache.get_render_pipeline(pipeline.0).unwrap();
|
let pipeline = pipeline_cache.get_render_pipeline(pipeline.0).unwrap();
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ pub struct MsaaWritebackPlugin;
|
||||||
impl Plugin for MsaaWritebackPlugin {
|
impl Plugin for MsaaWritebackPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
return
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
render_app.add_systems(
|
render_app.add_systems(
|
||||||
|
|
|
@ -57,7 +57,9 @@ impl Plugin for TemporalAntiAliasPlugin {
|
||||||
app.insert_resource(Msaa::Off)
|
app.insert_resource(Msaa::Off)
|
||||||
.register_type::<TemporalAntiAliasSettings>();
|
.register_type::<TemporalAntiAliasSettings>();
|
||||||
|
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app
|
render_app
|
||||||
.init_resource::<SpecializedRenderPipelines<TAAPipeline>>()
|
.init_resource::<SpecializedRenderPipelines<TAAPipeline>>()
|
||||||
|
@ -86,7 +88,9 @@ impl Plugin for TemporalAntiAliasPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app.init_resource::<TAAPipeline>();
|
render_app.init_resource::<TAAPipeline>();
|
||||||
}
|
}
|
||||||
|
@ -188,11 +192,7 @@ impl ViewNode for TAANode {
|
||||||
) else {
|
) else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
};
|
};
|
||||||
let (
|
let (Some(taa_pipeline), Some(prepass_motion_vectors_texture), Some(prepass_depth_texture)) = (
|
||||||
Some(taa_pipeline),
|
|
||||||
Some(prepass_motion_vectors_texture),
|
|
||||||
Some(prepass_depth_texture),
|
|
||||||
) = (
|
|
||||||
pipeline_cache.get_render_pipeline(taa_pipeline_id.0),
|
pipeline_cache.get_render_pipeline(taa_pipeline_id.0),
|
||||||
&prepass_textures.motion_vectors,
|
&prepass_textures.motion_vectors,
|
||||||
&prepass_textures.depth,
|
&prepass_textures.depth,
|
||||||
|
|
|
@ -135,7 +135,7 @@ pub fn derive_world_query_impl(input: TokenStream) -> TokenStream {
|
||||||
"#[derive(WorldQuery)]` only supports structs",
|
"#[derive(WorldQuery)]` only supports structs",
|
||||||
)
|
)
|
||||||
.into_compile_error()
|
.into_compile_error()
|
||||||
.into()
|
.into();
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut field_attrs = Vec::new();
|
let mut field_attrs = Vec::new();
|
||||||
|
|
|
@ -251,10 +251,17 @@ pub fn impl_param_set(_input: TokenStream) -> TokenStream {
|
||||||
pub fn derive_system_param(input: TokenStream) -> TokenStream {
|
pub fn derive_system_param(input: TokenStream) -> TokenStream {
|
||||||
let token_stream = input.clone();
|
let token_stream = input.clone();
|
||||||
let ast = parse_macro_input!(input as DeriveInput);
|
let ast = parse_macro_input!(input as DeriveInput);
|
||||||
let syn::Data::Struct(syn::DataStruct { fields: field_definitions, .. }) = ast.data else {
|
let syn::Data::Struct(syn::DataStruct {
|
||||||
return syn::Error::new(ast.span(), "Invalid `SystemParam` type: expected a `struct`")
|
fields: field_definitions,
|
||||||
.into_compile_error()
|
..
|
||||||
.into();
|
}) = ast.data
|
||||||
|
else {
|
||||||
|
return syn::Error::new(
|
||||||
|
ast.span(),
|
||||||
|
"Invalid `SystemParam` type: expected a `struct`",
|
||||||
|
)
|
||||||
|
.into_compile_error()
|
||||||
|
.into();
|
||||||
};
|
};
|
||||||
let path = bevy_ecs_path();
|
let path = bevy_ecs_path();
|
||||||
|
|
||||||
|
|
|
@ -550,8 +550,8 @@ impl ScheduleGraph {
|
||||||
let Some(prev) = config_iter.next() else {
|
let Some(prev) = config_iter.next() else {
|
||||||
return AddSystemsInnerResult {
|
return AddSystemsInnerResult {
|
||||||
nodes: Vec::new(),
|
nodes: Vec::new(),
|
||||||
densely_chained: true
|
densely_chained: true,
|
||||||
}
|
};
|
||||||
};
|
};
|
||||||
let mut previous_result = self.add_systems_inner(prev, true);
|
let mut previous_result = self.add_systems_inner(prev, true);
|
||||||
densely_chained = previous_result.densely_chained;
|
densely_chained = previous_result.densely_chained;
|
||||||
|
|
|
@ -83,7 +83,7 @@ impl<T> Hash for SystemTypeSet<T> {
|
||||||
}
|
}
|
||||||
impl<T> Clone for SystemTypeSet<T> {
|
impl<T> Clone for SystemTypeSet<T> {
|
||||||
fn clone(&self) -> Self {
|
fn clone(&self) -> Self {
|
||||||
Self(PhantomData)
|
*self
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1770,8 +1770,9 @@ impl World {
|
||||||
f: impl FnOnce(&mut World, &mut Schedule) -> R,
|
f: impl FnOnce(&mut World, &mut Schedule) -> R,
|
||||||
) -> Result<R, TryRunScheduleError> {
|
) -> Result<R, TryRunScheduleError> {
|
||||||
let label = label.as_ref();
|
let label = label.as_ref();
|
||||||
let Some((extracted_label, mut schedule))
|
let Some((extracted_label, mut schedule)) = self
|
||||||
= self.get_resource_mut::<Schedules>().and_then(|mut s| s.remove_entry(label))
|
.get_resource_mut::<Schedules>()
|
||||||
|
.and_then(|mut s| s.remove_entry(label))
|
||||||
else {
|
else {
|
||||||
return Err(TryRunScheduleError(label.dyn_clone()));
|
return Err(TryRunScheduleError(label.dyn_clone()));
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,14 +7,14 @@ error[E0277]: the trait bound `bevy_ecs::query::Changed<Foo>: ArchetypeFilter` i
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ArchetypeFilter`:
|
= help: the following other types implement trait `ArchetypeFilter`:
|
||||||
()
|
With<T>
|
||||||
(F0, F1)
|
Without<T>
|
||||||
(F0, F1, F2)
|
Or<()>
|
||||||
(F0, F1, F2, F3)
|
Or<(F0,)>
|
||||||
(F0, F1, F2, F3, F4)
|
Or<(F0, F1)>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
Or<(F0, F1, F2)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
Or<(F0, F1, F2, F3)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6, F7)
|
Or<(F0, F1, F2, F3, F4)>
|
||||||
and $N others
|
and $N others
|
||||||
= note: required for `QueryIter<'_, '_, &Foo, bevy_ecs::query::Changed<Foo>>` to implement `ExactSizeIterator`
|
= note: required for `QueryIter<'_, '_, &Foo, bevy_ecs::query::Changed<Foo>>` to implement `ExactSizeIterator`
|
||||||
note: required by a bound in `is_exact_size_iterator`
|
note: required by a bound in `is_exact_size_iterator`
|
||||||
|
@ -32,14 +32,14 @@ error[E0277]: the trait bound `bevy_ecs::query::Added<Foo>: ArchetypeFilter` is
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ArchetypeFilter`:
|
= help: the following other types implement trait `ArchetypeFilter`:
|
||||||
()
|
With<T>
|
||||||
(F0, F1)
|
Without<T>
|
||||||
(F0, F1, F2)
|
Or<()>
|
||||||
(F0, F1, F2, F3)
|
Or<(F0,)>
|
||||||
(F0, F1, F2, F3, F4)
|
Or<(F0, F1)>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
Or<(F0, F1, F2)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
Or<(F0, F1, F2, F3)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6, F7)
|
Or<(F0, F1, F2, F3, F4)>
|
||||||
and $N others
|
and $N others
|
||||||
= note: required for `QueryIter<'_, '_, &Foo, bevy_ecs::query::Added<Foo>>` to implement `ExactSizeIterator`
|
= note: required for `QueryIter<'_, '_, &Foo, bevy_ecs::query::Added<Foo>>` to implement `ExactSizeIterator`
|
||||||
note: required by a bound in `is_exact_size_iterator`
|
note: required by a bound in `is_exact_size_iterator`
|
||||||
|
|
|
@ -7,14 +7,14 @@ error[E0277]: the trait bound `&mut A: ReadOnlyWorldQuery` is not satisfied
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
||||||
&T
|
bevy_ecs::change_detection::Ref<'__w, T>
|
||||||
()
|
Has<T>
|
||||||
(F0, F1)
|
AnyOf<()>
|
||||||
(F0, F1, F2)
|
AnyOf<(F0,)>
|
||||||
(F0, F1, F2, F3)
|
AnyOf<(F0, F1)>
|
||||||
(F0, F1, F2, F3, F4)
|
AnyOf<(F0, F1, F2)>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
AnyOf<(F0, F1, F2, F3)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
AnyOf<(F0, F1, F2, F3, F4)>
|
||||||
and $N others
|
and $N others
|
||||||
= note: `ReadOnlyWorldQuery` is implemented for `&A`, but not for `&mut A`
|
= note: `ReadOnlyWorldQuery` is implemented for `&A`, but not for `&mut A`
|
||||||
= note: required for `QueryCombinationIter<'_, '_, &mut A, (), _>` to implement `Iterator`
|
= note: required for `QueryCombinationIter<'_, '_, &mut A, (), _>` to implement `Iterator`
|
||||||
|
|
|
@ -7,14 +7,14 @@ error[E0277]: the trait bound `&mut A: ReadOnlyWorldQuery` is not satisfied
|
||||||
| required by a bound introduced by this call
|
| required by a bound introduced by this call
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
||||||
&T
|
bevy_ecs::change_detection::Ref<'__w, T>
|
||||||
()
|
Has<T>
|
||||||
(F0, F1)
|
AnyOf<()>
|
||||||
(F0, F1, F2)
|
AnyOf<(F0,)>
|
||||||
(F0, F1, F2, F3)
|
AnyOf<(F0, F1)>
|
||||||
(F0, F1, F2, F3, F4)
|
AnyOf<(F0, F1, F2)>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
AnyOf<(F0, F1, F2, F3)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
AnyOf<(F0, F1, F2, F3, F4)>
|
||||||
and $N others
|
and $N others
|
||||||
= note: `ReadOnlyWorldQuery` is implemented for `&A`, but not for `&mut A`
|
= note: `ReadOnlyWorldQuery` is implemented for `&A`, but not for `&mut A`
|
||||||
= note: required for `QueryManyIter<'_, '_, &mut A, (), std::array::IntoIter<bevy_ecs::entity::Entity, 1>>` to implement `Iterator`
|
= note: required for `QueryManyIter<'_, '_, &mut A, (), std::array::IntoIter<bevy_ecs::entity::Entity, 1>>` to implement `Iterator`
|
||||||
|
|
|
@ -13,14 +13,14 @@ error[E0277]: the trait bound `&'static mut Foo: ReadOnlyWorldQuery` is not sati
|
||||||
| ^^^^^^^ the trait `ReadOnlyWorldQuery` is not implemented for `&'static mut Foo`
|
| ^^^^^^^ the trait `ReadOnlyWorldQuery` is not implemented for `&'static mut Foo`
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
||||||
&T
|
bevy_ecs::change_detection::Ref<'__w, T>
|
||||||
()
|
Has<T>
|
||||||
(F0, F1)
|
AnyOf<()>
|
||||||
(F0, F1, F2)
|
AnyOf<(F0,)>
|
||||||
(F0, F1, F2, F3)
|
AnyOf<(F0, F1)>
|
||||||
(F0, F1, F2, F3, F4)
|
AnyOf<(F0, F1, F2)>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
AnyOf<(F0, F1, F2, F3)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
AnyOf<(F0, F1, F2, F3, F4)>
|
||||||
and $N others
|
and $N others
|
||||||
= note: `ReadOnlyWorldQuery` is implemented for `&'static Foo`, but not for `&'static mut Foo`
|
= note: `ReadOnlyWorldQuery` is implemented for `&'static Foo`, but not for `&'static mut Foo`
|
||||||
= note: required for `bevy_ecs::system::Query<'_, '_, &'static mut Foo>` to implement `ReadOnlySystemParam`
|
= note: required for `bevy_ecs::system::Query<'_, '_, &'static mut Foo>` to implement `ReadOnlySystemParam`
|
||||||
|
|
|
@ -5,14 +5,14 @@ error[E0277]: the trait bound `&'static mut Foo: ReadOnlyWorldQuery` is not sati
|
||||||
| ^^^^^^^^^^^^^^^^ the trait `ReadOnlyWorldQuery` is not implemented for `&'static mut Foo`
|
| ^^^^^^^^^^^^^^^^ the trait `ReadOnlyWorldQuery` is not implemented for `&'static mut Foo`
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
||||||
&T
|
MutableUnmarked
|
||||||
()
|
MutableMarkedReadOnly
|
||||||
(F0, F1)
|
NestedMutableUnmarked
|
||||||
(F0, F1, F2)
|
bevy_ecs::change_detection::Ref<'__w, T>
|
||||||
(F0, F1, F2, F3)
|
Has<T>
|
||||||
(F0, F1, F2, F3, F4)
|
AnyOf<()>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
AnyOf<(F0,)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
AnyOf<(F0, F1)>
|
||||||
and $N others
|
and $N others
|
||||||
note: required by a bound in `_::assert_readonly`
|
note: required by a bound in `_::assert_readonly`
|
||||||
--> tests/ui/world_query_derive.rs:7:10
|
--> tests/ui/world_query_derive.rs:7:10
|
||||||
|
@ -28,14 +28,14 @@ error[E0277]: the trait bound `MutableMarked: ReadOnlyWorldQuery` is not satisfi
|
||||||
| ^^^^^^^^^^^^^ the trait `ReadOnlyWorldQuery` is not implemented for `MutableMarked`
|
| ^^^^^^^^^^^^^ the trait `ReadOnlyWorldQuery` is not implemented for `MutableMarked`
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
= help: the following other types implement trait `ReadOnlyWorldQuery`:
|
||||||
&T
|
MutableUnmarked
|
||||||
()
|
MutableMarkedReadOnly
|
||||||
(F0, F1)
|
NestedMutableUnmarked
|
||||||
(F0, F1, F2)
|
bevy_ecs::change_detection::Ref<'__w, T>
|
||||||
(F0, F1, F2, F3)
|
Has<T>
|
||||||
(F0, F1, F2, F3, F4)
|
AnyOf<()>
|
||||||
(F0, F1, F2, F3, F4, F5)
|
AnyOf<(F0,)>
|
||||||
(F0, F1, F2, F3, F4, F5, F6)
|
AnyOf<(F0, F1)>
|
||||||
and $N others
|
and $N others
|
||||||
note: required by a bound in `_::assert_readonly`
|
note: required by a bound in `_::assert_readonly`
|
||||||
--> tests/ui/world_query_derive.rs:18:10
|
--> tests/ui/world_query_derive.rs:18:10
|
||||||
|
|
|
@ -152,7 +152,7 @@ impl<'s> Gizmos<'s> {
|
||||||
/// ```
|
/// ```
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn linestrip(&mut self, positions: impl IntoIterator<Item = Vec3>, color: Color) {
|
pub fn linestrip(&mut self, positions: impl IntoIterator<Item = Vec3>, color: Color) {
|
||||||
self.extend_strip_positions(positions.into_iter());
|
self.extend_strip_positions(positions);
|
||||||
let len = self.buffer.strip_positions.len();
|
let len = self.buffer.strip_positions.len();
|
||||||
self.buffer
|
self.buffer
|
||||||
.strip_colors
|
.strip_colors
|
||||||
|
|
|
@ -96,7 +96,9 @@ impl Plugin for GizmoPlugin {
|
||||||
.after(TransformSystem::TransformPropagate),
|
.after(TransformSystem::TransformPropagate),
|
||||||
);
|
);
|
||||||
|
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return; };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app
|
render_app
|
||||||
.add_systems(ExtractSchedule, extract_gizmo_data)
|
.add_systems(ExtractSchedule, extract_gizmo_data)
|
||||||
|
@ -109,7 +111,9 @@ impl Plugin for GizmoPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut bevy_app::App) {
|
fn finish(&self, app: &mut bevy_app::App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return; };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
let render_device = render_app.world.resource::<RenderDevice>();
|
let render_device = render_app.world.resource::<RenderDevice>();
|
||||||
let layout = render_device.create_bind_group_layout(&BindGroupLayoutDescriptor {
|
let layout = render_device.create_bind_group_layout(&BindGroupLayoutDescriptor {
|
||||||
|
|
|
@ -27,7 +27,9 @@ pub struct LineGizmo2dPlugin;
|
||||||
|
|
||||||
impl Plugin for LineGizmo2dPlugin {
|
impl Plugin for LineGizmo2dPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app
|
render_app
|
||||||
.add_render_command::<Transparent2d, DrawLineGizmo2d>()
|
.add_render_command::<Transparent2d, DrawLineGizmo2d>()
|
||||||
|
@ -36,7 +38,9 @@ impl Plugin for LineGizmo2dPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app.init_resource::<LineGizmoPipeline>();
|
render_app.init_resource::<LineGizmoPipeline>();
|
||||||
}
|
}
|
||||||
|
@ -151,7 +155,9 @@ fn queue_line_gizmos_2d(
|
||||||
| Mesh2dPipelineKey::from_hdr(view.hdr);
|
| Mesh2dPipelineKey::from_hdr(view.hdr);
|
||||||
|
|
||||||
for (entity, handle) in &line_gizmos {
|
for (entity, handle) in &line_gizmos {
|
||||||
let Some(line_gizmo) = line_gizmo_assets.get(handle) else { continue };
|
let Some(line_gizmo) = line_gizmo_assets.get(handle) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
let pipeline = pipelines.specialize(
|
let pipeline = pipelines.specialize(
|
||||||
&pipeline_cache,
|
&pipeline_cache,
|
||||||
|
|
|
@ -25,7 +25,9 @@ use bevy_render::{
|
||||||
pub struct LineGizmo3dPlugin;
|
pub struct LineGizmo3dPlugin;
|
||||||
impl Plugin for LineGizmo3dPlugin {
|
impl Plugin for LineGizmo3dPlugin {
|
||||||
fn build(&self, app: &mut App) {
|
fn build(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app
|
render_app
|
||||||
.add_render_command::<Transparent3d, DrawLineGizmo3d>()
|
.add_render_command::<Transparent3d, DrawLineGizmo3d>()
|
||||||
|
@ -34,7 +36,9 @@ impl Plugin for LineGizmo3dPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
render_app.init_resource::<LineGizmoPipeline>();
|
render_app.init_resource::<LineGizmoPipeline>();
|
||||||
}
|
}
|
||||||
|
@ -164,7 +168,9 @@ fn queue_line_gizmos_3d(
|
||||||
| MeshPipelineKey::from_hdr(view.hdr);
|
| MeshPipelineKey::from_hdr(view.hdr);
|
||||||
|
|
||||||
for (entity, handle) in &line_gizmos {
|
for (entity, handle) in &line_gizmos {
|
||||||
let Some(line_gizmo) = line_gizmo_assets.get(handle) else { continue };
|
let Some(line_gizmo) = line_gizmo_assets.get(handle) else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
|
||||||
let pipeline = pipelines.specialize(
|
let pipeline = pipelines.specialize(
|
||||||
&pipeline_cache,
|
&pipeline_cache,
|
||||||
|
|
|
@ -133,10 +133,7 @@ impl<P: Point> Hermite<P> {
|
||||||
tangents: impl IntoIterator<Item = P>,
|
tangents: impl IntoIterator<Item = P>,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
control_points: control_points
|
control_points: control_points.into_iter().zip(tangents).collect(),
|
||||||
.into_iter()
|
|
||||||
.zip(tangents.into_iter())
|
|
||||||
.collect(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -809,7 +809,9 @@ pub fn queue_prepass_material_meshes<M: Material>(
|
||||||
let rangefinder = view.rangefinder3d();
|
let rangefinder = view.rangefinder3d();
|
||||||
|
|
||||||
for visible_entity in &visible_entities.entities {
|
for visible_entity in &visible_entities.entities {
|
||||||
let Ok((material_handle, mesh_handle, mesh_transforms, batch_indices)) = material_meshes.get(*visible_entity) else {
|
let Ok((material_handle, mesh_handle, mesh_transforms, batch_indices)) =
|
||||||
|
material_meshes.get(*visible_entity)
|
||||||
|
else {
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,9 @@ impl Plugin for ScreenSpaceAmbientOcclusionPlugin {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else { return };
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
|
||||||
if !render_app
|
if !render_app
|
||||||
.world
|
.world
|
||||||
|
@ -226,7 +228,8 @@ impl ViewNode for SsaoNode {
|
||||||
pipeline_cache.get_compute_pipeline(pipelines.preprocess_depth_pipeline),
|
pipeline_cache.get_compute_pipeline(pipelines.preprocess_depth_pipeline),
|
||||||
pipeline_cache.get_compute_pipeline(pipelines.spatial_denoise_pipeline),
|
pipeline_cache.get_compute_pipeline(pipelines.spatial_denoise_pipeline),
|
||||||
pipeline_cache.get_compute_pipeline(pipeline_id.0),
|
pipeline_cache.get_compute_pipeline(pipeline_id.0),
|
||||||
) else {
|
)
|
||||||
|
else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -640,7 +643,9 @@ fn prepare_ssao_textures(
|
||||||
views: Query<(Entity, &ExtractedCamera), With<ScreenSpaceAmbientOcclusionSettings>>,
|
views: Query<(Entity, &ExtractedCamera), With<ScreenSpaceAmbientOcclusionSettings>>,
|
||||||
) {
|
) {
|
||||||
for (entity, camera) in &views {
|
for (entity, camera) in &views {
|
||||||
let Some(physical_viewport_size) = camera.physical_viewport_size else { continue };
|
let Some(physical_viewport_size) = camera.physical_viewport_size else {
|
||||||
|
continue;
|
||||||
|
};
|
||||||
let size = Extent3d {
|
let size = Extent3d {
|
||||||
width: physical_viewport_size.x,
|
width: physical_viewport_size.x,
|
||||||
height: physical_viewport_size.y,
|
height: physical_viewport_size.y,
|
||||||
|
|
|
@ -195,7 +195,8 @@ impl<'a> ReflectDerive<'a> {
|
||||||
let syn::Expr::Lit(syn::ExprLit {
|
let syn::Expr::Lit(syn::ExprLit {
|
||||||
lit: syn::Lit::Str(lit),
|
lit: syn::Lit::Str(lit),
|
||||||
..
|
..
|
||||||
}) = &pair.value else {
|
}) = &pair.value
|
||||||
|
else {
|
||||||
return Err(syn::Error::new(
|
return Err(syn::Error::new(
|
||||||
pair.span(),
|
pair.span(),
|
||||||
format_args!("`#[{TYPE_PATH_ATTRIBUTE_NAME} = \"...\"]` must be a string literal"),
|
format_args!("`#[{TYPE_PATH_ATTRIBUTE_NAME} = \"...\"]` must be a string literal"),
|
||||||
|
@ -211,7 +212,8 @@ impl<'a> ReflectDerive<'a> {
|
||||||
let syn::Expr::Lit(syn::ExprLit {
|
let syn::Expr::Lit(syn::ExprLit {
|
||||||
lit: syn::Lit::Str(lit),
|
lit: syn::Lit::Str(lit),
|
||||||
..
|
..
|
||||||
}) = &pair.value else {
|
}) = &pair.value
|
||||||
|
else {
|
||||||
return Err(syn::Error::new(
|
return Err(syn::Error::new(
|
||||||
pair.span(),
|
pair.span(),
|
||||||
format_args!("`#[{TYPE_NAME_ATTRIBUTE_NAME} = \"...\"]` must be a string literal"),
|
format_args!("`#[{TYPE_NAME_ATTRIBUTE_NAME} = \"...\"]` must be a string literal"),
|
||||||
|
|
|
@ -513,7 +513,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_into_iter() {
|
fn test_into_iter() {
|
||||||
let expected = vec!["foo", "bar", "baz"];
|
let expected = ["foo", "bar", "baz"];
|
||||||
|
|
||||||
let mut map = DynamicMap::default();
|
let mut map = DynamicMap::default();
|
||||||
map.insert(0usize, expected[0].to_string());
|
map.insert(0usize, expected[0].to_string());
|
||||||
|
|
|
@ -507,7 +507,7 @@ impl Debug for DynamicStruct {
|
||||||
/// Returns [`None`] if the comparison couldn't even be performed.
|
/// Returns [`None`] if the comparison couldn't even be performed.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn struct_partial_eq<S: Struct>(a: &S, b: &dyn Reflect) -> Option<bool> {
|
pub fn struct_partial_eq<S: Struct>(a: &S, b: &dyn Reflect) -> Option<bool> {
|
||||||
let ReflectRef::Struct(struct_value) = b.reflect_ref() else {
|
let ReflectRef::Struct(struct_value) = b.reflect_ref() else {
|
||||||
return Some(false);
|
return Some(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -11,14 +11,14 @@ error[E0277]: the trait bound `NoReflect: Reflect` is not satisfied
|
||||||
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Reflect` is not implemented for `NoReflect`
|
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Reflect` is not implemented for `NoReflect`
|
||||||
|
|
|
|
||||||
= help: the following other types implement trait `Reflect`:
|
= help: the following other types implement trait `Reflect`:
|
||||||
&'static Path
|
bool
|
||||||
()
|
char
|
||||||
(A, B)
|
isize
|
||||||
(A, B, C)
|
i8
|
||||||
(A, B, C, D)
|
i16
|
||||||
(A, B, C, D, E)
|
i32
|
||||||
(A, B, C, D, E, F)
|
i64
|
||||||
(A, B, C, D, E, F, G)
|
i128
|
||||||
and $N others
|
and $N others
|
||||||
note: required for `Foo<NoReflect>` to implement `Reflect`
|
note: required for `Foo<NoReflect>` to implement `Reflect`
|
||||||
--> tests/reflect_derive/generics.fail.rs:3:10
|
--> tests/reflect_derive/generics.fail.rs:3:10
|
||||||
|
|
|
@ -1990,8 +1990,14 @@ mod tests {
|
||||||
let hsla = Color::hsla(0., 0., 0., 0.);
|
let hsla = Color::hsla(0., 0., 0., 0.);
|
||||||
let lcha = Color::lcha(0., 0., 0., 0.);
|
let lcha = Color::lcha(0., 0., 0., 0.);
|
||||||
assert_eq!(rgba_l, rgba_l.as_rgba_linear());
|
assert_eq!(rgba_l, rgba_l.as_rgba_linear());
|
||||||
let Color::RgbaLinear { .. } = rgba.as_rgba_linear() else { panic!("from Rgba") };
|
let Color::RgbaLinear { .. } = rgba.as_rgba_linear() else {
|
||||||
let Color::RgbaLinear { .. } = hsla.as_rgba_linear() else { panic!("from Hsla") };
|
panic!("from Rgba")
|
||||||
let Color::RgbaLinear { .. } = lcha.as_rgba_linear() else { panic!("from Lcha") };
|
};
|
||||||
|
let Color::RgbaLinear { .. } = hsla.as_rgba_linear() else {
|
||||||
|
panic!("from Hsla")
|
||||||
|
};
|
||||||
|
let Color::RgbaLinear { .. } = lcha.as_rgba_linear() else {
|
||||||
|
panic!("from Lcha")
|
||||||
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,8 +74,11 @@ impl MorphTargetImage {
|
||||||
return Err(MorphBuildError::TooManyTargets { target_count });
|
return Err(MorphBuildError::TooManyTargets { target_count });
|
||||||
}
|
}
|
||||||
let component_count = (vertex_count * MorphAttributes::COMPONENT_COUNT) as u32;
|
let component_count = (vertex_count * MorphAttributes::COMPONENT_COUNT) as u32;
|
||||||
let Some((Rect(width, height), padding)) = lowest_2d(component_count , max) else {
|
let Some((Rect(width, height), padding)) = lowest_2d(component_count, max) else {
|
||||||
return Err(MorphBuildError::TooManyAttributes { vertex_count, component_count });
|
return Err(MorphBuildError::TooManyAttributes {
|
||||||
|
vertex_count,
|
||||||
|
component_count,
|
||||||
|
});
|
||||||
};
|
};
|
||||||
let data = targets
|
let data = targets
|
||||||
.flat_map(|mut attributes| {
|
.flat_map(|mut attributes| {
|
||||||
|
|
|
@ -111,7 +111,9 @@ impl Plugin for PipelinedRenderingPlugin {
|
||||||
s.spawn(async { app_to_render_receiver.recv().await });
|
s.spawn(async { app_to_render_receiver.recv().await });
|
||||||
})
|
})
|
||||||
.pop();
|
.pop();
|
||||||
let Some(Ok(mut render_app)) = sent_app else { break };
|
let Some(Ok(mut render_app)) = sent_app else {
|
||||||
|
break;
|
||||||
|
};
|
||||||
|
|
||||||
{
|
{
|
||||||
#[cfg(feature = "trace")]
|
#[cfg(feature = "trace")]
|
||||||
|
|
|
@ -125,7 +125,9 @@ impl RenderGraph {
|
||||||
/// It simply won't create a new edge.
|
/// It simply won't create a new edge.
|
||||||
pub fn add_node_edges(&mut self, edges: &[&'static str]) {
|
pub fn add_node_edges(&mut self, edges: &[&'static str]) {
|
||||||
for window in edges.windows(2) {
|
for window in edges.windows(2) {
|
||||||
let [a, b] = window else { break; };
|
let [a, b] = window else {
|
||||||
|
break;
|
||||||
|
};
|
||||||
if let Err(err) = self.try_add_node_edge(*a, *b) {
|
if let Err(err) = self.try_add_node_edge(*a, *b) {
|
||||||
match err {
|
match err {
|
||||||
// Already existing edges are very easy to produce with this api
|
// Already existing edges are very easy to produce with this api
|
||||||
|
|
|
@ -398,10 +398,9 @@ where
|
||||||
render_context: &mut RenderContext,
|
render_context: &mut RenderContext,
|
||||||
world: &World,
|
world: &World,
|
||||||
) -> Result<(), NodeRunError> {
|
) -> Result<(), NodeRunError> {
|
||||||
let Ok(view) = self
|
let Ok(view) = self.view_query.get_manual(world, graph.view_entity()) else {
|
||||||
.view_query
|
return Ok(());
|
||||||
.get_manual(world, graph.view_entity())
|
};
|
||||||
else { return Ok(()); };
|
|
||||||
|
|
||||||
ViewNode::run(&self.node, graph, render_context, view, world)?;
|
ViewNode::run(&self.node, graph, render_context, view, world)?;
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -49,10 +49,10 @@ impl Node for UiPassNode {
|
||||||
let input_view_entity = graph.view_entity();
|
let input_view_entity = graph.view_entity();
|
||||||
|
|
||||||
let Ok((transparent_phase, target, camera_ui)) =
|
let Ok((transparent_phase, target, camera_ui)) =
|
||||||
self.ui_view_query.get_manual(world, input_view_entity)
|
self.ui_view_query.get_manual(world, input_view_entity)
|
||||||
else {
|
else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
};
|
};
|
||||||
if transparent_phase.items.is_empty() {
|
if transparent_phase.items.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
|
@ -422,20 +422,20 @@ pub fn winit_runner(mut app: App) {
|
||||||
event_writer_system_state.get_mut(&mut app.world);
|
event_writer_system_state.get_mut(&mut app.world);
|
||||||
|
|
||||||
let Some(window_entity) = winit_windows.get_window_entity(window_id) else {
|
let Some(window_entity) = winit_windows.get_window_entity(window_id) else {
|
||||||
warn!(
|
warn!(
|
||||||
"Skipped event {:?} for unknown winit Window Id {:?}",
|
"Skipped event {:?} for unknown winit Window Id {:?}",
|
||||||
event, window_id
|
event, window_id
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let Ok((mut window, mut cache)) = windows.get_mut(window_entity) else {
|
let Ok((mut window, mut cache)) = windows.get_mut(window_entity) else {
|
||||||
warn!(
|
warn!(
|
||||||
"Window {:?} is missing `Window` component, skipping event {:?}",
|
"Window {:?} is missing `Window` component, skipping event {:?}",
|
||||||
window_entity, event
|
window_entity, event
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
runner_state.window_event_received = true;
|
runner_state.window_event_received = true;
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,10 @@ fn setup(
|
||||||
for handle in &rpg_sprite_handles.handles {
|
for handle in &rpg_sprite_handles.handles {
|
||||||
let handle = handle.typed_weak();
|
let handle = handle.typed_weak();
|
||||||
let Some(texture) = textures.get(&handle) else {
|
let Some(texture) = textures.get(&handle) else {
|
||||||
warn!("{:?} did not resolve to an `Image` asset.", asset_server.get_handle_path(handle));
|
warn!(
|
||||||
|
"{:?} did not resolve to an `Image` asset.",
|
||||||
|
asset_server.get_handle_path(handle)
|
||||||
|
);
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ fn setup_scene(
|
||||||
0 => material_emissive1.clone(),
|
0 => material_emissive1.clone(),
|
||||||
1 => material_emissive2.clone(),
|
1 => material_emissive2.clone(),
|
||||||
2 => material_emissive3.clone(),
|
2 => material_emissive3.clone(),
|
||||||
3 | 4 | 5 => material_non_emissive.clone(),
|
3..=5 => material_non_emissive.clone(),
|
||||||
_ => unreachable!(),
|
_ => unreachable!(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -88,8 +88,12 @@ fn name_morphs(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let Some(mesh) = meshes.get(&morph_data.mesh) else { return };
|
let Some(mesh) = meshes.get(&morph_data.mesh) else {
|
||||||
let Some(names) = mesh.morph_target_names() else { return };
|
return;
|
||||||
|
};
|
||||||
|
let Some(names) = mesh.morph_target_names() else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
for name in names {
|
for name in names {
|
||||||
println!(" {name}");
|
println!(" {name}");
|
||||||
}
|
}
|
||||||
|
|
|
@ -249,11 +249,6 @@ fn setup(
|
||||||
commands.spawn(WallBundle::new(WallLocation::Top));
|
commands.spawn(WallBundle::new(WallLocation::Top));
|
||||||
|
|
||||||
// Bricks
|
// Bricks
|
||||||
// Negative scales result in flipped sprites / meshes,
|
|
||||||
// which is definitely not what we want here
|
|
||||||
assert!(BRICK_SIZE.x > 0.0);
|
|
||||||
assert!(BRICK_SIZE.y > 0.0);
|
|
||||||
|
|
||||||
let total_width_of_bricks = (RIGHT_WALL - LEFT_WALL) - 2. * GAP_BETWEEN_BRICKS_AND_SIDES;
|
let total_width_of_bricks = (RIGHT_WALL - LEFT_WALL) - 2. * GAP_BETWEEN_BRICKS_AND_SIDES;
|
||||||
let bottom_edge_of_bricks = paddle_y + GAP_BETWEEN_PADDLE_AND_BRICKS;
|
let bottom_edge_of_bricks = paddle_y + GAP_BETWEEN_PADDLE_AND_BRICKS;
|
||||||
let total_height_of_bricks = TOP_WALL - bottom_edge_of_bricks - GAP_BETWEEN_BRICKS_AND_CEILING;
|
let total_height_of_bricks = TOP_WALL - bottom_edge_of_bricks - GAP_BETWEEN_BRICKS_AND_CEILING;
|
||||||
|
|
|
@ -158,7 +158,8 @@ impl ViewNode for PostProcessNode {
|
||||||
let pipeline_cache = world.resource::<PipelineCache>();
|
let pipeline_cache = world.resource::<PipelineCache>();
|
||||||
|
|
||||||
// Get the pipeline from the cache
|
// Get the pipeline from the cache
|
||||||
let Some(pipeline) = pipeline_cache.get_render_pipeline(post_process_pipeline.pipeline_id) else {
|
let Some(pipeline) = pipeline_cache.get_render_pipeline(post_process_pipeline.pipeline_id)
|
||||||
|
else {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,7 @@ impl Plugin for GpuFeatureSupportChecker {
|
||||||
|
|
||||||
fn finish(&self, app: &mut App) {
|
fn finish(&self, app: &mut App) {
|
||||||
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
let Ok(render_app) = app.get_sub_app_mut(RenderApp) else {
|
||||||
return
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
let render_device = render_app.world.resource::<RenderDevice>();
|
let render_device = render_app.world.resource::<RenderDevice>();
|
||||||
|
|
|
@ -91,7 +91,10 @@ fn setup(mut commands: Commands) {
|
||||||
fn ui_system(mut query: Query<&mut Text>, config: Res<Config>, diag: Res<DiagnosticsStore>) {
|
fn ui_system(mut query: Query<&mut Text>, config: Res<Config>, diag: Res<DiagnosticsStore>) {
|
||||||
let mut text = query.single_mut();
|
let mut text = query.single_mut();
|
||||||
|
|
||||||
let Some(fps) = diag.get(FrameTimeDiagnosticsPlugin::FPS).and_then(|fps| fps.smoothed()) else {
|
let Some(fps) = diag
|
||||||
|
.get(FrameTimeDiagnosticsPlugin::FPS)
|
||||||
|
.and_then(|fps| fps.smoothed())
|
||||||
|
else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -181,7 +181,9 @@ fn update_text(
|
||||||
mut text: Query<&mut Text>,
|
mut text: Query<&mut Text>,
|
||||||
morphs: Query<&MorphWeights>,
|
morphs: Query<&MorphWeights>,
|
||||||
) {
|
) {
|
||||||
let Some(mut controls) = controls else { return; };
|
let Some(mut controls) = controls else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
for (i, target) in controls.weights.iter_mut().enumerate() {
|
for (i, target) in controls.weights.iter_mut().enumerate() {
|
||||||
let Ok(weights) = morphs.get(target.entity) else {
|
let Ok(weights) = morphs.get(target.entity) else {
|
||||||
continue;
|
continue;
|
||||||
|
@ -203,7 +205,9 @@ fn update_morphs(
|
||||||
input: Res<Input<KeyCode>>,
|
input: Res<Input<KeyCode>>,
|
||||||
time: Res<Time>,
|
time: Res<Time>,
|
||||||
) {
|
) {
|
||||||
let Some(mut controls) = controls else { return; };
|
let Some(mut controls) = controls else {
|
||||||
|
return;
|
||||||
|
};
|
||||||
for (i, target) in controls.weights.iter_mut().enumerate() {
|
for (i, target) in controls.weights.iter_mut().enumerate() {
|
||||||
if !AVAILABLE_KEYS[i].active(&input) {
|
if !AVAILABLE_KEYS[i].active(&input) {
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -101,7 +101,7 @@ fn setup(mut commands: Commands, asset_server: Res<AssetServer>) {
|
||||||
})
|
})
|
||||||
.with_children(|parent| {
|
.with_children(|parent| {
|
||||||
parent.spawn(TextBundle::from_section(
|
parent.spawn(TextBundle::from_section(
|
||||||
vec![
|
[
|
||||||
"Toggle Overflow (O)",
|
"Toggle Overflow (O)",
|
||||||
"Next Container Size (S)",
|
"Next Container Size (S)",
|
||||||
"Toggle Animation (space)",
|
"Toggle Animation (space)",
|
||||||
|
|
|
@ -19,11 +19,11 @@ bitflags! {
|
||||||
|
|
||||||
const CLIPPY_FLAGS: [&str; 8] = [
|
const CLIPPY_FLAGS: [&str; 8] = [
|
||||||
"-Aclippy::type_complexity",
|
"-Aclippy::type_complexity",
|
||||||
|
"-Aclippy::explicit_iter_loop",
|
||||||
"-Wclippy::doc_markdown",
|
"-Wclippy::doc_markdown",
|
||||||
"-Wclippy::redundant_else",
|
"-Wclippy::redundant_else",
|
||||||
"-Wclippy::match_same_arms",
|
"-Wclippy::match_same_arms",
|
||||||
"-Wclippy::semicolon_if_nothing_returned",
|
"-Wclippy::semicolon_if_nothing_returned",
|
||||||
"-Wclippy::explicit_iter_loop",
|
|
||||||
"-Wclippy::map_flatten",
|
"-Wclippy::map_flatten",
|
||||||
"-Dwarnings",
|
"-Dwarnings",
|
||||||
];
|
];
|
||||||
|
|
Loading…
Reference in a new issue