1
1
using System ;
2
+ using System . Collections . Generic ;
2
3
using System . Runtime . CompilerServices ;
3
4
using System . Threading ;
4
5
using Cysharp . Threading . Tasks ;
@@ -37,6 +38,7 @@ public async UniTask StartAsync(CancellationToken cancellationToken = default)
37
38
}
38
39
39
40
await FillAsync ( _fillStrategy , cancellationToken ) ;
41
+
40
42
StartGame ( ) ;
41
43
}
42
44
@@ -55,6 +57,11 @@ public void SetGameBoardFillStrategy(IBoardFillStrategy<TGridSlot> fillStrategy)
55
57
_fillStrategy = fillStrategy ;
56
58
}
57
59
60
+ protected override void OnAllGoalsAchieved ( )
61
+ {
62
+ RaiseGameFinishedAsync ( ) . Forget ( ) ;
63
+ }
64
+
58
65
protected UniTask SwapItemsAsync ( GridPosition position1 , GridPosition position2 ,
59
66
CancellationToken cancellationToken = default )
60
67
{
@@ -69,26 +76,26 @@ protected UniTask SwapItemsAsync(GridPosition position1, GridPosition position2,
69
76
private async UniTask FillAsync ( IBoardFillStrategy < TGridSlot > fillStrategy ,
70
77
CancellationToken cancellationToken = default )
71
78
{
72
- await _jobsExecutor . ExecuteJobsAsync ( fillStrategy . GetFillJobs ( GameBoard ) , cancellationToken ) ;
79
+ await ExecuteJobsAsync ( fillStrategy . GetFillJobs ( GameBoard ) , cancellationToken ) ;
73
80
}
74
81
75
- private async UniTask SwapItemsAsync ( IBoardFillStrategy < TGridSlot > fillStrategy , GridPosition position1 ,
82
+ protected virtual async UniTask SwapItemsAsync ( IBoardFillStrategy < TGridSlot > fillStrategy , GridPosition position1 ,
76
83
GridPosition position2 , CancellationToken cancellationToken = default )
77
84
{
78
- await SwapItems ( position1 , position2 , cancellationToken ) ;
85
+ await SwapGameBoardItemsAsync ( position1 , position2 , cancellationToken ) ;
79
86
80
87
if ( IsSolved ( position1 , position2 , out var solvedData ) )
81
88
{
82
89
NotifySequencesSolved ( solvedData ) ;
83
- await _jobsExecutor . ExecuteJobsAsync ( fillStrategy . GetSolveJobs ( GameBoard , solvedData ) , cancellationToken ) ;
90
+ await ExecuteJobsAsync ( fillStrategy . GetSolveJobs ( GameBoard , solvedData ) , cancellationToken ) ;
84
91
}
85
92
else
86
93
{
87
- await SwapItems ( position1 , position2 , cancellationToken ) ;
94
+ await SwapGameBoardItemsAsync ( position1 , position2 , cancellationToken ) ;
88
95
}
89
96
}
90
97
91
- private async UniTask SwapItems ( GridPosition position1 , GridPosition position2 ,
98
+ protected async UniTask SwapGameBoardItemsAsync ( GridPosition position1 , GridPosition position2 ,
92
99
CancellationToken cancellationToken = default )
93
100
{
94
101
var gridSlot1 = GameBoard [ position1 . RowIndex , position1 . ColumnIndex ] ;
@@ -97,9 +104,9 @@ private async UniTask SwapItems(GridPosition position1, GridPosition position2,
97
104
await _itemSwapper . SwapItemsAsync ( gridSlot1 , gridSlot2 , cancellationToken ) ;
98
105
}
99
106
100
- protected override void OnAllGoalsAchieved ( )
107
+ protected UniTask ExecuteJobsAsync ( IEnumerable < IJob > jobs , CancellationToken cancellationToken = default )
101
108
{
102
- RaiseGameFinishedAsync ( ) . Forget ( ) ;
109
+ return _jobsExecutor . ExecuteJobsAsync ( jobs , cancellationToken ) ;
103
110
}
104
111
105
112
private async UniTask RaiseGameFinishedAsync ( )
0 commit comments