@@ -47,7 +47,7 @@ impl Plugin for SudokuPlugin {
4747 app. init_resource :: < AutoCandidateMode > ( )
4848 . init_resource :: < Settings > ( )
4949 . add_event :: < MoveSelectCell > ( )
50- . add_systems ( OnEnter ( GameState :: Playing ) , ( setup_ui, init_cells ) . chain ( ) )
50+ . add_systems ( OnEnter ( GameState :: Playing ) , setup_ui)
5151 . add_systems ( OnExit ( GameState :: Playing ) , cleanup_game)
5252 . add_systems (
5353 Update ,
@@ -64,6 +64,7 @@ impl Plugin for SudokuPlugin {
6464 . add_observer ( on_new_digit)
6565 . add_observer ( on_new_candidate)
6666 . add_observer ( check_conflict)
67+ . add_observer ( init_puzzle)
6768 . add_observer ( find_hint)
6869 . add_observer ( on_clean_cell)
6970 . add_observer ( on_select_cell)
@@ -73,16 +74,15 @@ impl Plugin for SudokuPlugin {
7374 . add_observer ( on_reveal_cell)
7475 . add_observer ( on_reveal_puzzle)
7576 . add_observer ( on_check_cell)
76- . add_observer ( on_check_puzzle)
77- . add_observer ( on_show_more) ;
77+ . add_observer ( on_check_puzzle) ;
7878 }
7979}
8080
8181#[ derive( Resource , Debug ) ]
8282pub struct SudokuManager {
8383 pub solution : Sudoku ,
8484 pub solver : StrategySolver ,
85- pub solved : bool ,
85+ pub is_solved : bool ,
8686}
8787
8888#[ derive( Component ) ]
@@ -164,6 +164,8 @@ fn setup_ui(
164164 } ) ;
165165 } ) ;
166166 } ) ;
167+
168+ commands. trigger ( InitPuzzle ) ;
167169}
168170
169171fn toolbars (
@@ -209,7 +211,7 @@ fn toolbars(
209211}
210212
211213fn right_bar (
212- font_assets : & Res < FontAssets > ,
214+ _font_assets : & Res < FontAssets > ,
213215 texture_assets : & Res < TextureAssets > ,
214216 builder : & mut ChildBuilder ,
215217) {
@@ -272,14 +274,10 @@ fn right_bar(
272274 ..default ( )
273275 } ,
274276 ) )
275- . with_children ( |builder| {
276- spawn_show_more ( font_assets, builder) ;
277- } )
278- . observe (
279- |_trigger : Trigger < Pointer < Click > > , mut commands : Commands | {
280- commands. trigger ( ShowMore ) ;
281- } ,
282- ) ;
277+ // .with_children(|builder| {
278+ // spawn_show_more(font_assets, builder);
279+ // })
280+ . observe ( on_show_more) ;
283281
284282 builder
285283 . spawn ( (
@@ -456,7 +454,11 @@ pub struct ManualCandidatesContainer;
456454#[ derive( Component ) ]
457455pub struct AutoCandidatesContainer ;
458456
459- fn init_cells (
457+ #[ derive( Event ) ]
458+ pub struct InitPuzzle ;
459+
460+ fn init_puzzle (
461+ _ev : Trigger < InitPuzzle > ,
460462 mut commands : Commands ,
461463 cell_background : Query < ( Entity , & CellPosition ) > ,
462464 settings : Res < Settings > ,
@@ -479,7 +481,7 @@ fn init_cells(
479481 commands. insert_resource ( SudokuManager {
480482 solution,
481483 solver : solver. clone ( ) ,
482- solved : false ,
484+ is_solved : false ,
483485 } ) ;
484486
485487 ' l: for ( index, cell_state) in solver. grid_state ( ) . into_iter ( ) . enumerate ( ) {
@@ -503,6 +505,11 @@ fn init_cells(
503505 commands. entity ( entity) . insert ( SelectedCell ) ;
504506 }
505507
508+ commands
509+ . entity ( entity)
510+ . remove :: < ConflictCell > ( )
511+ . remove :: < RevealedCell > ( ) ;
512+
506513 continue ' l;
507514 }
508515 }
@@ -664,7 +671,7 @@ fn check_solver(
664671 audio_assets : Res < AudioAssets > ,
665672 settings : Res < Settings > ,
666673) {
667- if sudoku_manager. solved {
674+ if sudoku_manager. is_solved {
668675 return ;
669676 }
670677
@@ -682,7 +689,7 @@ fn check_solver(
682689 }
683690
684691 if solved_count == 81 {
685- sudoku_manager. solved = true ;
692+ sudoku_manager. is_solved = true ;
686693
687694 if settings. play_sound_on_solve {
688695 audio
@@ -883,7 +890,7 @@ fn update_game_time(
883890 settings : Res < Settings > ,
884891 sudoku_manager : Res < SudokuManager > ,
885892) {
886- if !sudoku_manager. solved {
893+ if !sudoku_manager. is_solved {
887894 game_timer. tick ( time. delta ( ) ) ;
888895 }
889896
@@ -898,14 +905,10 @@ fn update_game_time(
898905 }
899906}
900907
901- #[ derive( Event ) ]
902- pub struct ShowMore ;
903-
904- fn spawn_show_more ( font_assets : & Res < FontAssets > , builder : & mut ChildBuilder ) {
908+ fn spawn_show_more ( font_assets : & Res < FontAssets > , builder : & mut ChildBuilder , is_solved : bool ) {
905909 builder
906910 . spawn ( (
907911 ShowMoreContainer ,
908- Visibility :: Hidden ,
909912 Name :: new ( "show-more-container" ) ,
910913 Node {
911914 top : Val :: Px ( 30.0 ) ,
@@ -921,54 +924,65 @@ fn spawn_show_more(font_assets: &Res<FontAssets>, builder: &mut ChildBuilder) {
921924 GlobalZIndex ( 99 ) ,
922925 ) )
923926 . with_children ( |builder| {
924- more_item (
925- font_assets,
926- builder,
927- "Hint" ,
928- |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
929- commands. trigger ( FindHint ) ;
930- } ,
931- ) ;
932- more_item (
933- font_assets,
934- builder,
935- "Check Cell" ,
936- |_: Trigger < Pointer < Click > > , mut commands, q_selected| {
937- commands. trigger_targets ( CheckCell , vec ! [ * q_selected] ) ;
938- } ,
939- ) ;
940- more_item (
941- font_assets,
942- builder,
943- "Check Puzzle" ,
944- |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
945- commands. trigger ( CheckPuzzle ) ;
946- } ,
947- ) ;
948- more_item (
949- font_assets,
950- builder,
951- "Reveal Cell" ,
952- |_: Trigger < Pointer < Click > > , mut commands, q_selected| {
953- commands. trigger_targets ( RevealCell , vec ! [ * q_selected] ) ;
954- } ,
955- ) ;
956- more_item (
957- font_assets,
958- builder,
959- "Reveal Puzzle" ,
960- |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
961- commands. trigger ( RevealPuzzle ) ;
962- } ,
963- ) ;
964- more_item (
965- font_assets,
966- builder,
967- "Reset Puzzle" ,
968- |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
969- commands. trigger ( ResetPuzzle ) ;
970- } ,
971- ) ;
927+ if is_solved {
928+ more_item (
929+ font_assets,
930+ builder,
931+ "Reset Puzzle" ,
932+ |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
933+ commands. trigger ( InitPuzzle ) ;
934+ } ,
935+ ) ;
936+ } else {
937+ more_item (
938+ font_assets,
939+ builder,
940+ "Hint" ,
941+ |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
942+ commands. trigger ( FindHint ) ;
943+ } ,
944+ ) ;
945+ more_item (
946+ font_assets,
947+ builder,
948+ "Check Cell" ,
949+ |_: Trigger < Pointer < Click > > , mut commands, q_selected| {
950+ commands. trigger_targets ( CheckCell , vec ! [ * q_selected] ) ;
951+ } ,
952+ ) ;
953+ more_item (
954+ font_assets,
955+ builder,
956+ "Check Puzzle" ,
957+ |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
958+ commands. trigger ( CheckPuzzle ) ;
959+ } ,
960+ ) ;
961+ more_item (
962+ font_assets,
963+ builder,
964+ "Reveal Cell" ,
965+ |_: Trigger < Pointer < Click > > , mut commands, q_selected| {
966+ commands. trigger_targets ( RevealCell , vec ! [ * q_selected] ) ;
967+ } ,
968+ ) ;
969+ more_item (
970+ font_assets,
971+ builder,
972+ "Reveal Puzzle" ,
973+ |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
974+ commands. trigger ( RevealPuzzle ) ;
975+ } ,
976+ ) ;
977+ more_item (
978+ font_assets,
979+ builder,
980+ "Reset Puzzle" ,
981+ |_: Trigger < Pointer < Click > > , mut commands, _q_selected| {
982+ commands. trigger ( ResetPuzzle ) ;
983+ } ,
984+ ) ;
985+ }
972986 } ) ;
973987}
974988
@@ -1038,18 +1052,25 @@ fn more_item(
10381052struct ShowMoreContainer ;
10391053
10401054fn on_show_more (
1041- _trigger : Trigger < ShowMore > ,
1042- mut q_more : Query < & mut Visibility , With < ShowMoreContainer > > ,
1055+ trigger : Trigger < Pointer < Click > > ,
1056+ q_more : Query < Entity , With < ShowMoreContainer > > ,
10431057 mut opened : Local < Opened > ,
1058+ font_assets : Res < FontAssets > ,
1059+ mut commands : Commands ,
1060+ sudoku_manager : Res < SudokuManager > ,
10441061) {
1045- for mut vis in q_more. iter_mut ( ) {
1046- if opened. 0 {
1047- opened. 0 = false ;
1048- * vis = Visibility :: Hidden ;
1049- } else {
1050- opened. 0 = true ;
1051- * vis = Visibility :: Visible ;
1062+ let parent = trigger. entity ( ) ;
1063+
1064+ if opened. 0 {
1065+ opened. 0 = false ;
1066+ for entity in q_more. iter ( ) {
1067+ commands. entity ( entity) . despawn_recursive ( ) ;
10521068 }
1069+ } else {
1070+ opened. 0 = true ;
1071+ commands. entity ( parent) . with_children ( |builder| {
1072+ spawn_show_more ( & font_assets, builder, sudoku_manager. is_solved ) ;
1073+ } ) ;
10531074 }
10541075}
10551076
0 commit comments