Spatial audio
This commit is contained in:
parent
06548a0249
commit
209b25c29f
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -639,6 +639,7 @@ dependencies = [
|
||||||
"bevy_ecs",
|
"bevy_ecs",
|
||||||
"bevy_gizmos_macros",
|
"bevy_gizmos_macros",
|
||||||
"bevy_math",
|
"bevy_math",
|
||||||
|
"bevy_pbr",
|
||||||
"bevy_reflect",
|
"bevy_reflect",
|
||||||
"bevy_render",
|
"bevy_render",
|
||||||
"bevy_sprite",
|
"bevy_sprite",
|
||||||
|
|
|
@ -15,6 +15,7 @@ bevy = { version = "0.14.0", default-features = false, features = [
|
||||||
"bevy_text", # for writing characters to the screen
|
"bevy_text", # for writing characters to the screen
|
||||||
"bevy_ui",
|
"bevy_ui",
|
||||||
"bevy_winit",
|
"bevy_winit",
|
||||||
|
"bevy_pbr",
|
||||||
"multi_threaded", # go faster
|
"multi_threaded", # go faster
|
||||||
"png",
|
"png",
|
||||||
"x11", # run on non-wayland linuxes too
|
"x11", # run on non-wayland linuxes too
|
||||||
|
|
|
@ -54,13 +54,13 @@ pub fn process_input(
|
||||||
|
|
||||||
// with this in mind, to convert mouse coordinates to world coordinates for comparing against our logical window center, we take the absolute of the difference in height
|
// with this in mind, to convert mouse coordinates to world coordinates for comparing against our logical window center, we take the absolute of the difference in height
|
||||||
|
|
||||||
gizmos.line(Vec3::ZERO, Vec3::X * 100., GREEN);
|
// gizmos.line(Vec3::ZERO, Vec3::X * 100., GREEN);
|
||||||
if let Ok(window) = window.get_single() {
|
if let Ok(window) = window.get_single() {
|
||||||
if let Some(target) = window.cursor_position() {
|
if let Some(target) = window.cursor_position() {
|
||||||
let size = window.size();
|
let size = window.size();
|
||||||
let center = size / 2.;
|
let center = size / 2.;
|
||||||
let modified_target = target.with_y(size.y - target.y) - center;
|
let modified_target = target.with_y(size.y - target.y) - center;
|
||||||
gizmos.line(Vec2::ZERO.extend(0.), modified_target.extend(0.), RED);
|
// gizmos.line(Vec2::ZERO.extend(0.), modified_target.extend(0.), RED);
|
||||||
input.angle = modified_target.to_angle();
|
input.angle = modified_target.to_angle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
src/main.rs
12
src/main.rs
|
@ -75,6 +75,11 @@ fn main() -> AppExit {
|
||||||
.init_state::<View>()
|
.init_state::<View>()
|
||||||
.init_state::<Game>();
|
.init_state::<Game>();
|
||||||
|
|
||||||
|
app.insert_resource(AmbientLight {
|
||||||
|
color: Color::srgb(1., 1., 1.),
|
||||||
|
brightness: 1.,
|
||||||
|
});
|
||||||
|
|
||||||
app.configure_sets(
|
app.configure_sets(
|
||||||
Update,
|
Update,
|
||||||
(
|
(
|
||||||
|
@ -116,13 +121,6 @@ fn main() -> AppExit {
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
.insert_resource(ClearColor(Color::srgb(0.3, 0.1, 0.5)));
|
.insert_resource(ClearColor(Color::srgb(0.3, 0.1, 0.5)));
|
||||||
// NOTE: would need to add PBR feature I think?
|
|
||||||
// Was intending to use this for day/night cycle type stuff a la V Rising?
|
|
||||||
// app.insert_resource(AmbientLight {
|
|
||||||
// color: Color::srgb(1., 1., 1.),
|
|
||||||
// brightness: 1.,
|
|
||||||
// });
|
|
||||||
|
|
||||||
app.run()
|
app.run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ pub fn startup(
|
||||||
mut materials: ResMut<Assets<ColorMaterial>>,
|
mut materials: ResMut<Assets<ColorMaterial>>,
|
||||||
) {
|
) {
|
||||||
let mesh = meshes.add(Capsule2d::new(3.0, 25.0));
|
let mesh = meshes.add(Capsule2d::new(3.0, 25.0));
|
||||||
let material = materials.add(Color::hsl(360. * 1 as f32 / 3 as f32, 0.95, 0.7));
|
let material = materials.add(Color::hsla(360. * 1 as f32 / 3 as f32, 0.95, 0.7, 0.5));
|
||||||
let transform = Transform::from_xyz(0.0, 0.0, 500.);
|
let transform = Transform::from_xyz(0.0, 0.0, 500.);
|
||||||
let layout = assets.add(TextureAtlasLayout::from_grid(
|
let layout = assets.add(TextureAtlasLayout::from_grid(
|
||||||
UVec2::new(32, 64),
|
UVec2::new(32, 64),
|
||||||
|
@ -47,8 +47,8 @@ pub fn startup(
|
||||||
},
|
},
|
||||||
YSortable,
|
YSortable,
|
||||||
Watched,
|
Watched,
|
||||||
Transform::default(),
|
TransformBundle::default(),
|
||||||
GlobalTransform::default(),
|
SpatialListener::new(20.),
|
||||||
Mover {
|
Mover {
|
||||||
velocity: Velocity(Vec2::ZERO),
|
velocity: Velocity(Vec2::ZERO),
|
||||||
heading: Heading(Vec2::ZERO),
|
heading: Heading(Vec2::ZERO),
|
||||||
|
@ -82,16 +82,22 @@ pub fn startup(
|
||||||
text.transform.translation.z = 500.0;
|
text.transform.translation.z = 500.0;
|
||||||
text.transform.translation.y = 24.;
|
text.transform.translation.y = 24.;
|
||||||
player.spawn(text);
|
player.spawn(text);
|
||||||
player.spawn((SpatialBundle::default(), SpatialListener::new(10.)));
|
player
|
||||||
player.spawn((
|
.spawn((
|
||||||
Crosshair,
|
Crosshair,
|
||||||
MaterialMesh2dBundle {
|
TransformBundle {
|
||||||
mesh: mesh.into(),
|
local: transform,
|
||||||
transform,
|
..default()
|
||||||
material,
|
},
|
||||||
..default()
|
))
|
||||||
},
|
.with_children(|crosshair| {
|
||||||
));
|
crosshair.spawn(MaterialMesh2dBundle {
|
||||||
|
mesh: mesh.into(),
|
||||||
|
transform: Transform::from_xyz(0., 20., 0.),
|
||||||
|
material,
|
||||||
|
..default()
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -105,7 +111,7 @@ pub fn control(
|
||||||
heading.0 = input.movement;
|
heading.0 = input.movement;
|
||||||
}
|
}
|
||||||
if let Ok(mut transform) = crosshair.get_single_mut() {
|
if let Ok(mut transform) = crosshair.get_single_mut() {
|
||||||
transform.rotation = Quat::from_rotation_z(input.angle + (TAU / 4.));
|
transform.rotation = Quat::from_rotation_z(input.angle - (TAU / 4.));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,11 +124,14 @@ pub fn meow_on_r(
|
||||||
if keys.just_pressed(KeyCode::KeyR) {
|
if keys.just_pressed(KeyCode::KeyR) {
|
||||||
if let Ok(player) = player.get_single() {
|
if let Ok(player) = player.get_single() {
|
||||||
let sound = commands
|
let sound = commands
|
||||||
.spawn(AudioSourceBundle {
|
.spawn((
|
||||||
source: assets.load::<AudioSource>("sfx/meow.wav"),
|
SpatialBundle::default(),
|
||||||
settings: PlaybackSettings::DESPAWN.with_spatial(true),
|
AudioBundle {
|
||||||
..default()
|
source: assets.load::<AudioSource>("sfx/meow.wav"),
|
||||||
})
|
settings: PlaybackSettings::DESPAWN.with_spatial(true),
|
||||||
|
..default()
|
||||||
|
},
|
||||||
|
))
|
||||||
.id();
|
.id();
|
||||||
commands.entity(player).push_children(&[sound]);
|
commands.entity(player).push_children(&[sound]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue