Merge branch 'main' into DO-46-게임-씬-보조-기능-추가

This commit is contained in:
Lim0_C 2025-03-25 09:22:08 +09:00
commit 90f853e9d6
8 changed files with 71 additions and 12 deletions

View File

@ -19668,6 +19668,7 @@ MonoBehaviour:
userBProfileImages: userBProfileImages:
- {fileID: 2288075173090734880} - {fileID: 2288075173090734880}
- {fileID: 7536757830621973007} - {fileID: 7536757830621973007}
replayFinishButton: {fileID: 609484620077371465}
--- !u!1 &8676936482266105011 --- !u!1 &8676936482266105011
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -7,4 +7,6 @@
public const int WIN_COUNT = 5; public const int WIN_COUNT = 5;
//무승부 확인을 위한 최소 착수 수 //무승부 확인을 위한 최소 착수 수
public const int MinCountForDrawCheck = 150; public const int MinCountForDrawCheck = 150;
public string[] AI_NAMIES = { "이세돌", "신사동호랭이","진짜인간임","종로3가짱돌","마스터김춘배","62세황순자","고준일 강사님"};
} }

View File

@ -2,6 +2,7 @@ using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement;
public abstract class BasePlayerState public abstract class BasePlayerState
{ {
@ -19,9 +20,11 @@ public abstract class BasePlayerState
if (gameLogic.CheckGameWin(playerType, row, col)) if (gameLogic.CheckGameWin(playerType, row, col))
{ {
GameManager.Instance.panelManager.OpenConfirmPanel($"Game Over: {playerType} Win",() =>{}); GameManager.Instance.panelManager.OpenConfirmPanel($"Game Over: {playerType} Win", () =>
var gameResult = playerType == Enums.PlayerType.PlayerA? Enums.GameResult.Win:Enums.GameResult.Lose; {
gameLogic.EndGame(gameResult); var gameResult = playerType == Enums.PlayerType.PlayerA? Enums.GameResult.Win:Enums.GameResult.Lose;
gameLogic.EndGame(gameResult);
});
} }
else else
{ {
@ -29,8 +32,10 @@ public abstract class BasePlayerState
{ {
if (gameLogic.CheckGameDraw()) if (gameLogic.CheckGameDraw())
{ {
GameManager.Instance.panelManager.OpenConfirmPanel($"Game Over: Draw",() =>{}); GameManager.Instance.panelManager.OpenConfirmPanel($"Game Over: Draw", () =>
gameLogic.EndGame(Enums.GameResult.Draw); {
gameLogic.EndGame(Enums.GameResult.Draw);
});
} }
else else
{ {
@ -354,6 +359,7 @@ public class GameLogic : MonoBehaviour
SetState(null); SetState(null);
ReplayManager.Instance.SaveReplayDataResult(result); ReplayManager.Instance.SaveReplayDataResult(result);
//TODO: 게임 종료 후 행동 구현 //TODO: 게임 종료 후 행동 구현
SceneManager.LoadScene("Main");
} }
//승리 확인 함수 //승리 확인 함수

View File

@ -28,8 +28,14 @@ public class GameManager : Singleton<GameManager>
private void InitPanels() private void InitPanels()
{ {
panelManager = Instantiate(panelManagerPrefab).GetComponent<PanelManager>(); if (panelManager == null)
audioManager = Instantiate(audioManagerPrefab).GetComponent<AudioManager>(); {
panelManager = Instantiate(panelManagerPrefab).GetComponent<PanelManager>();
}
if (audioManager == null)
{
audioManager = Instantiate(audioManagerPrefab).GetComponent<AudioManager>();
}
} }
public void OnClickConfirmButton() public void OnClickConfirmButton()

View File

@ -42,7 +42,7 @@ public class MainPanelManager : MonoBehaviour
UpdateMainPanelUI(GameManager.Instance.panelManager.OpenMainPanel); UpdateMainPanelUI(GameManager.Instance.panelManager.OpenMainPanel);
// ScoreData.SetScore(userInfo.score); // ScoreData.SetScore(userInfo.score);
GameManager.Instance.panelManager.OpenConfirmPanel(userInfo.nickname + "님" + "\n" + "자동 로그인 되었습니다", () => { }); // GameManager.Instance.panelManager.OpenConfirmPanel(userInfo.nickname + "님" + "\n" + "자동 로그인 되었습니다", () => { });
loadingPanelController.StopLoading(); loadingPanelController.StopLoading();
}, () => }, () =>

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using TMPro; using TMPro;
using UnityEngine; using UnityEngine;
using UnityEngine.SceneManagement; using UnityEngine.SceneManagement;
using UnityEngine.Serialization;
using UnityEngine.UI; using UnityEngine.UI;
public class ReplayController : MonoBehaviour public class ReplayController : MonoBehaviour
@ -11,6 +12,7 @@ public class ReplayController : MonoBehaviour
[SerializeField] private TMP_Text playerBNicknameText; [SerializeField] private TMP_Text playerBNicknameText;
[SerializeField] private GameObject[] userAProfileImages; [SerializeField] private GameObject[] userAProfileImages;
[SerializeField] private GameObject[] userBProfileImages; [SerializeField] private GameObject[] userBProfileImages;
[SerializeField] private Button replayFinishButton;
void Start() void Start()
{ {
InitReplayUI(); InitReplayUI();
@ -18,16 +20,26 @@ public class ReplayController : MonoBehaviour
public void OnclickExitButton() public void OnclickExitButton()
{ {
ReplayManager.Instance.StopReplayFinish(() => { });;
SceneManager.LoadScene("Main"); SceneManager.LoadScene("Main");
} }
public void OnclickFirstButton() public void OnclickFirstButton()
{ {
ReplayManager.Instance.StopReplayFinish(() =>
{
replayFinishButton.interactable = true;
});;
ReplayManager.Instance.ReplayFirst(); ReplayManager.Instance.ReplayFirst();
} }
public void OnclickUndoButton() public void OnclickUndoButton()
{ {
ReplayManager.Instance.StopReplayFinish(() =>
{
replayFinishButton.interactable = true;
});;
Move targetMove = ReplayManager.Instance.PopPlacedMove(); Move targetMove = ReplayManager.Instance.PopPlacedMove();
if (targetMove != null) if (targetMove != null)
{ {
@ -37,6 +49,10 @@ public class ReplayController : MonoBehaviour
public void OnclickNextButton() public void OnclickNextButton()
{ {
ReplayManager.Instance.StopReplayFinish(() =>
{
replayFinishButton.interactable = true;
});;
Move nextMove = ReplayManager.Instance.GetNextMove(); Move nextMove = ReplayManager.Instance.GetNextMove();
if (nextMove != null) if (nextMove != null)
{ {
@ -44,9 +60,17 @@ public class ReplayController : MonoBehaviour
} }
} }
/// <summary>
/// 끝 버튼 눌렸을 때 중복 클릭 방지
/// </summary>
public void OnClickFinishButton() public void OnClickFinishButton()
{ {
ReplayManager.Instance.ReplayFinish(); replayFinishButton.interactable = false;
//실행이 끝난 후 끝버튼 다시 활성화
ReplayManager.Instance.ReplayFinish(() =>
{
replayFinishButton.interactable = true;
});
} }
public void InitReplayUI() public void InitReplayUI()

View File

@ -34,6 +34,7 @@ public class Move
public class ReplayManager : Singleton<ReplayManager> public class ReplayManager : Singleton<ReplayManager>
{ {
private ReplayRecord _recordingReplayData; private ReplayRecord _recordingReplayData;
private Coroutine finishCoroutine;
#region #region
@ -223,14 +224,34 @@ public class ReplayManager : Singleton<ReplayManager>
} }
} }
public void ReplayFinish() public void ReplayFinish(Action onFinishEnd)
{
finishCoroutine = StartCoroutine(IReplayFinish(onFinishEnd));
}
/// <summary>
/// 끝 버튼을 중간에 멈춰야 할 때 사용
/// </summary>
/// <param name="onFinishStop">마지막 장면까지 가는 도중에 멈출경우 해야할 일 전달</param>
public void StopReplayFinish(Action onFinishStop)
{
if (finishCoroutine != null)
{
StopCoroutine(finishCoroutine);
finishCoroutine = null;
}
onFinishStop?.Invoke();
}
private IEnumerator IReplayFinish(Action onFinishEnd)
{ {
while(_placedStoneStack.Count < _selectedReplayRecord.moves.Count) while(_placedStoneStack.Count < _selectedReplayRecord.moves.Count)
{ {
ReplayNext(GetNextMove()); ReplayNext(GetNextMove());
yield return new WaitForSeconds(0.1f);
} }
onFinishEnd?.Invoke();
} }
public string GetPlayerANickname() public string GetPlayerANickname()
{ {
return _selectedReplayRecord.playerA; return _selectedReplayRecord.playerA;

View File

@ -27,7 +27,6 @@ public class ReplayPanelItemsController : ScrollPanelController
records = ReplayManager.Instance.LoadReplayDatas(); records = ReplayManager.Instance.LoadReplayDatas();
foreach (var replayRecord in records) foreach (var replayRecord in records)
{ {
Debug.Log($"{replayRecord.gameDate}의 결과는 {replayRecord.gameResult}");
var replayCellButtonObject = Instantiate(scrollItemPrefab, content.transform); var replayCellButtonObject = Instantiate(scrollItemPrefab, content.transform);
ReplayCell replayCell = replayCellButtonObject.GetComponent<ReplayCell>(); ReplayCell replayCell = replayCellButtonObject.GetComponent<ReplayCell>();