feat: add scrolling starfield background
Add 150 stars with randomized positions, sizes, speeds, and brightness. Stars scroll downward with parallax depth effect and wrap around at screen edges. Also fixes Bevy 0.13 API issues in game_state.rs (KeyCode::R → KeyR, Input → ButtonInput).
This commit is contained in:
parent
c9188f58f6
commit
9d80626cc6
7 changed files with 72 additions and 6 deletions
48
src/starfield.rs
Normal file
48
src/starfield.rs
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
use crate::components::Star;
|
||||
use crate::constants::{
|
||||
STAR_COUNT, STAR_MAX_SIZE, STAR_MAX_SPEED, STAR_MIN_SIZE, STAR_MIN_SPEED,
|
||||
STAR_Z_DEPTH, WINDOW_HEIGHT, WINDOW_WIDTH,
|
||||
};
|
||||
|
||||
pub fn spawn_starfield(commands: &mut Commands) {
|
||||
for _ in 0..STAR_COUNT {
|
||||
let size = fastrand::f32() * (STAR_MAX_SIZE - STAR_MIN_SIZE) + STAR_MIN_SIZE;
|
||||
let speed = fastrand::f32() * (STAR_MAX_SPEED - STAR_MIN_SPEED) + STAR_MIN_SPEED;
|
||||
let brightness = fastrand::f32() * 0.5 + 0.5; // 0.5 to 1.0
|
||||
|
||||
commands.spawn((
|
||||
SpriteBundle {
|
||||
sprite: Sprite {
|
||||
color: Color::rgb(brightness, brightness, brightness),
|
||||
custom_size: Some(Vec2::new(size, size)),
|
||||
..default()
|
||||
},
|
||||
transform: Transform::from_translation(Vec3::new(
|
||||
fastrand::f32() * WINDOW_WIDTH - WINDOW_WIDTH / 2.0,
|
||||
fastrand::f32() * WINDOW_HEIGHT - WINDOW_HEIGHT / 2.0,
|
||||
STAR_Z_DEPTH,
|
||||
)),
|
||||
..default()
|
||||
},
|
||||
Star { speed },
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
pub fn scroll_starfield(mut star_query: Query<(&mut Transform, &Star)>, time: Res<Time>) {
|
||||
let dt = time.delta_seconds();
|
||||
let half_height = WINDOW_HEIGHT / 2.0;
|
||||
let half_width = WINDOW_WIDTH / 2.0;
|
||||
|
||||
for (mut transform, star) in star_query.iter_mut() {
|
||||
let parallax = -transform.translation.y * 0.01;
|
||||
transform.translation.y -= (star.speed + parallax) * dt;
|
||||
|
||||
if transform.translation.y < -half_height {
|
||||
transform.translation.y = half_height;
|
||||
transform.translation.x = fastrand::f32() * WINDOW_WIDTH - half_width;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue