From 71a0e980b071d060846d5d7b78d29801042894f9 Mon Sep 17 00:00:00 2001 From: kittyegg Date: Fri, 12 Jun 2026 18:54:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B8=D0=B7=D1=83=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86?= =?UTF-8?q?=D0=B8=D1=8E=20=D1=81=D0=B1=D1=80=D0=BE=D1=81=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=83=D1=82=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/Scenes/Island.unity | 2 +- Assets/Scripts/SandPathBuildService.cs | 33 ++++++++++++++++---------- 2 files changed, 21 insertions(+), 14 deletions(-) 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) {