diff --git a/Assets/Scenes/Replay.unity b/Assets/Scenes/Replay.unity index a0d9294..79a5794 100644 --- a/Assets/Scenes/Replay.unity +++ b/Assets/Scenes/Replay.unity @@ -19668,6 +19668,7 @@ MonoBehaviour: userBProfileImages: - {fileID: 2288075173090734880} - {fileID: 7536757830621973007} + replayFinishButton: {fileID: 609484620077371465} --- !u!1 &8676936482266105011 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Script/Replay/ReplayController.cs b/Assets/Script/Replay/ReplayController.cs index ac39d44..be78edf 100644 --- a/Assets/Script/Replay/ReplayController.cs +++ b/Assets/Script/Replay/ReplayController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.SceneManagement; +using UnityEngine.Serialization; using UnityEngine.UI; public class ReplayController : MonoBehaviour @@ -11,6 +12,7 @@ public class ReplayController : MonoBehaviour [SerializeField] private TMP_Text playerBNicknameText; [SerializeField] private GameObject[] userAProfileImages; [SerializeField] private GameObject[] userBProfileImages; + [SerializeField] private Button replayFinishButton; void Start() { InitReplayUI(); @@ -18,19 +20,26 @@ public class ReplayController : MonoBehaviour public void OnclickExitButton() { - ReplayManager.Instance.StopReplayFinish(); + ReplayManager.Instance.StopReplayFinish(() => { });; SceneManager.LoadScene("Main"); } public void OnclickFirstButton() { - ReplayManager.Instance.StopReplayFinish(); + ReplayManager.Instance.StopReplayFinish(() => + { + replayFinishButton.interactable = true; + });; ReplayManager.Instance.ReplayFirst(); } public void OnclickUndoButton() { - ReplayManager.Instance.StopReplayFinish(); + ReplayManager.Instance.StopReplayFinish(() => + { + replayFinishButton.interactable = true; + });; + Move targetMove = ReplayManager.Instance.PopPlacedMove(); if (targetMove != null) { @@ -40,7 +49,10 @@ public class ReplayController : MonoBehaviour public void OnclickNextButton() { - ReplayManager.Instance.StopReplayFinish(); + ReplayManager.Instance.StopReplayFinish(() => + { + replayFinishButton.interactable = true; + });; Move nextMove = ReplayManager.Instance.GetNextMove(); if (nextMove != null) { @@ -48,9 +60,17 @@ public class ReplayController : MonoBehaviour } } + /// + /// 끝 버튼 눌렸을 때 중복 클릭 방지 + /// public void OnClickFinishButton() { - ReplayManager.Instance.ReplayFinish(); + replayFinishButton.interactable = false; + //실행이 끝난 후 끝버튼 다시 활성화 + ReplayManager.Instance.ReplayFinish(() => + { + replayFinishButton.interactable = true; + }); } public void InitReplayUI() diff --git a/Assets/Script/Replay/ReplayManager.cs b/Assets/Script/Replay/ReplayManager.cs index 9676b28..7d931dc 100644 --- a/Assets/Script/Replay/ReplayManager.cs +++ b/Assets/Script/Replay/ReplayManager.cs @@ -224,27 +224,33 @@ public class ReplayManager : Singleton } } - public void ReplayFinish() + public void ReplayFinish(Action onFinishEnd) { - finishCoroutine = StartCoroutine(IReplayFinish()); + finishCoroutine = StartCoroutine(IReplayFinish(onFinishEnd)); } - public void StopReplayFinish() + /// + /// 끝 버튼을 중간에 멈춰야 할 때 사용 + /// + /// 마지막 장면까지 가는 도중에 멈출경우 해야할 일 전달 + public void StopReplayFinish(Action onFinishStop) { if (finishCoroutine != null) { StopCoroutine(finishCoroutine); finishCoroutine = null; } + onFinishStop?.Invoke(); } - private IEnumerator IReplayFinish() + private IEnumerator IReplayFinish(Action onFinishEnd) { while(_placedStoneStack.Count < _selectedReplayRecord.moves.Count) { ReplayNext(GetNextMove()); yield return new WaitForSeconds(0.1f); } + onFinishEnd?.Invoke(); } public string GetPlayerANickname() {