Skip to content

Commit 4055f9b

Browse files
committed
Changed game board data type to GridSlot.
1 parent 65d0c9c commit 4055f9b

File tree

12 files changed

+71
-74
lines changed

12 files changed

+71
-74
lines changed

Assets/Plugins/Match3.Tests/PlayMode/Match3GameTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ public Match3GameTests()
4646
.GetLevelGoals(Arg.Any<int>(), Arg.Any<IGameBoard<IItem>>())
4747
.Returns(new LevelGoal<IItem>[] { new MockLevelGoal() });
4848

49-
var gameBoardDataProvider = Substitute.For<IGameBoardDataProvider>();
49+
var gameBoardDataProvider = Substitute.For<IGameBoardDataProvider<IItem>>();
5050
gameBoardDataProvider
51-
.GetGameBoardData(Arg.Any<int>());
51+
.GetGameBoardSlots(Arg.Any<int>());
5252
// .Returns(new[,] { { true, true }, { true, true } });
5353

5454
_gameConfig = new GameConfig<IItem>
@@ -102,7 +102,7 @@ public void InitGameLevel_ShouldCreateGridSlots_WhenAllParamsAreValid(int level,
102102
int expectedResult)
103103
{
104104
// Arrange
105-
var gameBoardDataProvider = Substitute.For<IGameBoardDataProvider>();
105+
var gameBoardDataProvider = Substitute.For<IGameBoardDataProvider<IItem>>();
106106
// gameBoardDataProvider.GetGameBoardData(level).Returns(data);
107107

108108
var gameConfig = new GameConfig<IItem>

Assets/Plugins/Match3/App/GameConfig.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public class GameConfig<TItem> where TItem : IItem
1010
public IGameBoardRenderer GameBoardRenderer { get; set; }
1111
public IBoardFillStrategy<TItem> FillStrategy { get; set; }
1212
public IGameBoardSolver<TItem> GameBoardSolver { get; set; }
13-
public IGameBoardDataProvider GameBoardDataProvider { get; set; }
1413
public ILevelGoalsProvider<TItem> LevelGoalsProvider { get; set; }
14+
public IGameBoardDataProvider<TItem> GameBoardDataProvider { get; set; }
1515
public ISolvedSequencesConsumer<TItem>[] SolvedSequencesConsumers { get; set; }
1616
}
1717
}
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
using Match3.Core.Interfaces;
2+
using Match3.Core.Models;
23

34
namespace Match3.App.Interfaces
45
{
5-
public interface IGameBoardDataProvider
6+
public interface IGameBoardDataProvider<TItem> where TItem : IItem
67
{
7-
IGridSlotState[,] GetGameBoardData(int level);
8+
GridSlot<TItem>[,] GetGameBoardSlots(int level);
89
}
910
}

Assets/Plugins/Match3/App/Internal/GameBoard.cs

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,16 @@ public GameBoard(IItemSwapper<TItem> itemSwapper, IGameBoardSolver<TItem> gameBo
3737
_gameBoardSolver = gameBoardSolver;
3838
}
3939

40-
public void CreateGridSlots(IGridSlotState[,] gameBoardData)
40+
public void SetGridSlots(GridSlot<TItem>[,] gridSlots)
4141
{
4242
if (_gridSlots != null)
4343
{
4444
throw new InvalidOperationException("Grid slots have already been created.");
4545
}
4646

47-
_rowCount = gameBoardData.GetLength(0);
48-
_columnCount = gameBoardData.GetLength(1);
49-
50-
_gridSlots = new GridSlot<TItem>[_rowCount, _columnCount];
51-
52-
for (var rowIndex = 0; rowIndex < _rowCount; rowIndex++)
53-
{
54-
for (var columnIndex = 0; columnIndex < _columnCount; columnIndex++)
55-
{
56-
var state = gameBoardData[rowIndex, columnIndex];
57-
58-
_gridSlots[rowIndex, columnIndex] =
59-
new GridSlot<TItem>(state, new GridPosition(rowIndex, columnIndex));
60-
}
61-
}
47+
_rowCount = gridSlots.GetLength(0);
48+
_columnCount = gridSlots.GetLength(1);
49+
_gridSlots = gridSlots;
6250
}
6351

6452
public async UniTask FillAsync(IBoardFillStrategy<TItem> fillStrategy)
@@ -97,7 +85,9 @@ public bool IsPositionOnBoard(GridPosition gridPosition)
9785

9886
public void ResetState()
9987
{
100-
Dispose();
88+
_rowCount = 0;
89+
_columnCount = 0;
90+
_gridSlots = null;
10191
}
10292

10393
public void Dispose()
@@ -108,10 +98,7 @@ public void Dispose()
10898
}
10999

110100
Array.Clear(_gridSlots, 0, _gridSlots.Length);
111-
112-
_rowCount = 0;
113-
_columnCount = 0;
114-
_gridSlots = null;
101+
ResetState();
115102
}
116103

117104
private async UniTask SwapItems(GridPosition position1, GridPosition position2)

Assets/Plugins/Match3/App/Match3Game.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ public class Match3Game<TItem> : IDisposable where TItem : IItem
1616
private readonly IInputSystem _inputSystem;
1717
private readonly GameBoard<TItem> _gameBoard;
1818
private readonly IGameBoardRenderer _gameBoardRenderer;
19-
private readonly IGameBoardDataProvider _gameBoardDataProvider;
2019
private readonly ILevelGoalsProvider<TItem> _levelGoalsProvider;
20+
private readonly IGameBoardDataProvider<TItem> _gameBoardDataProvider;
2121
private readonly ISolvedSequencesConsumer<TItem>[] _solvedSequencesConsumers;
2222

2323
private bool _isStarted;
@@ -50,7 +50,7 @@ public void InitGameLevel(int level)
5050
throw new InvalidOperationException("Can not be initialized while the current game is active.");
5151
}
5252

53-
_gameBoard.CreateGridSlots(_gameBoardDataProvider.GetGameBoardData(level));
53+
_gameBoard.SetGridSlots(_gameBoardDataProvider.GetGameBoardSlots(level));
5454
_levelGoals = _levelGoalsProvider.GetLevelGoals(level, _gameBoard);
5555
}
5656

Assets/Plugins/Match3/Core/Models/GridSlot.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,28 @@
44

55
namespace Match3.Core.Models
66
{
7-
public class GridSlot<TItem> where TItem : IItem
7+
public sealed class GridSlot<TItem> where TItem : IItem
88
{
99
public bool HasItem => Item != null;
1010
public bool IsMovable => State.IsLocked == false && HasItem;
1111
public bool CanSetItem => State.CanContainItem && HasItem == false;
1212
public bool NotAvailable => State.CanContainItem == false || State.IsLocked;
1313

1414
public TItem Item { get; private set; }
15-
public IGridSlotState State { get; }
15+
public IGridSlotState State { get; private set; }
1616
public GridPosition GridPosition { get; }
1717

18-
internal GridSlot(IGridSlotState state, GridPosition gridPosition)
18+
public GridSlot(IGridSlotState state, GridPosition gridPosition)
1919
{
2020
State = state;
2121
GridPosition = gridPosition;
2222
}
2323

24+
public void SetState(IGridSlotState state)
25+
{
26+
State = state;
27+
}
28+
2429
public void SetItem(TItem item)
2530
{
2631
EnsureItemIsNotNull(item);

Assets/Scripts/AppContext.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public void Construct()
3131
RegisterInstance<IGameUiCanvas>(_gameUiCanvas);
3232
RegisterInstance<IItemGenerator>(_itemGenerator);
3333
RegisterInstance<IItemsPool<IUnityItem>>(_itemGenerator);
34-
RegisterInstance<IGameBoardDataProvider>(_gameBoardRenderer);
3534
RegisterInstance<IUnityGameBoardRenderer>(_gameBoardRenderer);
35+
RegisterInstance<IGameBoardDataProvider<IUnityItem>>(_gameBoardRenderer);
3636
RegisterInstance<Match3Game<IUnityItem>>(GetMatch3Game());
3737
RegisterInstance<IBoardFillStrategy<IUnityItem>[]>(GetBoardFillStrategies());
3838
}

Assets/Scripts/Common/AppModes/GameInitMode.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ public void Dispose()
5353

5454
private void Init(int level)
5555
{
56-
var gameBoardData = _appContext.Resolve<IGameBoardDataProvider>().GetGameBoardData(level);
56+
var gameBoardData = _appContext.Resolve<IGameBoardDataProvider<IUnityItem>>().GetGameBoardSlots(level);
5757
var rowCount = gameBoardData.GetLength(0);
5858
var columnCount = gameBoardData.GetLength(1);
5959
var itemsPoolCapacity = rowCount * columnCount + Mathf.Max(rowCount, columnCount) * 2;

Assets/Scripts/Common/Extensions/ItemsPoolExtensions.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ public static void ReturnAllItems<TItem>(this IItemsPool<TItem> itemsPool,
1717
continue;
1818
}
1919

20-
gridSlot.Item.Hide();
2120
itemsPool.ReturnItem(gridSlot.Item);
21+
gridSlot.Item.Hide();
22+
gridSlot.Clear();
2223
}
2324
}
2425
}

Assets/Scripts/Common/Interfaces/IUnityGameBoardRenderer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ public interface IUnityGameBoardRenderer : IGameBoardRenderer
1111
bool IsTileActive(GridPosition gridPosition);
1212
void ActivateTile(GridPosition gridPosition);
1313
void DeactivateTile(GridPosition gridPosition);
14+
void SetNextGridTileGroup(GridPosition gridPosition);
1415

1516
bool IsPositionOnGrid(GridPosition gridPosition);
1617

17-
void SetNextGridTileGroup(GridPosition gridPosition);
1818
void TrySetNextTileState(GridPosition gridPosition);
1919
TileGroup GetTileGroup(GridPosition gridPosition);
2020
}

0 commit comments

Comments
 (0)