[Add] End game, Restart, Final Check

This commit is contained in:
2026-06-06 22:48:30 +07:00
parent b4207ce3d3
commit bb2463d970
8 changed files with 29 additions and 391 deletions
@@ -169,12 +169,18 @@ namespace Minesweeper.Commands
public void Handle(RestartCommand command)
{
var shouldNotifyReset = gameStateService.Current == GameState.Preparing;
pauseService.Resume();
timerService.Reset();
boardService.InitializeEmptyBoard();
gameStateService.SetState(GameState.Preparing);
boardEcsSyncService.SyncBoard(boardService);
boardEcsSyncService.SyncGameState(gameStateService.Current, false);
if (shouldNotifyReset)
{
gameStateService.NotifyCurrentStateChanged();
}
}
}
@@ -233,6 +239,7 @@ namespace Minesweeper.Commands
pauseService.Resume();
timerService.Reset();
gameStateService.SetState(GameState.FieldSelection);
boardEcsSyncService.ClearBoard();
boardEcsSyncService.SyncGameState(gameStateService.Current, false);
}
}
+5
View File
@@ -18,5 +18,10 @@ namespace Minesweeper.Core
Current = state;
StateChanged?.Invoke(Current);
}
public void NotifyCurrentStateChanged()
{
StateChanged?.Invoke(Current);
}
}
}
+1
View File
@@ -9,5 +9,6 @@ namespace Minesweeper.Core
GameState Current { get; }
void SetState(GameState state);
void NotifyCurrentStateChanged();
}
}
+10
View File
@@ -7,6 +7,16 @@ namespace Minesweeper.ECS
{
public sealed class BoardEcsSyncService : IBoardEcsSyncService
{
public void ClearBoard()
{
if (!TryGetEntityManager(out var entityManager))
{
return;
}
ClearCells(entityManager);
}
public void SyncBoard(IBoardService boardService)
{
if (!TryGetEntityManager(out var entityManager))
@@ -4,6 +4,7 @@ namespace Minesweeper.ECS
{
public interface IBoardEcsSyncService
{
void ClearBoard();
void SyncBoard(IBoardService boardService);
void SyncGameState(GameState state, bool hasFirstClick);
}
@@ -155,7 +155,7 @@ namespace Minesweeper.Presentation.Presenters
private void OnPauseChanged(bool isPaused)
{
if (isPaused)
if (isPaused && gameStateService.Current == GameState.Playing)
{
view.ShowPause();
}