From 6fa05cdac8725f686de82fcc708ed8dcb5275de0 Mon Sep 17 00:00:00 2001 From: TerraMaster85 Date: Fri, 11 Jul 2025 17:04:51 -0400 Subject: [PATCH] starfield: compensate for anchor point shift --- crates/unified/src/client/starfield.rs | 56 +++++++++++++++++++++----- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/crates/unified/src/client/starfield.rs b/crates/unified/src/client/starfield.rs index 243b2de6453c357c6786a62667f08224749f2b72..157e2c564d58e40fc7dfae1dc4050742d5221bef 100644 --- a/crates/unified/src/client/starfield.rs +++ b/crates/unified/src/client/starfield.rs @@ -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, camera: Single<&Transform, With>, + 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);