From 2f21e51e46981f692696768c1ce9777ad3164000 Mon Sep 17 00:00:00 2001 From: "RUBIUS\\chebanovdd" Date: Thu, 21 Apr 2022 21:56:20 +0700 Subject: [PATCH] Added state property to grid slot. --- .../Terminal.Match3/DependencyInjection.cs | 13 +++++-------- samples/Terminal.Match3/GridTiles/GridTile.cs | 5 ++--- .../GridTiles/States/AvailableState.cs | 2 +- .../GridTiles/States/LockedState.cs | 10 ++++++++-- .../GridTiles/States/NotAvailableState.cs | 2 +- .../Terminal.Match3/Interfaces/IGridTile.cs | 2 -- .../Interfaces/ITerminalGameBoardRenderer.cs | 3 --- .../LockedItemDetector.cs | 19 ++----------------- .../TerminalGameBoardRenderer.cs | 10 ---------- samples/Terminal.Match3/TerminalGridSlot.cs | 9 ++++----- .../Unity.Match3/Assets/Scripts/AppContext.cs | 12 ++++++------ .../Scripts/Common/GridTiles/GridTile.cs | 3 +-- .../Common/GridTiles/StatefulGridTile.cs | 2 +- .../Common/GridTiles/States/AvailableState.cs | 2 +- .../Common/GridTiles/States/IceState.cs | 2 +- .../GridTiles/States/NotAvailableState.cs | 2 +- .../Common/GridTiles/States/StoneState.cs | 2 +- .../Scripts/Common/Interfaces/IGridTile.cs | 3 --- .../Interfaces/IUnityGameBoardRenderer.cs | 1 - .../Common/Interfaces/IUnityGridSlot.cs | 1 - .../SpecialItemDetectors/IceItemDetector.cs | 19 ++----------------- .../SpecialItemDetectors/StoneItemDetector.cs | 16 +++++----------- .../Assets/Scripts/Common/TileItemsPool.cs | 3 ++- .../Scripts/Common/UnityGameBoardRenderer.cs | 7 +------ src/Match3.Core/Interfaces/IGridSlot.cs | 1 + src/Match3.Core/Interfaces/IGridSlotState.cs | 1 + .../Match3.Core}/Interfaces/IStatefulSlot.cs | 2 +- src/Match3.Template/GameBoardSolver.cs | 3 ++- .../Match3.Core/Interfaces/IGridSlot.cs | 1 + .../Match3.Core/Interfaces/IGridSlotState.cs | 1 + .../Match3.Core}/Interfaces/IStatefulSlot.cs | 3 ++- .../Match3.Template/GameBoardSolver.cs | 3 ++- 32 files changed, 56 insertions(+), 109 deletions(-) rename {samples/Unity.Match3/Assets/Scripts/Common => src/Match3.Core}/Interfaces/IStatefulSlot.cs (73%) rename {samples/Terminal.Match3 => src/Match3.UnityPackage/Assets/Plugins/Match3/Runtime/Match3.Core}/Interfaces/IStatefulSlot.cs (53%) diff --git a/samples/Terminal.Match3/DependencyInjection.cs b/samples/Terminal.Match3/DependencyInjection.cs index 9da8446..4e0b698 100644 --- a/samples/Terminal.Match3/DependencyInjection.cs +++ b/samples/Terminal.Match3/DependencyInjection.cs @@ -37,16 +37,14 @@ private static GameConfig GetGameConfig(TerminalGameBoardRend GameBoardDataProvider = gameBoardRenderer, LevelGoalsProvider = new LevelGoalsProvider(), ItemSwapper = new TerminalItemSwapper(gameBoardRenderer), - GameBoardSolver = GetGameBoardSolver(gameBoardRenderer), + GameBoardSolver = GetGameBoardSolver(), SolvedSequencesConsumers = GetSolvedSequencesConsumers() }; } - private static IGameBoardSolver GetGameBoardSolver( - ITerminalGameBoardRenderer gameBoardRenderer) + private static IGameBoardSolver GetGameBoardSolver() { - return new GameBoardSolver(GetSequenceDetectors(), - GetSpecialItemDetectors(gameBoardRenderer)); + return new GameBoardSolver(GetSequenceDetectors(), GetSpecialItemDetectors()); } private static ISequenceDetector[] GetSequenceDetectors() @@ -58,12 +56,11 @@ private static ISequenceDetector[] GetSequenceDetectors() }; } - private static ISpecialItemDetector[] GetSpecialItemDetectors( - ITerminalGameBoardRenderer gameBoardRenderer) + private static ISpecialItemDetector[] GetSpecialItemDetectors() { return new ISpecialItemDetector[] { - new LockedItemDetector(gameBoardRenderer) + new LockedItemDetector() }; } diff --git a/samples/Terminal.Match3/GridTiles/GridTile.cs b/samples/Terminal.Match3/GridTiles/GridTile.cs index f9fb4f2..a300bfe 100644 --- a/samples/Terminal.Match3/GridTiles/GridTile.cs +++ b/samples/Terminal.Match3/GridTiles/GridTile.cs @@ -1,12 +1,11 @@ -using Terminal.Match3.Enums; -using Terminal.Match3.Interfaces; +using Terminal.Match3.Interfaces; namespace Terminal.Match3.GridTiles { public abstract class GridTile : IGridTile { + public abstract int GroupId { get; } public abstract bool IsLocked { get; } public abstract bool CanContainItem { get; } - public abstract TileGroup Group { get; } } } \ No newline at end of file diff --git a/samples/Terminal.Match3/GridTiles/States/AvailableState.cs b/samples/Terminal.Match3/GridTiles/States/AvailableState.cs index d0c68c6..701d282 100644 --- a/samples/Terminal.Match3/GridTiles/States/AvailableState.cs +++ b/samples/Terminal.Match3/GridTiles/States/AvailableState.cs @@ -4,8 +4,8 @@ namespace Terminal.Match3.GridTiles.States { public class AvailableState : GridTile { + public override int GroupId => (int) TileGroup.Available; public override bool IsLocked => false; public override bool CanContainItem => true; - public override TileGroup Group => TileGroup.Available; } } \ No newline at end of file diff --git a/samples/Terminal.Match3/GridTiles/States/LockedState.cs b/samples/Terminal.Match3/GridTiles/States/LockedState.cs index b85acfe..318d249 100644 --- a/samples/Terminal.Match3/GridTiles/States/LockedState.cs +++ b/samples/Terminal.Match3/GridTiles/States/LockedState.cs @@ -1,5 +1,5 @@ using Terminal.Match3.Enums; -using Terminal.Match3.Interfaces; +using Match3.Core.Interfaces; namespace Terminal.Match3.GridTiles.States { @@ -8,9 +8,9 @@ public class LockedState : GridTile, IStatefulSlot private bool _isLocked = true; private TileGroup _group = TileGroup.Locked; + public override int GroupId => (int) _group; public override bool IsLocked => _isLocked; public override bool CanContainItem => true; - public override TileGroup Group => _group; public bool NextState() { @@ -19,5 +19,11 @@ public bool NextState() return false; } + + public void ResetState() + { + _isLocked = true; + _group = TileGroup.Locked; + } } } \ No newline at end of file diff --git a/samples/Terminal.Match3/GridTiles/States/NotAvailableState.cs b/samples/Terminal.Match3/GridTiles/States/NotAvailableState.cs index 8deb804..6aced75 100644 --- a/samples/Terminal.Match3/GridTiles/States/NotAvailableState.cs +++ b/samples/Terminal.Match3/GridTiles/States/NotAvailableState.cs @@ -4,8 +4,8 @@ namespace Terminal.Match3.GridTiles.States { public class NotAvailableState : GridTile { + public override int GroupId => (int) TileGroup.Unavailable; public override bool IsLocked => true; public override bool CanContainItem => false; - public override TileGroup Group => TileGroup.Unavailable; } } \ No newline at end of file diff --git a/samples/Terminal.Match3/Interfaces/IGridTile.cs b/samples/Terminal.Match3/Interfaces/IGridTile.cs index 3652daa..72d6e79 100644 --- a/samples/Terminal.Match3/Interfaces/IGridTile.cs +++ b/samples/Terminal.Match3/Interfaces/IGridTile.cs @@ -1,10 +1,8 @@ using Match3.Core.Interfaces; -using Terminal.Match3.Enums; namespace Terminal.Match3.Interfaces { public interface IGridTile : IGridSlotState { - TileGroup Group { get; } } } \ No newline at end of file diff --git a/samples/Terminal.Match3/Interfaces/ITerminalGameBoardRenderer.cs b/samples/Terminal.Match3/Interfaces/ITerminalGameBoardRenderer.cs index d047698..a19b95b 100644 --- a/samples/Terminal.Match3/Interfaces/ITerminalGameBoardRenderer.cs +++ b/samples/Terminal.Match3/Interfaces/ITerminalGameBoardRenderer.cs @@ -1,6 +1,5 @@ using Match3.Core.Structs; using Match3.Template.Interfaces; -using Terminal.Match3.Enums; namespace Terminal.Match3.Interfaces { @@ -14,7 +13,5 @@ public interface ITerminalGameBoardRenderer : IGameBoardRenderer void RedrawGameBoard(); bool IsPositionOnBoard(GridPosition gridPosition); - TileGroup GetTileGroup(GridPosition gridPosition); - bool TrySetNextTileState(GridPosition gridPosition); } } \ No newline at end of file diff --git a/samples/Terminal.Match3/SpecialItemDetectors/LockedItemDetector.cs b/samples/Terminal.Match3/SpecialItemDetectors/LockedItemDetector.cs index 8e05237..7994469 100644 --- a/samples/Terminal.Match3/SpecialItemDetectors/LockedItemDetector.cs +++ b/samples/Terminal.Match3/SpecialItemDetectors/LockedItemDetector.cs @@ -7,28 +7,13 @@ namespace Terminal.Match3.SpecialItemDetectors { public class LockedItemDetector : ISpecialItemDetector { - private readonly ITerminalGameBoardRenderer _gameBoardRenderer; - - public LockedItemDetector(ITerminalGameBoardRenderer gameBoardRenderer) - { - _gameBoardRenderer = gameBoardRenderer; - } - public IEnumerable GetSpecialItemGridSlots(IGameBoard gameBoard, ITerminalGridSlot gridSlot) { - if (_gameBoardRenderer.GetTileGroup(gridSlot.GridPosition) != TileGroup.Locked) + if (gridSlot.State.GroupId == (int) TileGroup.Locked) { - yield break; + yield return gridSlot; } - - var hasNextState = _gameBoardRenderer.TrySetNextTileState(gridSlot.GridPosition); - if (hasNextState) - { - yield break; - } - - yield return gridSlot; } } } \ No newline at end of file diff --git a/samples/Terminal.Match3/TerminalGameBoardRenderer.cs b/samples/Terminal.Match3/TerminalGameBoardRenderer.cs index 6ffeaeb..b89a4bd 100644 --- a/samples/Terminal.Match3/TerminalGameBoardRenderer.cs +++ b/samples/Terminal.Match3/TerminalGameBoardRenderer.cs @@ -95,16 +95,6 @@ public void ActivateItem(GridPosition gridPosition) RedrawGameBoard(); } - public TileGroup GetTileGroup(GridPosition gridPosition) - { - return _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex].Group; - } - - public bool TrySetNextTileState(GridPosition gridPosition) - { - return ((IStatefulSlot) _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex]).NextState(); - } - public ITerminalGridSlot[,] GetGameBoardSlots(int level) { return _gameBoardSlots; diff --git a/samples/Terminal.Match3/TerminalGridSlot.cs b/samples/Terminal.Match3/TerminalGridSlot.cs index 583d150..f2948aa 100644 --- a/samples/Terminal.Match3/TerminalGridSlot.cs +++ b/samples/Terminal.Match3/TerminalGridSlot.cs @@ -8,23 +8,22 @@ namespace Terminal.Match3 { public sealed class TerminalGridSlot : ITerminalGridSlot { - private readonly IGridSlotState _state; - public TerminalGridSlot(IGridSlotState state, GridPosition gridPosition) { - _state = state; + State = state; GridPosition = gridPosition; } public int ItemId => Item.ContentId; public bool HasItem => Item != null; - public bool IsLocked => _state.IsLocked; - public bool CanContainItem => _state.CanContainItem; + public bool IsLocked => State.IsLocked; + public bool CanContainItem => State.CanContainItem; public bool IsMovable => IsLocked == false && HasItem; public bool CanSetItem => CanContainItem && HasItem == false; public ITerminalItem Item { get; private set; } + public IGridSlotState State { get; } public GridPosition GridPosition { get; } public void SetItem(ITerminalItem item) diff --git a/samples/Unity.Match3/Assets/Scripts/AppContext.cs b/samples/Unity.Match3/Assets/Scripts/AppContext.cs index 2d426ed..2995baf 100644 --- a/samples/Unity.Match3/Assets/Scripts/AppContext.cs +++ b/samples/Unity.Match3/Assets/Scripts/AppContext.cs @@ -63,7 +63,7 @@ private UnityGame GetUnityGame() GameBoardDataProvider = _gameBoardRenderer, ItemSwapper = new AnimatedItemSwapper(), LevelGoalsProvider = new LevelGoalsProvider(), - GameBoardSolver = GetGameBoardSolver(_gameBoardRenderer), + GameBoardSolver = GetGameBoardSolver(), SolvedSequencesConsumers = GetSolvedSequencesConsumers() }; @@ -75,9 +75,9 @@ private UnityItemGenerator GetItemGenerator() return new UnityItemGenerator(_itemPrefab, new GameObject("ItemsPool").transform); } - private IGameBoardSolver GetGameBoardSolver(IUnityGameBoardRenderer gameBoardRenderer) + private IGameBoardSolver GetGameBoardSolver() { - return new GameBoardSolver(GetSequenceDetectors(), GetSpecialItemDetectors(gameBoardRenderer)); + return new GameBoardSolver(GetSequenceDetectors(), GetSpecialItemDetectors()); } private ISequenceDetector[] GetSequenceDetectors() @@ -89,12 +89,12 @@ private ISequenceDetector[] GetSequenceDetectors() }; } - private ISpecialItemDetector[] GetSpecialItemDetectors(IUnityGameBoardRenderer gameBoardRenderer) + private ISpecialItemDetector[] GetSpecialItemDetectors() { return new ISpecialItemDetector[] { - new StoneItemDetector(gameBoardRenderer), - new IceItemDetector(gameBoardRenderer) + new StoneItemDetector(), + new IceItemDetector() }; } diff --git a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/GridTile.cs b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/GridTile.cs index 3d34f06..9e851c5 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/GridTile.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/GridTile.cs @@ -1,4 +1,3 @@ -using Common.Enums; using Common.Interfaces; using UnityEngine; @@ -8,9 +7,9 @@ public abstract class GridTile : MonoBehaviour, IGridTile { private bool _isDestroyed; + public abstract int GroupId { get; } public abstract bool IsLocked { get; } public abstract bool CanContainItem { get; } - public abstract TileGroup Group { get; } public void SetActive(bool value) { diff --git a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/StatefulGridTile.cs b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/StatefulGridTile.cs index 4418574..5d68ca2 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/StatefulGridTile.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/StatefulGridTile.cs @@ -1,4 +1,4 @@ -using Common.Interfaces; +using Match3.Core.Interfaces; using UnityEngine; namespace Common.GridTiles diff --git a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/AvailableState.cs b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/AvailableState.cs index eafcaf7..27622ba 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/AvailableState.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/AvailableState.cs @@ -4,8 +4,8 @@ namespace Common.GridTiles.States { public class AvailableState : SpriteGridTile { + public override int GroupId => (int) TileGroup.Available; public override bool IsLocked => false; public override bool CanContainItem => true; - public override TileGroup Group => TileGroup.Available; } } \ No newline at end of file diff --git a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/IceState.cs b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/IceState.cs index 6beba85..52abf41 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/IceState.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/IceState.cs @@ -7,9 +7,9 @@ public class IceState : StatefulGridTile private bool _isLocked = true; private TileGroup _group = TileGroup.Ice; + public override int GroupId => (int) _group; public override bool IsLocked => _isLocked; public override bool CanContainItem => true; - public override TileGroup Group => _group; protected override void OnComplete() { diff --git a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/NotAvailableState.cs b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/NotAvailableState.cs index 263a910..817163b 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/NotAvailableState.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/NotAvailableState.cs @@ -4,8 +4,8 @@ namespace Common.GridTiles.States { public class NotAvailableState : GridTile { + public override int GroupId => (int) TileGroup.Unavailable; public override bool IsLocked => true; public override bool CanContainItem => false; - public override TileGroup Group => TileGroup.Unavailable; } } \ No newline at end of file diff --git a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/StoneState.cs b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/StoneState.cs index 87a9dc5..e6a817f 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/StoneState.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/GridTiles/States/StoneState.cs @@ -8,9 +8,9 @@ public class StoneState : StatefulGridTile private bool _canContainItem; private TileGroup _group = TileGroup.Stone; + public override int GroupId => (int) _group; public override bool IsLocked => _isLocked; public override bool CanContainItem => _canContainItem; - public override TileGroup Group => _group; protected override void OnComplete() { diff --git a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IGridTile.cs b/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IGridTile.cs index 1c3cc10..8d99c3a 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IGridTile.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IGridTile.cs @@ -1,5 +1,4 @@ using System; -using Common.Enums; using Match3.Core.Interfaces; using UnityEngine; @@ -7,8 +6,6 @@ namespace Common.Interfaces { public interface IGridTile : IGridSlotState, IDisposable { - TileGroup Group { get; } - void SetActive(bool value); void SetWorldPosition(Vector3 worldPosition); } diff --git a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGameBoardRenderer.cs b/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGameBoardRenderer.cs index f4945a9..b8f9f34 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGameBoardRenderer.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGameBoardRenderer.cs @@ -18,7 +18,6 @@ public interface IUnityGameBoardRenderer : IGameBoardRenderer Vector3 GetWorldPosition(GridPosition gridPosition); - bool TrySetNextTileState(GridPosition gridPosition); TileGroup GetTileGroup(GridPosition gridPosition); } } \ No newline at end of file diff --git a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGridSlot.cs b/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGridSlot.cs index 84142fa..4b280c5 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGridSlot.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IUnityGridSlot.cs @@ -8,7 +8,6 @@ public interface IUnityGridSlot : IGridSlot bool NotAvailable { get; } IUnityItem Item { get; } - IGridSlotState State { get; } void SetItem(IUnityItem item); void SetState(IGridSlotState state); diff --git a/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/IceItemDetector.cs b/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/IceItemDetector.cs index 8744595..f78f16d 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/IceItemDetector.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/IceItemDetector.cs @@ -7,28 +7,13 @@ namespace Common.SpecialItemDetectors { public class IceItemDetector : ISpecialItemDetector { - private readonly IUnityGameBoardRenderer _gameBoardRenderer; - - public IceItemDetector(IUnityGameBoardRenderer gameBoardRenderer) - { - _gameBoardRenderer = gameBoardRenderer; - } - public IEnumerable GetSpecialItemGridSlots(IGameBoard gameBoard, IUnityGridSlot gridSlot) { - if (_gameBoardRenderer.GetTileGroup(gridSlot.GridPosition) != TileGroup.Ice) + if (gridSlot.State.GroupId == (int) TileGroup.Ice) { - yield break; + yield return gridSlot; } - - var hasNextState = _gameBoardRenderer.TrySetNextTileState(gridSlot.GridPosition); - if (hasNextState) - { - yield break; - } - - yield return gridSlot; } } } \ No newline at end of file diff --git a/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/StoneItemDetector.cs b/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/StoneItemDetector.cs index e780a20..1ab0637 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/StoneItemDetector.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/SpecialItemDetectors/StoneItemDetector.cs @@ -9,11 +9,9 @@ namespace Common.SpecialItemDetectors public class StoneItemDetector : ISpecialItemDetector { private readonly GridPosition[] _lookupDirections; - private readonly IUnityGameBoardRenderer _gameBoardRenderer; - public StoneItemDetector(IUnityGameBoardRenderer gameBoardRenderer) + public StoneItemDetector() { - _gameBoardRenderer = gameBoardRenderer; _lookupDirections = new[] { GridPosition.Up, @@ -34,20 +32,16 @@ public StoneItemDetector(IUnityGameBoardRenderer gameBoardRenderer) foreach (var lookupDirection in _lookupDirections) { var position = gridSlot.GridPosition + lookupDirection; - - if (!_gameBoardRenderer.IsPositionOnGrid(position) || - _gameBoardRenderer.GetTileGroup(position) != TileGroup.Stone) + if (gameBoard.IsPositionOnGrid(position) == false) { continue; } - var hasNextState = _gameBoardRenderer.TrySetNextTileState(position); - if (hasNextState) + var gridPosition = gameBoard[position]; + if (gridPosition.State.GroupId == (int) TileGroup.Stone) { - continue; + yield return gridPosition; } - - yield return gameBoard[position]; } } } diff --git a/samples/Unity.Match3/Assets/Scripts/Common/TileItemsPool.cs b/samples/Unity.Match3/Assets/Scripts/Common/TileItemsPool.cs index e9c8e3b..8e2db68 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/TileItemsPool.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/TileItemsPool.cs @@ -3,6 +3,7 @@ using Common.Extensions; using Common.Interfaces; using Common.Models; +using Match3.Core.Interfaces; using UnityEngine; namespace Common @@ -43,7 +44,7 @@ public void ReturnGridTile(IGridTile gridTile) } gridTile.SetActive(false); - _itemsPool[gridTile.Group].Enqueue(gridTile); + _itemsPool[(TileGroup) gridTile.GroupId].Enqueue(gridTile); } private IGridTile CreateTile(GameObject tilePrefab) diff --git a/samples/Unity.Match3/Assets/Scripts/Common/UnityGameBoardRenderer.cs b/samples/Unity.Match3/Assets/Scripts/Common/UnityGameBoardRenderer.cs index 0eebdd3..effa53e 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/UnityGameBoardRenderer.cs +++ b/samples/Unity.Match3/Assets/Scripts/Common/UnityGameBoardRenderer.cs @@ -89,14 +89,9 @@ public Vector3 GetWorldPosition(GridPosition gridPosition) return GetWorldPosition(gridPosition.RowIndex, gridPosition.ColumnIndex); } - public bool TrySetNextTileState(GridPosition gridPosition) - { - return ((IStatefulSlot) _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex]).NextState(); - } - public TileGroup GetTileGroup(GridPosition gridPosition) { - return _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex].Group; + return (TileGroup) _gridSlotTiles[gridPosition.RowIndex, gridPosition.ColumnIndex].GroupId; } public void ResetGridTiles() diff --git a/src/Match3.Core/Interfaces/IGridSlot.cs b/src/Match3.Core/Interfaces/IGridSlot.cs index 98d970e..981c65f 100644 --- a/src/Match3.Core/Interfaces/IGridSlot.cs +++ b/src/Match3.Core/Interfaces/IGridSlot.cs @@ -10,6 +10,7 @@ public interface IGridSlot bool IsMovable { get; } bool CanContainItem { get; } + IGridSlotState State { get; } GridPosition GridPosition { get; } } } \ No newline at end of file diff --git a/src/Match3.Core/Interfaces/IGridSlotState.cs b/src/Match3.Core/Interfaces/IGridSlotState.cs index 7fb85f1..edae5d1 100644 --- a/src/Match3.Core/Interfaces/IGridSlotState.cs +++ b/src/Match3.Core/Interfaces/IGridSlotState.cs @@ -2,6 +2,7 @@ namespace Match3.Core.Interfaces { public interface IGridSlotState { + int GroupId { get; } bool IsLocked { get; } bool CanContainItem { get; } } diff --git a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IStatefulSlot.cs b/src/Match3.Core/Interfaces/IStatefulSlot.cs similarity index 73% rename from samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IStatefulSlot.cs rename to src/Match3.Core/Interfaces/IStatefulSlot.cs index a9b16fa..84ffa7f 100644 --- a/samples/Unity.Match3/Assets/Scripts/Common/Interfaces/IStatefulSlot.cs +++ b/src/Match3.Core/Interfaces/IStatefulSlot.cs @@ -1,4 +1,4 @@ -namespace Common.Interfaces +namespace Match3.Core.Interfaces { public interface IStatefulSlot { diff --git a/src/Match3.Template/GameBoardSolver.cs b/src/Match3.Template/GameBoardSolver.cs index 355795f..4d0bd4f 100644 --- a/src/Match3.Template/GameBoardSolver.cs +++ b/src/Match3.Template/GameBoardSolver.cs @@ -72,7 +72,8 @@ private bool IsNewSequence(ItemSequence newSequence, IEnumerable newSequence, IEnumerable