Parallax system + example, need to integrate into flappy bird

main
Elijah Voigt 2 months ago
parent 272543eff6
commit 8c440317e7

1
.gitattributes vendored

@ -1 +0,0 @@
*.ogg filter=lfs diff=lfs merge=lfs -text

@ -1,2 +1,3 @@
*.png filter=lfs diff=lfs merge=lfs -text *.ogg filter=lfs diff=lfs merge=lfs -text
*.xcf filter=lfs diff=lfs merge=lfs -text *.xcf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text

@ -2,8 +2,10 @@ Programming: Elijah Voigt
Art Assets: Kenney.nl Art Assets: Kenney.nl
1-Bit Platformer Pack 1-Bit Platformer Pack
Impact Sounds
Engine: Bevy Engine: Bevy
Physics: Avian2D Physics: Avian2D
Inspired by Flappy Bird (2013) by Dong Nguyen Inspired by:
Flappy Bird (2013) by Dong Nguyen

BIN
assets/flappy/background-city.png (Stored with Git LFS)

Binary file not shown.

BIN
assets/flappy/background-city.xcf (Stored with Git LFS)

Binary file not shown.

BIN
assets/flappy/background-clouds.png (Stored with Git LFS)

Binary file not shown.

BIN
assets/flappy/background-clouds.xcf (Stored with Git LFS)

Binary file not shown.

@ -0,0 +1,55 @@
use games::*;
fn main() {
App::new()
.add_plugins((BaseGamePlugin {
name: "parallax example".into(),
title: "Parallax".into(),
game_type: GameType::Two,
},))
.add_systems(Startup, spawn_background)
.add_systems(Update, move_camera)
.add_systems(Update, parallax_gizmos)
.run();
}
fn spawn_background(
mut commands: Commands,
) {
commands.spawn((Parallax(1.0), children![(Text2d("1.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))]));
commands.spawn((Parallax(2.0), children![(Text2d("2.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))]));
commands.spawn((Parallax(4.0), children![(Text2d("4.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))]));
commands.spawn((Parallax(8.0), children![(Text2d("8.0".into()), Transform::from_xyz(0.0, 35.0, 0.0))]));
}
fn move_camera(
mut t: Single<&mut Transform, With<Camera2d>>,
keys: Res<ButtonInput<KeyCode>>,
) {
if keys.pressed(KeyCode::ArrowLeft) {
t.translation.x -= 5.0;
} else if keys.pressed(KeyCode::ArrowRight) {
t.translation.x += 5.0;
}
if keys.pressed(KeyCode::ArrowDown) {
t.translation.y -= 5.0;
} else if keys.pressed(KeyCode::ArrowUp) {
t.translation.y += 5.0;
}
}
fn parallax_gizmos(
mut gizmos: Gizmos,
q: Query<&Transform, With<Parallax>>,
) {
// Closest to camera
// Parallax(1)
q.iter().for_each(|t| {
gizmos.grid_2d(
t.translation.truncate(),
UVec2::new(5, 5),
Vec2::splat(10.),
RED,
).outer_edges();
});
}

@ -42,6 +42,7 @@ impl Plugin for BaseGamePlugin {
.add_plugins(MeshPickingPlugin) .add_plugins(MeshPickingPlugin)
.add_plugins(LoadingPlugin) .add_plugins(LoadingPlugin)
.add_plugins(BaseUiPlugin) .add_plugins(BaseUiPlugin)
.add_plugins(ParallaxPlugin)
.init_resource::<Rand>(); .init_resource::<Rand>();
match self.game_type { match self.game_type {

@ -562,7 +562,7 @@ fn init_ui(mut commands: Commands) {
BackgroundColor::default(), BackgroundColor::default(),
RewindButton, RewindButton,
children![ children![
Text::new("Rewind!"), Text::new("Rewind! (R)"),
TextLayout::new_with_justify(JustifyText::Center) TextLayout::new_with_justify(JustifyText::Center)
], ],
)) ))
@ -580,7 +580,7 @@ fn init_ui(mut commands: Commands) {
Button, Button,
FlapButton, FlapButton,
children![ children![
Text::new("Flap!"), Text::new("Flap! (Spacebar)"),
TextFont::from_font_size(30.0), TextFont::from_font_size(30.0),
TextLayout::new_with_justify(JustifyText::Center) TextLayout::new_with_justify(JustifyText::Center)
], ],

@ -9,6 +9,7 @@ pub mod physics3d;
mod scheduling; mod scheduling;
mod ui; mod ui;
mod version; mod version;
mod parallax;
// Rust stdlib // Rust stdlib
pub use std::collections::VecDeque; pub use std::collections::VecDeque;
@ -44,3 +45,4 @@ pub use loading::*;
pub use scheduling::*; pub use scheduling::*;
pub use ui::*; pub use ui::*;
pub use version::*; pub use version::*;
pub use parallax::*;

@ -0,0 +1,27 @@
use super::*;
pub struct ParallaxPlugin;
impl Plugin for ParallaxPlugin {
fn build(&self, app: &mut App) {
app.add_systems(Update, move_parallax_items.run_if(any_component_changed::<Transform>));
}
}
#[derive(Component)]
#[require(Transform)]
pub struct Parallax(pub f32);
fn move_parallax_items(
mut q: Query<(&mut Transform, &Parallax), Without<Camera2d>>,
cam_t: Single<&Transform, With<Camera2d>>,
) {
let base = cam_t.translation.truncate();
q.iter_mut().for_each(|(mut t, p)| {
let val = base * (1.0 - (1.0 / p.0));
t.translation.x = val.x;
t.translation.y = val.y;
});
}
Loading…
Cancel
Save