@ -3,11 +3,9 @@
#![ allow(dead_code) ]
#![ allow(dead_code) ]
use bevy ::{
use bevy ::{
feathers ::{ containers ::* , theme ::ThemeProps } ,
feathers ::{ containers ::* , theme ::ThemeProps } , ui ::{ Checked , InteractionDisabled } , ui_widgets ::{
ui ::{ Checked , InteractionDisabled } ,
ui_widgets ::{
ActivateOnPress , Checkbox , SliderPrecision , SliderStep , ValueChange , checkbox_self_update , slider_self_update
ActivateOnPress , Checkbox , SliderPrecision , SliderStep , ValueChange , checkbox_self_update , slider_self_update
} ,
}
} ;
} ;
use engine ::* ;
use engine ::* ;
@ -181,6 +179,7 @@ fn the_ui() -> impl Scene {
mut pitch_map : ResMut < PitchMap > ,
mut pitch_map : ResMut < PitchMap > ,
) {
) {
if change . is_final {
if change . is_final {
// TODO: if last selected note and de-selected, undo that move please
let this_note = notes . get ( change . source ) . unwrap ( ) ;
let this_note = notes . get ( change . source ) . unwrap ( ) ;
pitch_map . set_note ( this_note , change . value ) ;
pitch_map . set_note ( this_note , change . value ) ;
info ! ( "(note {:?}) Updated pitch map: {:#?}" , this_note , pitch_map ) ;
info ! ( "(note {:?}) Updated pitch map: {:#?}" , this_note , pitch_map ) ;
@ -289,40 +288,40 @@ fn the_ui() -> impl Scene {
}
}
Children [
Children [
ui_checkbox ( "A" )
ui_checkbox ( "A" )
Note::A
template_value( Note::A )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "A#" )
ui_checkbox ( "A#" )
Note::ASharp
template_value( Note::ASharp )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "B" )
ui_checkbox ( "B" )
Note::B
template_value( Note::B )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "C" )
ui_checkbox ( "C" )
Note::C
template_value( Note::C )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "C#" )
ui_checkbox ( "C#" )
Note::CSharp
template_value( Note::CSharp )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "D" )
ui_checkbox ( "D" )
Note::D
template_value( Note::D )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "D#" )
ui_checkbox ( "D#" )
Note::DSharp
template_value( Note::DSharp )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "E" )
ui_checkbox ( "E" )
Note::E
template_value( Note::E )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "F" )
ui_checkbox ( "F" )
Note::F
template_value( Note::F )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "F#" )
ui_checkbox ( "F#" )
Note::FSharp
template_value( Note::FSharp )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "G" )
ui_checkbox ( "G" )
Note::G
template_value( Note::G )
on ( toggle_note ) ,
on ( toggle_note ) ,
ui_checkbox ( "G#" )
ui_checkbox ( "G#" )
Note::GSharp
template_value( Note::GSharp )
on ( toggle_note ) ,
on ( toggle_note ) ,
]
]
] ,
] ,
@ -614,11 +613,15 @@ fn new_cell(
let playback_settings = PlaybackSettings ::ONCE . with_volume ( volume ) ;
let playback_settings = PlaybackSettings ::ONCE . with_volume ( volume ) ;
debug ! ( "using coordinates {:?}" , c ) ;
let cell_pitch = pitch_map . coordinates_cell_pitch ( & c ) ;
#[ derive(Clone, Default, Component) ]
enum Foo { #[ default ] A }
bsn ! {
bsn ! {
Cell
Cell
Coordinates { x , y }
Coordinates { x , y }
template_value ( cell_pitch )
template_value ( playback_settings )
template_value ( playback_settings )
template_value ( Transform ::from_translation ( c . as_translation ( ) + Vec3 ::new ( 0.0 , 0.0 , 1.0 ) ) )
template_value ( Transform ::from_translation ( c . as_translation ( ) + Vec3 ::new ( 0.0 , 0.0 , 1.0 ) ) )
template_value ( Mesh2dTemplate ( cell_assets . mesh . clone ( ) . into ( ) ) )
template_value ( Mesh2dTemplate ( cell_assets . mesh . clone ( ) . into ( ) ) )
@ -678,7 +681,7 @@ struct CellAssets {
}
}
// TODO: Impl Ord to sort Notes
// TODO: Impl Ord to sort Notes
#[ derive( Hash, PartialEq, Eq, Debug, Clone, Component, Default, FromTemplate )]
#[ derive( Component, Clone, Debug, Default, Reflect, PartialEq, Eq, Hash )]
enum Note {
enum Note {
#[ default ]
#[ default ]
A ,
A ,
@ -732,7 +735,7 @@ impl Note {
}
}
}
}
#[ derive( Hash, PartialEq, Eq, Debug, Component )]
#[ derive( Component, Clone, Debug, Default, Reflect, PartialEq, Eq, Hash )]
struct CellPitch {
struct CellPitch {
note : Note ,
note : Note ,
octave : isize ,
octave : isize ,
@ -996,11 +999,13 @@ impl PitchMap {
/// When the pitch map changes, update all cells to use the correct pitch (note + octave)
/// When the pitch map changes, update all cells to use the correct pitch (note + octave)
fn reassign_cell_pitch (
fn reassign_cell_pitch (
mut query : Query < ( & mut CellPitch , & Coordinates ) , With < Cell > > ,
mut query : Query < ( & mut CellPitch , & Coordinates ) > ,
pitch_map : Res < PitchMap > ,
pitch_map : Res < PitchMap > ,
) {
) {
info ! ( "query size: {:?}" , query . iter ( ) . len ( ) ) ;
query . iter_mut ( ) . for_each ( | ( mut cell_pitch , c ) | {
query . iter_mut ( ) . for_each ( | ( mut cell_pitch , c ) | {
* cell_pitch = pitch_map . coordinates_cell_pitch ( c ) ;
* cell_pitch = pitch_map . coordinates_cell_pitch ( c ) ;
info ! ( "Updating cell pitch for {:?}" , c ) ;
} ) ;
} ) ;
}
}