@@ 2,12 2,16 @@ use bevy::{
app::{App, Startup, Update},
asset::{AssetEvent, AssetServer, Assets},
ecs::{
+ //entity::Entity,
+ //entity_disabling::Disabled,
event::EventReader,
query::{With, Without},
system::{Commands, Query, Res, Single},
},
image::Image,
+ log::warn,
math::{Vec2, Vec3},
+ //render::view::visibility::Visibility,
sprite::{Sprite, SpriteImageMode},
transform::components::Transform,
window::{Window, WindowResized},
@@ 35,7 39,8 @@ pub fn set_up_starfield(
window: Query<&Window>,
) {
let starfield_handle = asset_server.load("textures/starfield.png");
- let starfield_transp_handle = asset_server.load("textures/starfield_transp.png");
+ let starfield_transp_handle =
+ asset_server.load("textures/starfield_transp.png");
let window = window.iter().next().unwrap();
commands
.spawn(Sprite {
@@ 66,7 71,9 @@ pub fn set_up_starfield(
commands
.spawn(Sprite {
image: starfield_transp_handle,
- custom_size: Some(window.size() + Vec2::splat(FRONT_STARFIELD_SIZE)),
+ custom_size: Some(
+ window.size() + Vec2::splat(FRONT_STARFIELD_SIZE),
+ ),
image_mode: SpriteImageMode::Tiled {
tile_x: true,
tile_y: true,
@@ 114,7 121,8 @@ pub fn fix_starfield(
starfield_back.image_mode = SpriteImageMode::Tiled {
tile_x: true,
tile_y: true,
- stretch_value: BACK_STARFIELD_SIZE / (starfield_image.size().x as f32),
+ stretch_value: BACK_STARFIELD_SIZE
+ / (starfield_image.size().x as f32),
};
}
let mut starfield_mid = starfield_mid.single_mut().unwrap();
@@ 123,7 131,8 @@ pub fn fix_starfield(
starfield_mid.image_mode = SpriteImageMode::Tiled {
tile_x: true,
tile_y: true,
- stretch_value: MID_STARFIELD_SIZE / (starfield_image.size().x as f32),
+ stretch_value: MID_STARFIELD_SIZE
+ / (starfield_image.size().x as f32),
};
}
let mut starfield_front = starfield_front.single_mut().unwrap();
@@ 132,7 141,8 @@ pub fn fix_starfield(
starfield_front.image_mode = SpriteImageMode::Tiled {
tile_x: true,
tile_y: true,
- stretch_value: FRONT_STARFIELD_SIZE / (starfield_image.size().x as f32),
+ stretch_value: FRONT_STARFIELD_SIZE
+ / (starfield_image.size().x as f32),
};
}
}
@@ 166,17 176,37 @@ pub fn resize_starfield(
>,
mut resize_event: EventReader<WindowResized>,
camera: Single<&Transform, With<MainCamera>>,
+ mut commands: Commands,
) {
for event in resize_event.read() {
- starfield_back.single_mut().unwrap().custom_size = Some(
+ let Ok(mut starfield_back) = starfield_back.single_mut() else {
+ warn!("{:?}: no such entity!", stringify!(starfield_back));
+ return;
+ };
+ let Ok(mut starfield_mid) = starfield_mid.single_mut() else {
+ warn!("{:?}: no such entity!", stringify!(starfield_mid));
+ return;
+ };
+ let Ok(mut starfield_front) = starfield_front.single_mut() else {
+ warn!("{:?}: no such entity!", stringify!(starfield_front));
+ return;
+ };
+
+ /*if camera.scale.z > 10.0 { // arbitrary
+ // TODO: find out how to disable sprites // done
+ } else {
+ // TODO: find out how to reenable them without toggling on every update :(
+ }*/
+
+ starfield_back.custom_size = Some(
Vec2::new(event.width, event.height) * camera.scale.z
+ Vec2::splat(BACK_STARFIELD_SIZE * 2.0),
);
- starfield_mid.single_mut().unwrap().custom_size = Some(
+ starfield_mid.custom_size = Some(
Vec2::new(event.width, event.height) * camera.scale.z
+ Vec2::splat(MID_STARFIELD_SIZE * 2.0),
);
- starfield_front.single_mut().unwrap().custom_size = Some(
+ starfield_front.custom_size = Some(
Vec2::new(event.width, event.height) * camera.scale.z
+ Vec2::splat(FRONT_STARFIELD_SIZE * 2.0),
);
@@ 185,8 215,12 @@ pub fn resize_starfield(
macro_rules! fix_negative_field_translations {
($field:ident, $size:expr) => {
- if $field.translation.y < $size { $field.translation.y -= $size; }
- if $field.translation.x < $size { $field.translation.x -= $size; }
+ if $field.translation.y < $size / 2.0 {
+ $field.translation.y -= $size;
+ }
+ if $field.translation.x < $size / 2.0 {
+ $field.translation.x -= $size;
+ }
};
}
@@ 271,7 305,7 @@ pub fn update_starfield(
% FRONT_STARFIELD_SIZE
+ Vec3::new(0.0, FRONT_STARFIELD_SIZE, 0.0)
- Vec3::new(0.0, 0.0, 4.0);
-
+
fix_negative_field_translations!(starfield_back_pos, BACK_STARFIELD_SIZE);
fix_negative_field_translations!(starfield_mid_pos, MID_STARFIELD_SIZE);
fix_negative_field_translations!(starfield_front_pos, FRONT_STARFIELD_SIZE);