Skip to content

Commit a635227

Browse files
committed
fix show more
1 parent 2c27dcf commit a635227

File tree

2 files changed

+102
-81
lines changed

2 files changed

+102
-81
lines changed

src/game.rs

Lines changed: 101 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]
8282
pub 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

169171
fn toolbars(
@@ -209,7 +211,7 @@ fn toolbars(
209211
}
210212

211213
fn 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)]
457455
pub 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(
10381052
struct ShowMoreContainer;
10391053

10401054
fn 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

src/game/dialog.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,7 @@ fn on_pause_game(
347347
) {
348348
let (entity, mut visibility) = q_dialog.into_inner();
349349
if ev.event().0 {
350-
if time.is_paused() || sudoku_manager.solved {
350+
if time.is_paused() || sudoku_manager.is_solved {
351351
return;
352352
}
353353

0 commit comments

Comments
 (0)