Skip to content

Commit 2f21e51

Browse files
author
RUBIUS\chebanovdd
committed
Added state property to grid slot.
1 parent 0cf66f9 commit 2f21e51

32 files changed

+56
-109
lines changed

samples/Terminal.Match3/DependencyInjection.cs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,14 @@ private static GameConfig<ITerminalGridSlot> GetGameConfig(TerminalGameBoardRend
3737
GameBoardDataProvider = gameBoardRenderer,
3838
LevelGoalsProvider = new LevelGoalsProvider(),
3939
ItemSwapper = new TerminalItemSwapper(gameBoardRenderer),
40-
GameBoardSolver = GetGameBoardSolver(gameBoardRenderer),
40+
GameBoardSolver = GetGameBoardSolver(),
4141
SolvedSequencesConsumers = GetSolvedSequencesConsumers()
4242
};
4343
}
4444

45-
private static IGameBoardSolver<ITerminalGridSlot> GetGameBoardSolver(
46-
ITerminalGameBoardRenderer gameBoardRenderer)
45+
private static IGameBoardSolver<ITerminalGridSlot> GetGameBoardSolver()
4746
{
48-
return new GameBoardSolver<ITerminalGridSlot>(GetSequenceDetectors(),
49-
GetSpecialItemDetectors(gameBoardRenderer));
47+
return new GameBoardSolver<ITerminalGridSlot>(GetSequenceDetectors(), GetSpecialItemDetectors());
5048
}
5149

5250
private static ISequenceDetector<ITerminalGridSlot>[] GetSequenceDetectors()
@@ -58,12 +56,11 @@ private static ISequenceDetector<ITerminalGridSlot>[] GetSequenceDetectors()
5856
};
5957
}
6058

61-
private static ISpecialItemDetector<ITerminalGridSlot>[] GetSpecialItemDetectors(
62-
ITerminalGameBoardRenderer gameBoardRenderer)
59+
private static ISpecialItemDetector<ITerminalGridSlot>[] GetSpecialItemDetectors()
6360
{
6461
return new ISpecialItemDetector<ITerminalGridSlot>[]
6562
{
66-
new LockedItemDetector(gameBoardRenderer)
63+
new LockedItemDetector()
6764
};
6865
}
6966

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
using Terminal.Match3.Enums;
2-
using Terminal.Match3.Interfaces;
1+
using Terminal.Match3.Interfaces;
32

43
namespace Terminal.Match3.GridTiles
54
{
65
public abstract class GridTile : IGridTile
76
{
7+
public abstract int GroupId { get; }
88
public abstract bool IsLocked { get; }
99
public abstract bool CanContainItem { get; }
10-
public abstract TileGroup Group { get; }
1110
}
1211
}

samples/Terminal.Match3/GridTiles/States/AvailableState.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace Terminal.Match3.GridTiles.States
44
{
55
public class AvailableState : GridTile
66
{
7+
public override int GroupId => (int) TileGroup.Available;
78
public override bool IsLocked => false;
89
public override bool CanContainItem => true;
9-
public override TileGroup Group => TileGroup.Available;
1010
}
1111
}
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using Terminal.Match3.Enums;
2-
using Terminal.Match3.Interfaces;
2+
using Match3.Core.Interfaces;
33

44
namespace Terminal.Match3.GridTiles.States
55
{
@@ -8,9 +8,9 @@ public class LockedState : GridTile, IStatefulSlot
88
private bool _isLocked = true;
99
private TileGroup _group = TileGroup.Locked;
1010

11+
public override int GroupId => (int) _group;
1112
public override bool IsLocked => _isLocked;
1213
public override bool CanContainItem => true;
13-
public override TileGroup Group => _group;
1414

1515
public bool NextState()
1616
{
@@ -19,5 +19,11 @@ public bool NextState()
1919

2020
return false;
2121
}
22+
23+
public void ResetState()
24+
{
25+
_isLocked = true;
26+
_group = TileGroup.Locked;
27+
}
2228
}
2329
}

samples/Terminal.Match3/GridTiles/States/NotAvailableState.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ namespace Terminal.Match3.GridTiles.States
44
{
55
public class NotAvailableState : GridTile
66
{
7+
public override int GroupId => (int) TileGroup.Unavailable;
78
public override bool IsLocked => true;
89
public override bool CanContainItem => false;
9-
public override TileGroup Group => TileGroup.Unavailable;
1010
}
1111
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
using Match3.Core.Interfaces;
2-
using Terminal.Match3.Enums;
32

43
namespace Terminal.Match3.Interfaces
54
{
65
public interface IGridTile : IGridSlotState
76
{
8-
TileGroup Group { get; }
97
}
108
}

samples/Terminal.Match3/Interfaces/ITerminalGameBoardRenderer.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using Match3.Core.Structs;
22
using Match3.Template.Interfaces;
3-
using Terminal.Match3.Enums;
43

54
namespace Terminal.Match3.Interfaces
65
{
@@ -14,7 +13,5 @@ public interface ITerminalGameBoardRenderer : IGameBoardRenderer
1413
void RedrawGameBoard();
1514

1615
bool IsPositionOnBoard(GridPosition gridPosition);
17-
TileGroup GetTileGroup(GridPosition gridPosition);
18-
bool TrySetNextTileState(GridPosition gridPosition);
1916
}
2017
}

samples/Terminal.Match3/SpecialItemDetectors/LockedItemDetector.cs

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,28 +7,13 @@ namespace Terminal.Match3.SpecialItemDetectors
77
{
88
public class LockedItemDetector : ISpecialItemDetector<ITerminalGridSlot>
99
{
10-
private readonly ITerminalGameBoardRenderer _gameBoardRenderer;
11-
12-
public LockedItemDetector(ITerminalGameBoardRenderer gameBoardRenderer)
13-
{
14-
_gameBoardRenderer = gameBoardRenderer;
15-
}
16-
1710
public IEnumerable<ITerminalGridSlot> GetSpecialItemGridSlots(IGameBoard<ITerminalGridSlot> gameBoard,
1811
ITerminalGridSlot gridSlot)
1912
{
20-
if (_gameBoardRenderer.GetTileGroup(gridSlot.GridPosition) != TileGroup.Locked)
13+
if (gridSlot.State.GroupId == (int) TileGroup.Locked)
2114
{
22-
yield break;
15+
yield return gridSlot;
2316
}
24-
25-
var hasNextState = _gameBoardRenderer.TrySetNextTileState(gridSlot.GridPosition);
26-
if (hasNextState)
27-
{
28-
yield break;
29-
}
30-
31-
yield return gridSlot;
3217
}
3318
}
3419
}

samples/Terminal.Match3/TerminalGameBoardRenderer.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,6 @@ public void ActivateItem(GridPosition gridPosition)
9595
RedrawGameBoard();
9696
}
9797

98-
public TileGroup GetTileGroup(GridPosition gridPosition)
99-
{
100-
return _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex].Group;
101-
}
102-
103-
public bool TrySetNextTileState(GridPosition gridPosition)
104-
{
105-
return ((IStatefulSlot) _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex]).NextState();
106-
}
107-
10898
public ITerminalGridSlot[,] GetGameBoardSlots(int level)
10999
{
110100
return _gameBoardSlots;

samples/Terminal.Match3/TerminalGridSlot.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,22 @@ namespace Terminal.Match3
88
{
99
public sealed class TerminalGridSlot : ITerminalGridSlot
1010
{
11-
private readonly IGridSlotState _state;
12-
1311
public TerminalGridSlot(IGridSlotState state, GridPosition gridPosition)
1412
{
15-
_state = state;
13+
State = state;
1614
GridPosition = gridPosition;
1715
}
1816

1917
public int ItemId => Item.ContentId;
2018

2119
public bool HasItem => Item != null;
22-
public bool IsLocked => _state.IsLocked;
23-
public bool CanContainItem => _state.CanContainItem;
20+
public bool IsLocked => State.IsLocked;
21+
public bool CanContainItem => State.CanContainItem;
2422
public bool IsMovable => IsLocked == false && HasItem;
2523
public bool CanSetItem => CanContainItem && HasItem == false;
2624

2725
public ITerminalItem Item { get; private set; }
26+
public IGridSlotState State { get; }
2827
public GridPosition GridPosition { get; }
2928

3029
public void SetItem(ITerminalItem item)

0 commit comments

Comments
 (0)