0.19 upgrade, move some things to bsn! syntax

main
Elijah Voigt 1 month ago
parent 9debf268a6
commit e3f1bf83e2

@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
bevy = "0.18.1" bevy = "0.19.0"
[features] [features]
dev = ["bevy/dynamic_linking", "bevy/file_watcher", "bevy/debug", "bevy/bevy_light", "bevy/free_camera"] dev = ["bevy/dynamic_linking", "bevy/file_watcher", "bevy/debug", "bevy/bevy_light", "bevy/free_camera"]

@ -1,4 +1,13 @@
pub use std::time::Duration;
pub use bevy::{ pub use bevy::{
color::palettes::basic::*, input::common_conditions::*, platform::collections::HashSet, audio::Volume,
color::palettes::basic::*,
input::{
common_conditions::*,
mouse::{AccumulatedMouseMotion, MouseMotion},
},
picking::hover::Hovered,
platform::collections::{HashMap, HashSet},
prelude::*, prelude::*,
}; };

18
life/Cargo.lock generated

@ -124,9 +124,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
[[package]] [[package]]
name = "alsa" name = "alsa"
version = "0.11.0" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812947049edcd670a82cd5c73c3661d2e58468577ba8489de58e1a73c04cbd5d" checksum = "7c88dbbce13b232b26250e1e2e6ac18b6a891a646b8148285036ebce260ac5c3"
dependencies = [ dependencies = [
"alsa-sys", "alsa-sys",
"bitflags 2.13.0", "bitflags 2.13.0",
@ -136,9 +136,9 @@ dependencies = [
[[package]] [[package]]
name = "alsa-sys" name = "alsa-sys"
version = "0.4.0" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad7569085a265dd3f607ebecce7458eaab2132a84393534c95b18dcbc3f31e04" checksum = "db8fee663d06c4e303404ef5f40488a53e062f89ba8bfed81f42325aafad1527"
dependencies = [ dependencies = [
"libc", "libc",
"pkg-config", "pkg-config",
@ -2122,11 +2122,11 @@ dependencies = [
[[package]] [[package]]
name = "coreaudio-rs" name = "coreaudio-rs"
version = "0.14.2" version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d5d7dca3ebcf65a035582c9ad4385371a9d9ee6537474d2a278f4e1e475bb58" checksum = "1aae284fbaf7d27aa0e292f7677dfbe26503b0d555026f702940805a630eac17"
dependencies = [ dependencies = [
"bitflags 2.13.0", "bitflags 1.3.2",
"libc", "libc",
"objc2-audio-toolbox", "objc2-audio-toolbox",
"objc2-core-audio", "objc2-core-audio",
@ -2136,9 +2136,9 @@ dependencies = [
[[package]] [[package]]
name = "cpal" name = "cpal"
version = "0.17.3" version = "0.17.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8942da362c0f0d895d7cac616263f2f9424edc5687364dfd1d25ef7eba506d7" checksum = "5b1f9c7312f19fc2fa12fd7acaf38de54e8320ba10d1a02dcbe21038def51ccb"
dependencies = [ dependencies = [
"alsa", "alsa",
"coreaudio-rs", "coreaudio-rs",

@ -1,13 +1,3 @@
// TODO: Rearchitected so it's Cell and Coordiantes not Cell { position { coordiantes } }
use std::time::Duration;
use bevy::{
audio::Volume,
input::mouse::{AccumulatedMouseMotion, MouseMotion},
picking::hover::Hovered,
platform::collections::HashMap,
};
use engine::*; use engine::*;
const TILE: &str = "tileGrey_01.png"; const TILE: &str = "tileGrey_01.png";
@ -22,10 +12,12 @@ fn main() {
.init_resource::<NextCoordinates>() .init_resource::<NextCoordinates>()
.init_resource::<CellAssets>() .init_resource::<CellAssets>()
.init_resource::<Panning>() .init_resource::<Panning>()
.insert_resource(ClearColor(WHITE.into()))
.init_state::<SimulationPlayback>() .init_state::<SimulationPlayback>()
.init_state::<AudioPlayback>() .init_state::<AudioPlayback>()
.add_message::<Lifecycle>() .add_message::<Lifecycle>()
.add_systems(Startup, setup) .add_systems(Startup, the_camera.spawn())
.add_systems(Startup, the_ui.spawn())
.add_systems(Startup, load_audio_tones) .add_systems(Startup, load_audio_tones)
.add_systems(Startup, load_materials) .add_systems(Startup, load_materials)
.add_systems(Startup, load_meshes) .add_systems(Startup, load_meshes)
@ -87,14 +79,14 @@ fn main() {
const SCALE: f32 = 100.0; const SCALE: f32 = 100.0;
#[derive(States, Debug, Default, Hash, PartialEq, Eq, Clone, Component)] #[derive(States, Debug, Default, Hash, PartialEq, Eq, Clone, Component, FromTemplate)]
enum AudioPlayback { enum AudioPlayback {
#[default] #[default]
Mute, Mute,
Play, Play,
} }
#[derive(Debug, Component, PartialEq)] #[derive(Debug, Component, PartialEq, Default, FromTemplate)]
#[require(Visibility, Transform)] #[require(Visibility, Transform)]
enum UiButton { enum UiButton {
Power, Power,
@ -105,6 +97,8 @@ enum UiButton {
ZoomIn, ZoomIn,
PlayAudio, PlayAudio,
MuteAudio, MuteAudio,
#[default]
None,
} }
impl UiButton { impl UiButton {
@ -118,6 +112,7 @@ impl UiButton {
Self::ZoomIn => "zoomIn.png", Self::ZoomIn => "zoomIn.png",
Self::PlayAudio => "audioOn.png", Self::PlayAudio => "audioOn.png",
Self::MuteAudio => "audioOff.png", Self::MuteAudio => "audioOff.png",
Self::None => todo!(),
} }
} }
} }
@ -169,82 +164,71 @@ fn on_add_ui_button(
.observe(responsive_button_out); .observe(responsive_button_out);
} }
fn setup(mut commands: Commands) { fn the_camera() -> impl Scene {
commands.spawn(( bsn! {
Camera2d, Camera2d
Camera {
clear_color: ClearColorConfig::Custom(WHITE.into()),
..default()
},
));
commands
.spawn((
Node {
top: Val::Px(0.0),
left: Val::Px(0.0),
height: Val::Px(40.0),
width: Val::Percent(100.0),
..default()
},
Transform::default(),
))
.with_children(|parent| {
parent.spawn(UiButton::Power).observe(shutdown);
// TODO: Reset button
parent
.spawn((UiButton::Pause, SimulationPlayback::Run))
.observe(pause_sim);
parent
.spawn((UiButton::Play, SimulationPlayback::Pause))
.observe(play_sim);
parent.spawn(UiButton::Step).observe(step_sim);
parent.spawn(UiButton::ZoomOut).observe(zoom_out);
parent.spawn(UiButton::ZoomIn).observe(zoom_in);
// TODO: Mute/Unmute Toggle
parent
.spawn((UiButton::MuteAudio, AudioPlayback::Play))
.observe(mute_audio);
parent
.spawn((UiButton::PlayAudio, AudioPlayback::Mute))
.observe(play_audio);
});
fn shutdown(_trigger: On<Pointer<Press>>, mut writer: MessageWriter<AppExit>) {
writer.write(AppExit::Success);
}
fn play_sim(_trigger: On<Pointer<Press>>, mut next: ResMut<NextState<SimulationPlayback>>) {
// Set simulation state
next.set(SimulationPlayback::Run);
}
fn pause_sim(_trigger: On<Pointer<Press>>, mut next: ResMut<NextState<SimulationPlayback>>) {
// Set simulation state
next.set(SimulationPlayback::Pause);
} }
fn step_sim(_trigger: On<Pointer<Press>>, mut next: ResMut<NextState<SimulationPlayback>>) { }
next.set(SimulationPlayback::Step);
} fn the_ui() -> impl Scene {
fn zoom_out(_trigger: On<Pointer<Press>>, mut projection: Query<&mut Projection>) { bsn! {
projection.iter_mut().for_each(|mut p| match *p { Node {
Projection::Orthographic(ref mut o) => { top: Val::Px(0.0),
o.scale /= 0.5; left: Val::Px(0.0),
} height: Val::Px(40.0),
_ => todo!(), width: Val::Percent(100.0),
}); }
} Transform
fn zoom_in(_trigger: On<Pointer<Press>>, mut projection: Query<&mut Projection>) { Children [
projection.iter_mut().for_each(|mut p| match *p { UiButton::Power
Projection::Orthographic(ref mut o) => { on(|_: On<Pointer<Press>>, mut writer: MessageWriter<AppExit>| {
o.scale *= 0.5; writer.write(AppExit::Success);
} }),
_ => todo!(), UiButton::Pause
}); SimulationPlayback::Run
} on(|_: On<Pointer<Press>>, mut next: ResMut<NextState<SimulationPlayback>>| {
fn play_audio(_trigger: On<Pointer<Press>>, mut next: ResMut<NextState<AudioPlayback>>) { // Set simulation state
next.set(AudioPlayback::Play); next.set(SimulationPlayback::Pause);
} }),
fn mute_audio(_trigger: On<Pointer<Press>>, mut next: ResMut<NextState<AudioPlayback>>) { UiButton::Play
next.set(AudioPlayback::Mute); SimulationPlayback::Pause
on(|_: On<Pointer<Press>>, mut next: ResMut<NextState<SimulationPlayback>>| {
// Set simulation state
next.set(SimulationPlayback::Run);
}),
UiButton::Step
on(|_: On<Pointer<Press>>, mut next: ResMut<NextState<SimulationPlayback>>| {
next.set(SimulationPlayback::Step);
}),
UiButton::ZoomOut
on(|_: On<Pointer<Press>>, mut projection: Query<&mut Projection>| {
projection.iter_mut().for_each(|mut p| match *p {
Projection::Orthographic(ref mut o) => {
o.scale /= 0.5;
}
_ => todo!(),
});
}),
UiButton::ZoomIn
on(|_: On<Pointer<Press>>, mut projection: Query<&mut Projection>| {
projection.iter_mut().for_each(|mut p| match *p {
Projection::Orthographic(ref mut o) => {
o.scale *= 0.5;
}
_ => todo!(),
});
}),
UiButton::MuteAudio
AudioPlayback::Play
on(|_: On<Pointer<Press>>, mut next: ResMut<NextState<AudioPlayback>>| {
next.set(AudioPlayback::Play);
}),
UiButton::PlayAudio
AudioPlayback::Mute
on(|_: On<Pointer<Press>>, mut next: ResMut<NextState<AudioPlayback>>| {
next.set(AudioPlayback::Mute);
}),
]
} }
} }
@ -433,7 +417,8 @@ fn assert_cell_uniqueness(q: Query<(Entity, &Coordinates), With<Cell>>) {
}) })
} }
#[derive(States, Debug, Default, Hash, PartialEq, Eq, Clone, Component)] #[derive(States, Debug, Default, Hash, PartialEq, Eq, Clone, Component, FromTemplate)]
#[allow(dead_code)]
enum SimulationPlayback { enum SimulationPlayback {
#[default] #[default]
Pause, Pause,
@ -663,7 +648,7 @@ fn control_volume(state: ResMut<State<AudioPlayback>>, mut sinks: Query<&mut Aud
sinks.iter_mut().for_each(|mut sink| { sinks.iter_mut().for_each(|mut sink| {
sink.set_volume(volume); sink.set_volume(volume);
}) })
}, }
AudioPlayback::Mute => sinks.iter_mut().for_each(|mut sink| { AudioPlayback::Mute => sinks.iter_mut().for_each(|mut sink| {
sink.set_volume(Volume::SILENT); sink.set_volume(Volume::SILENT);
}), }),

@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2024" edition = "2024"
[dependencies] [dependencies]
bevy = "0.18.1" bevy = "0.19.0"
[dependencies.engine] [dependencies.engine]
path = "../engine" path = "../engine"

Loading…
Cancel
Save