diff --git a/Assets/Scenes/Island.unity b/Assets/Scenes/Island.unity index caa0079..dbf80f5 100644 --- a/Assets/Scenes/Island.unity +++ b/Assets/Scenes/Island.unity @@ -3941,6 +3941,7 @@ Transform: - {fileID: 1282261902} - {fileID: 709556714} - {fileID: 884308128} + - {fileID: 2072548927} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &486141168 @@ -15645,6 +15646,52 @@ Transform: m_CorrespondingSourceObject: {fileID: 5368672011475721328, guid: 8dd20c91f0d7a7b419f6bedcd1870cba, type: 3} m_PrefabInstance: {fileID: 2022833990} m_PrefabAsset: {fileID: 0} +--- !u!1 &2072548926 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2072548927} + - component: {fileID: 2072548928} + m_Layer: 0 + m_Name: TurretBuildTimer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2072548927 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072548926} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 481586150} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2072548928 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2072548926} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 330d868d3d6a72c489dce65e1ca03edc, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::TurretsBuildTimer + _gameManager: {fileID: 1875710079} + _buildTime: 10 --- !u!1001 &2096698926 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/TurretsBuildTimer.cs b/Assets/Scripts/TurretsBuildTimer.cs new file mode 100644 index 0000000..79d5da0 --- /dev/null +++ b/Assets/Scripts/TurretsBuildTimer.cs @@ -0,0 +1,60 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.Events; + +public class TurretsBuildTimer : MonoBehaviour +{ + [SerializeField] private GameManager _gameManager; + [SerializeField] private float _buildTime = 10f; + [SerializeField] private UnityEvent _onTick; + + public event UnityAction OnTick + { + add => _onTick.AddListener(value); + remove => _onTick.RemoveListener(value); + } + + private static readonly WaitForSeconds _wait = new(1f); + + private void OnEnable() + { + _gameManager.OnStateChanged += OnStateChanged; + } + + private void OnDisable() + { + _gameManager.OnStateChanged -= OnStateChanged; + } + + private void OnStateChanged(GameManager.GameState newState) + { + if (newState == GameManager.GameState.BuildingPath) + return; + + StopCoroutine(nameof(Timer)); + if (newState == GameManager.GameState.BuildingTurrets) + StartCoroutine(nameof(Timer)); + } + + private IEnumerator Timer() + { + for (float i = 0; i < _buildTime; i++) + { + _onTick?.Invoke(new OnTickEventArgs + { + ElapsedSeconds = i, + TotalSeconds = _buildTime + }); + yield return _wait; + } + + _gameManager.NextLevel(); + } + + public class OnTickEventArgs + { + public float SecondsLeft => TotalSeconds - ElapsedSeconds; + public float ElapsedSeconds { get; set; } + public float TotalSeconds { get; set; } + } +} diff --git a/Assets/Scripts/TurretsBuildTimer.cs.meta b/Assets/Scripts/TurretsBuildTimer.cs.meta new file mode 100644 index 0000000..32befc7 --- /dev/null +++ b/Assets/Scripts/TurretsBuildTimer.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 330d868d3d6a72c489dce65e1ca03edc \ No newline at end of file