Skip to content

Commit

Permalink
Merge pull request #24 from ettoreleandrotognoli/multiple-camera
Browse files Browse the repository at this point in the history
Multiple camera support
  • Loading branch information
cdsupina committed Jun 14, 2023
2 parents 381ad42 + 6a05892 commit cd48ccf
Show file tree
Hide file tree
Showing 7 changed files with 412 additions and 162 deletions.
89 changes: 48 additions & 41 deletions examples/cyberpunk.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use bevy::prelude::*;
use bevy_parallax::{
LayerData, LayerSpeed, ParallaxCameraComponent, ParallaxMoveEvent, ParallaxPlugin,
ParallaxResource, ParallaxSystems,
CreateParallaxEvent, LayerData, LayerSpeed, ParallaxCameraComponent, ParallaxMoveEvent,
ParallaxPlugin, ParallaxSystems,
};

fn main() {
Expand All @@ -14,42 +14,6 @@ fn main() {
};

App::new()
// Add parallax resource with layer data
.insert_resource(ParallaxResource {
layer_data: vec![
LayerData {
speed: LayerSpeed::Horizontal(0.9),
path: "cyberpunk_back.png".to_string(),
tile_size: Vec2::new(96.0, 160.0),
cols: 1,
rows: 1,
scale: 4.5,
z: 0.0,
..Default::default()
},
LayerData {
speed: LayerSpeed::Horizontal(0.6),
path: "cyberpunk_middle.png".to_string(),
tile_size: Vec2::new(144.0, 160.0),
cols: 1,
rows: 1,
scale: 4.5,
z: 1.0,
..Default::default()
},
LayerData {
speed: LayerSpeed::Horizontal(0.1),
path: "cyberpunk_front.png".to_string(),
tile_size: Vec2::new(272.0, 160.0),
cols: 1,
rows: 1,
scale: 4.5,
z: 2.0,
..Default::default()
},
],
..Default::default()
})
.add_plugins(
DefaultPlugins
.set(WindowPlugin {
Expand All @@ -66,24 +30,67 @@ fn main() {
}

// Put a ParallaxCameraComponent on the camera used for parallax
pub fn initialize_camera_system(mut commands: Commands) {
commands
pub fn initialize_camera_system(
mut commands: Commands,
mut create_parallax: EventWriter<CreateParallaxEvent>,
) {
let camera = commands
.spawn(Camera2dBundle::default())
.insert(ParallaxCameraComponent);
.insert(ParallaxCameraComponent::default())
.id();
create_parallax.send(CreateParallaxEvent {
layers_data: vec![
LayerData {
speed: LayerSpeed::Horizontal(0.9),
path: "cyberpunk_back.png".to_string(),
tile_size: Vec2::new(96.0, 160.0),
cols: 1,
rows: 1,
scale: 4.5,
z: 0.0,
..Default::default()
},
LayerData {
speed: LayerSpeed::Horizontal(0.6),
path: "cyberpunk_middle.png".to_string(),
tile_size: Vec2::new(144.0, 160.0),
cols: 1,
rows: 1,
scale: 4.5,
z: 1.0,
..Default::default()
},
LayerData {
speed: LayerSpeed::Horizontal(0.1),
path: "cyberpunk_front.png".to_string(),
tile_size: Vec2::new(272.0, 160.0),
cols: 1,
rows: 1,
scale: 4.5,
z: 2.0,
..Default::default()
},
],
camera: camera,
})
}

// Send a ParallaxMoveEvent with the desired camera movement speed
pub fn move_camera_system(
keyboard_input: Res<Input<KeyCode>>,
mut move_event_writer: EventWriter<ParallaxMoveEvent>,
camera_query: Query<Entity, With<Camera>>,
) {
let camera = camera_query.get_single().unwrap();
if keyboard_input.pressed(KeyCode::D) || keyboard_input.pressed(KeyCode::Right) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(3.0, 0.0),
camera: camera,
});
} else if keyboard_input.pressed(KeyCode::A) || keyboard_input.pressed(KeyCode::Left) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(-3.0, 0.0),
camera: camera,
});
}
}
29 changes: 17 additions & 12 deletions examples/fishy.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use bevy::prelude::*;
use bevy_parallax::{
LayerData, ParallaxCameraComponent, ParallaxMoveEvent, ParallaxPlugin, ParallaxResource,
CreateParallaxEvent, LayerData, ParallaxCameraComponent, ParallaxMoveEvent, ParallaxPlugin,
ParallaxSystems,
};
use ron::de::from_bytes;
Expand All @@ -15,14 +15,6 @@ fn main() {
};

App::new()
// Add parallax resource with layer data (from ron file)
.insert_resource(ParallaxResource {
layer_data: from_bytes::<Vec<LayerData>>(include_bytes!(
"../data/fishy_layer_data.ron"
))
.unwrap(),
..Default::default()
})
.add_plugins(
DefaultPlugins
.set(WindowPlugin {
Expand All @@ -39,24 +31,37 @@ fn main() {
}

// Put a ParallaxCameraComponent on the camera used for parallax
pub fn initialize_camera_system(mut commands: Commands) {
commands
pub fn initialize_camera_system(
mut commands: Commands,
mut create_parallax: EventWriter<CreateParallaxEvent>,
) {
let camera = commands
.spawn(Camera2dBundle::default())
.insert(ParallaxCameraComponent);
.insert(ParallaxCameraComponent::default())
.id();
create_parallax.send(CreateParallaxEvent {
layers_data: from_bytes::<Vec<LayerData>>(include_bytes!("../data/fishy_layer_data.ron"))
.unwrap(),
camera: camera,
});
}

// Send a ParallaxMoveEvent with the desired camera movement speed
pub fn move_camera_system(
keyboard_input: Res<Input<KeyCode>>,
camera_query: Query<Entity, With<Camera>>,
mut move_event_writer: EventWriter<ParallaxMoveEvent>,
) {
let camera = camera_query.get_single().unwrap();
if keyboard_input.pressed(KeyCode::D) || keyboard_input.pressed(KeyCode::Right) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(3.0, 0.0),
camera: camera,
});
} else if keyboard_input.pressed(KeyCode::A) || keyboard_input.pressed(KeyCode::Left) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(-3.0, 0.0),
camera: camera,
});
}
}
71 changes: 40 additions & 31 deletions examples/sky.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
use bevy::prelude::*;
use bevy_parallax::{
LayerData, LayerSpeed, ParallaxCameraComponent, ParallaxMoveEvent, ParallaxPlugin,
ParallaxResource, ParallaxSystems,
CreateParallaxEvent, LayerData, LayerSpeed, ParallaxCameraComponent, ParallaxMoveEvent,
ParallaxPlugin, ParallaxSystems,
};

fn main() {
Expand All @@ -14,32 +14,6 @@ fn main() {
};

App::new()
// Add parallax resource with layer data
.insert_resource(ParallaxResource {
layer_data: vec![
LayerData {
speed: LayerSpeed::Bidirectional(0.9, 0.9),
path: "sky-stars.png".to_string(),
tile_size: Vec2::new(53.0, 55.0),
cols: 1,
rows: 1,
scale: 3.0,
z: 0.0,
..Default::default()
},
LayerData {
speed: LayerSpeed::Bidirectional(0.1, 0.5),
path: "sky-clouds.png".to_string(),
tile_size: Vec2::new(109.0, 43.0),
cols: 1,
rows: 1,
scale: 4.0,
z: 1.0,
..Default::default()
},
],
..Default::default()
})
.add_plugins(
DefaultPlugins
.set(WindowPlugin {
Expand All @@ -56,33 +30,68 @@ fn main() {
}

// Put a ParallaxCameraComponent on the camera used for parallax
pub fn initialize_camera_system(mut commands: Commands) {
commands
pub fn initialize_camera_system(
mut commands: Commands,
mut create_parallax: EventWriter<CreateParallaxEvent>,
) {
let camera = commands
.spawn(Camera2dBundle::default())
.insert(ParallaxCameraComponent);
.insert(ParallaxCameraComponent::default())
.id();
create_parallax.send(CreateParallaxEvent {
layers_data: vec![
LayerData {
speed: LayerSpeed::Bidirectional(0.9, 0.9),
path: "sky-stars.png".to_string(),
tile_size: Vec2::new(53.0, 55.0),
cols: 1,
rows: 1,
scale: 3.0,
z: 0.0,
..Default::default()
},
LayerData {
speed: LayerSpeed::Bidirectional(0.1, 0.5),
path: "sky-clouds.png".to_string(),
tile_size: Vec2::new(109.0, 43.0),
cols: 1,
rows: 1,
scale: 4.0,
z: 1.0,
..Default::default()
},
],
camera: camera,
})
}

// Send a ParallaxMoveEvent with the desired camera movement speed
pub fn move_camera_system(
keyboard_input: Res<Input<KeyCode>>,
camera_query: Query<Entity, With<Camera>>,
mut move_event_writer: EventWriter<ParallaxMoveEvent>,
) {
let camera = camera_query.get_single().unwrap();
if keyboard_input.pressed(KeyCode::D) || keyboard_input.pressed(KeyCode::Right) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(3.0, 0.0),
camera: camera,
});
} else if keyboard_input.pressed(KeyCode::A) || keyboard_input.pressed(KeyCode::Left) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(-3.0, 0.0),
camera: camera,
});
}
if keyboard_input.pressed(KeyCode::W) || keyboard_input.pressed(KeyCode::Up) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(0.0, 3.0),
camera: camera,
});
} else if keyboard_input.pressed(KeyCode::S) || keyboard_input.pressed(KeyCode::Down) {
move_event_writer.send(ParallaxMoveEvent {
camera_move_speed: Vec2::new(0.0, -3.0),
camera: camera,
});
}
}
Loading

0 comments on commit cd48ccf

Please sign in to comment.