diff --git a/engine/src/lib.rs b/engine/src/lib.rs index 79c8235..2607feb 100644 --- a/engine/src/lib.rs +++ b/engine/src/lib.rs @@ -4,7 +4,12 @@ pub use bevy::{ asset::{AssetPath, HandleTemplate}, audio::{AudioPlayerTemplate, Volume}, color::palettes::basic::*, - feathers::{FeathersPlugins, controls::*}, + feathers::{ + FeathersPlugins, + controls::*, + dark_theme::create_dark_theme, + theme::{ThemedText, UiTheme}, + }, input::{ common_conditions::*, mouse::{AccumulatedMouseMotion, MouseMotion}, diff --git a/life/src/main.rs b/life/src/main.rs index ee08f94..85085d8 100644 --- a/life/src/main.rs +++ b/life/src/main.rs @@ -1,13 +1,8 @@ -use bevy::{ - asset::{AssetPath, HandleTemplate}, - audio::AudioPlayerTemplate, - mesh::Mesh2dTemplate, - sprite_render::MeshMaterial2dTemplate, -}; +use bevy::{feathers::theme::ThemeProps, ui::InteractionDisabled}; use engine::*; const TILE: &str = "tileGrey_01.png"; -const FRAME_DURATION: f32 = 0.5; +const SIM_FRAME_DURATION: f32 = 0.5; fn main() { App::new() @@ -20,6 +15,7 @@ fn main() { .init_resource::() .init_resource::() .insert_resource(ClearColor(WHITE.into())) + .insert_resource(UiTheme(create_light_theme())) .init_state::() .init_state::() .add_message::() @@ -58,27 +54,19 @@ fn main() { Update, simulation_step .run_if(in_state(SimulationPlayback::Run)) - .run_if(cooldown_secs(FRAME_DURATION)), + .run_if(cooldown_secs(SIM_FRAME_DURATION)), ) .add_systems( Update, simulation_step.run_if(state_changed::), ) - .add_systems( - Update, - visualize_ui_state.run_if(on_message::>), - ) + // TODO: Visualize audio play/mute buttons enable/disable + .add_systems(Update, toggle_interactive::) + .add_systems(Update, toggle_interactive::) + // TODO Visualize simulation run/pause buttons enable/disable .add_systems(Update, cell_lifecycle.run_if(on_message::)) .add_systems(Update, mouse_pan.run_if(on_message::)) .add_systems(Update, set_pan_state) - .add_systems( - Update, - toggle_state_entities::.run_if(state_changed::), - ) - .add_systems( - Update, - toggle_state_entities::.run_if(state_changed::), - ) .run(); } @@ -176,13 +164,13 @@ fn the_ui() -> impl Scene { writer.write(AppExit::Success); }), ui_button(UiButton::Pause) - SimulationPlayback::Run + SimulationPlayback::Pause on(|_: On, mut next: ResMut>| { // Set simulation state next.set(SimulationPlayback::Pause); }), ui_button(UiButton::Play) - SimulationPlayback::Pause + SimulationPlayback::Run on(|_: On, mut next: ResMut>| { // Set simulation state next.set(SimulationPlayback::Run); @@ -210,12 +198,12 @@ fn the_ui() -> impl Scene { }); }), ui_button(UiButton::MuteAudio) - AudioPlayback::Play + AudioPlayback::Mute on(|_: On, mut next: ResMut>| { next.set(AudioPlayback::Mute); }), ui_button(UiButton::PlayAudio) - AudioPlayback::Mute + AudioPlayback::Play on(|_: On, mut next: ResMut>| { next.set(AudioPlayback::Play); }), @@ -506,7 +494,8 @@ fn new_cell( let c = Coordinates { x, y }; let volume = { - if *sim_state.get() == SimulationPlayback::Run && *audio_state.get() == AudioPlayback::Play { + if *sim_state.get() == SimulationPlayback::Run && *audio_state.get() == AudioPlayback::Play + { let ratio = 1.0 / (sinks.count() + 1) as f32; Volume::Linear(ratio) } else { @@ -565,23 +554,6 @@ fn cooldown_secs(input: f32) -> impl FnMut(Local, Res