Skip to content

Commit 6c46a1d

Browse files
committed
Make SwapItemsAsync virtual.
1 parent cc6ee9e commit 6c46a1d

File tree

2 files changed

+30
-16
lines changed

2 files changed

+30
-16
lines changed

src/Match3.App/Match3Game.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Runtime.CompilerServices;
34
using System.Threading;
45
using Cysharp.Threading.Tasks;
@@ -37,6 +38,7 @@ public async UniTask StartAsync(CancellationToken cancellationToken = default)
3738
}
3839

3940
await FillAsync(_fillStrategy, cancellationToken);
41+
4042
StartGame();
4143
}
4244

@@ -55,6 +57,11 @@ public void SetGameBoardFillStrategy(IBoardFillStrategy<TGridSlot> fillStrategy)
5557
_fillStrategy = fillStrategy;
5658
}
5759

60+
protected override void OnAllGoalsAchieved()
61+
{
62+
RaiseGameFinishedAsync().Forget();
63+
}
64+
5865
protected UniTask SwapItemsAsync(GridPosition position1, GridPosition position2,
5966
CancellationToken cancellationToken = default)
6067
{
@@ -69,26 +76,26 @@ protected UniTask SwapItemsAsync(GridPosition position1, GridPosition position2,
6976
private async UniTask FillAsync(IBoardFillStrategy<TGridSlot> fillStrategy,
7077
CancellationToken cancellationToken = default)
7178
{
72-
await _jobsExecutor.ExecuteJobsAsync(fillStrategy.GetFillJobs(GameBoard), cancellationToken);
79+
await ExecuteJobsAsync(fillStrategy.GetFillJobs(GameBoard), cancellationToken);
7380
}
7481

75-
private async UniTask SwapItemsAsync(IBoardFillStrategy<TGridSlot> fillStrategy, GridPosition position1,
82+
protected virtual async UniTask SwapItemsAsync(IBoardFillStrategy<TGridSlot> fillStrategy, GridPosition position1,
7683
GridPosition position2, CancellationToken cancellationToken = default)
7784
{
78-
await SwapItems(position1, position2, cancellationToken);
85+
await SwapGameBoardItemsAsync(position1, position2, cancellationToken);
7986

8087
if (IsSolved(position1, position2, out var solvedData))
8188
{
8289
NotifySequencesSolved(solvedData);
83-
await _jobsExecutor.ExecuteJobsAsync(fillStrategy.GetSolveJobs(GameBoard, solvedData), cancellationToken);
90+
await ExecuteJobsAsync(fillStrategy.GetSolveJobs(GameBoard, solvedData), cancellationToken);
8491
}
8592
else
8693
{
87-
await SwapItems(position1, position2, cancellationToken);
94+
await SwapGameBoardItemsAsync(position1, position2, cancellationToken);
8895
}
8996
}
9097

91-
private async UniTask SwapItems(GridPosition position1, GridPosition position2,
98+
protected async UniTask SwapGameBoardItemsAsync(GridPosition position1, GridPosition position2,
9299
CancellationToken cancellationToken = default)
93100
{
94101
var gridSlot1 = GameBoard[position1.RowIndex, position1.ColumnIndex];
@@ -97,9 +104,9 @@ private async UniTask SwapItems(GridPosition position1, GridPosition position2,
97104
await _itemSwapper.SwapItemsAsync(gridSlot1, gridSlot2, cancellationToken);
98105
}
99106

100-
protected override void OnAllGoalsAchieved()
107+
protected UniTask ExecuteJobsAsync(IEnumerable<IJob> jobs, CancellationToken cancellationToken = default)
101108
{
102-
RaiseGameFinishedAsync().Forget();
109+
return _jobsExecutor.ExecuteJobsAsync(jobs, cancellationToken);
103110
}
104111

105112
private async UniTask RaiseGameFinishedAsync()

src/Match3.UnityPackage/Assets/Plugins/Match3/Runtime/Match3.App/Match3Game.cs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Runtime.CompilerServices;
34
using System.Threading;
45
using Cysharp.Threading.Tasks;
@@ -37,6 +38,7 @@ public async UniTask StartAsync(CancellationToken cancellationToken = default)
3738
}
3839

3940
await FillAsync(_fillStrategy, cancellationToken);
41+
4042
StartGame();
4143
}
4244

@@ -55,6 +57,11 @@ public void SetGameBoardFillStrategy(IBoardFillStrategy<TGridSlot> fillStrategy)
5557
_fillStrategy = fillStrategy;
5658
}
5759

60+
protected override void OnAllGoalsAchieved()
61+
{
62+
RaiseGameFinishedAsync().Forget();
63+
}
64+
5865
protected UniTask SwapItemsAsync(GridPosition position1, GridPosition position2,
5966
CancellationToken cancellationToken = default)
6067
{
@@ -69,26 +76,26 @@ protected UniTask SwapItemsAsync(GridPosition position1, GridPosition position2,
6976
private async UniTask FillAsync(IBoardFillStrategy<TGridSlot> fillStrategy,
7077
CancellationToken cancellationToken = default)
7178
{
72-
await _jobsExecutor.ExecuteJobsAsync(fillStrategy.GetFillJobs(GameBoard), cancellationToken);
79+
await ExecuteJobsAsync(fillStrategy.GetFillJobs(GameBoard), cancellationToken);
7380
}
7481

75-
private async UniTask SwapItemsAsync(IBoardFillStrategy<TGridSlot> fillStrategy, GridPosition position1,
82+
protected virtual async UniTask SwapItemsAsync(IBoardFillStrategy<TGridSlot> fillStrategy, GridPosition position1,
7683
GridPosition position2, CancellationToken cancellationToken = default)
7784
{
78-
await SwapItems(position1, position2, cancellationToken);
85+
await SwapGameBoardItemsAsync(position1, position2, cancellationToken);
7986

8087
if (IsSolved(position1, position2, out var solvedData))
8188
{
8289
NotifySequencesSolved(solvedData);
83-
await _jobsExecutor.ExecuteJobsAsync(fillStrategy.GetSolveJobs(GameBoard, solvedData), cancellationToken);
90+
await ExecuteJobsAsync(fillStrategy.GetSolveJobs(GameBoard, solvedData), cancellationToken);
8491
}
8592
else
8693
{
87-
await SwapItems(position1, position2, cancellationToken);
94+
await SwapGameBoardItemsAsync(position1, position2, cancellationToken);
8895
}
8996
}
9097

91-
private async UniTask SwapItems(GridPosition position1, GridPosition position2,
98+
protected async UniTask SwapGameBoardItemsAsync(GridPosition position1, GridPosition position2,
9299
CancellationToken cancellationToken = default)
93100
{
94101
var gridSlot1 = GameBoard[position1.RowIndex, position1.ColumnIndex];
@@ -97,9 +104,9 @@ private async UniTask SwapItems(GridPosition position1, GridPosition position2,
97104
await _itemSwapper.SwapItemsAsync(gridSlot1, gridSlot2, cancellationToken);
98105
}
99106

100-
protected override void OnAllGoalsAchieved()
107+
protected UniTask ExecuteJobsAsync(IEnumerable<IJob> jobs, CancellationToken cancellationToken = default)
101108
{
102-
RaiseGameFinishedAsync().Forget();
109+
return _jobsExecutor.ExecuteJobsAsync(jobs, cancellationToken);
103110
}
104111

105112
private async UniTask RaiseGameFinishedAsync()

0 commit comments

Comments
 (0)