diff --git a/Assets/Scenes/Island.unity b/Assets/Scenes/Island.unity index d486460..3aaebc8 100644 --- a/Assets/Scenes/Island.unity +++ b/Assets/Scenes/Island.unity @@ -170,6 +170,7 @@ MonoBehaviour: _grassBlockPrefab: {fileID: 1673662010218982673, guid: 8dd20c91f0d7a7b419f6bedcd1870cba, type: 3} _pathStart: {fileID: 1415278839} _pathEnd: {fileID: 761061820} + _resetBlockTime: 0.03 _pathFinish: - {fileID: 1987853413} - {fileID: 1569763699} @@ -7536,7 +7537,6 @@ MonoBehaviour: m_EditorClassIdentifier: Assembly-CSharp::GameMenuButtons _gameManager: {fileID: 1875710079} _sandPathBuildService: {fileID: 305503} - _wallet: {fileID: 1030979928} _mainMenuButton: {fileID: 512672405} _nextLevelButton: {fileID: 769732337} _resetPathButton: {fileID: 1026163394} diff --git a/Assets/Scripts/SandPathBuildService.cs b/Assets/Scripts/SandPathBuildService.cs index 1518c9d..f1dcca5 100644 --- a/Assets/Scripts/SandPathBuildService.cs +++ b/Assets/Scripts/SandPathBuildService.cs @@ -2,6 +2,7 @@ using UnityEngine; using UnityEngine.Events; using System.Linq; using System.Collections.Generic; +using System.Collections; public class SandPathBuildService : MonoBehaviour { @@ -11,6 +12,7 @@ public class SandPathBuildService : MonoBehaviour [SerializeField] private BlockScript _grassBlockPrefab; [SerializeField] private BlockScript _pathStart; [SerializeField] private BlockScript _pathEnd; + [SerializeField] private float _resetBlockTime = 0.5f; [SerializeField] private BlockScript[] _pathFinish; [SerializeField] private BlockScript[] _predefinedBlocks; @@ -31,6 +33,8 @@ public class SandPathBuildService : MonoBehaviour private BlockScript _currentBlock; private readonly List _blocksInPath = new(); + private bool _canBuild = true; + private void Start() => InitBlocks(); private void InitBlocks() @@ -54,18 +58,7 @@ public class SandPathBuildService : MonoBehaviour _blockDetector.OnBlockClicked -= OnBlockDetected; } - public void ResetPath() - { - for (int i = _predefinedBlocks.Length; i < _blocksInPath.Count; i++) - { - var block = _blocksInPath[i]; - Instantiate(_grassBlockPrefab, block.transform.position, block.transform.localRotation, block.transform.parent); - DestroyBlock(block); - } - - _blocksInPath.Clear(); - InitBlocks(); - } + public void ResetPath() => StartCoroutine(ResetPathCoroutine()); public void ResetLastBlock() { @@ -82,9 +75,23 @@ public class SandPathBuildService : MonoBehaviour _currentBlock = _blocksInPath.LastOrDefault(); } + private IEnumerator ResetPathCoroutine() + { + _canBuild = false; + var wait = new WaitForSeconds(_resetBlockTime); + + while (_blocksInPath.Count > _predefinedBlocks.Length) + { + yield return wait; + ResetLastBlock(); + } + + _canBuild = true; + } + private void OnBlockDetected(BlockScript block) { - if (_gameManager.CurrentState != GameManager.GameState.BuildingPath) + if (_gameManager.CurrentState != GameManager.GameState.BuildingPath || !_canBuild) return; if (block == _currentBlock) {