Merge pull request #56 from Degulleo/DO-62-멀티플레이-착수-버그-수정

Do 62 멀티플레이 착수 버그 수정
This commit is contained in:
Jay 2025-03-26 15:24:58 +09:00 committed by GitHub
commit fd1a239e5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -12,6 +12,10 @@ public abstract class BasePlayerState
public abstract void OnExit(GameLogic gameLogic); public abstract void OnExit(GameLogic gameLogic);
public abstract void HandleMove(GameLogic gameLogic, int row, int col); public abstract void HandleMove(GameLogic gameLogic, int row, int col);
public abstract void HandleNextTurn(GameLogic gameLogic); public abstract void HandleNextTurn(GameLogic gameLogic);
protected string _roomId;
protected bool _isMultiplay;
protected MultiplayManager _multiplayManager;
public void ProcessMove(GameLogic gameLogic, Enums.PlayerType playerType, int row, int col) public void ProcessMove(GameLogic gameLogic, Enums.PlayerType playerType, int row, int col)
{ {
@ -20,6 +24,11 @@ public abstract class BasePlayerState
gameLogic.SetNewBoardValue(playerType, row, col); gameLogic.SetNewBoardValue(playerType, row, col);
gameLogic.CountStoneCounter(); gameLogic.CountStoneCounter();
if (_isMultiplay)
{
_multiplayManager.SendPlayerMove(_roomId, new Vector2Int(row, col));
}
if (gameLogic.CheckGameWin(playerType, row, col)) if (gameLogic.CheckGameWin(playerType, row, col))
{ {
var gameResult = playerType == Enums.PlayerType.PlayerA? Enums.GameResult.Win:Enums.GameResult.Lose; var gameResult = playerType == Enums.PlayerType.PlayerA? Enums.GameResult.Win:Enums.GameResult.Lose;
@ -53,10 +62,6 @@ public class PlayerState : BasePlayerState
private Enums.PlayerType _playerType; private Enums.PlayerType _playerType;
private bool _isFirstPlayer; private bool _isFirstPlayer;
private MultiplayManager _multiplayManager;
private string _roomId;
private bool _isMultiplay;
public PlayerState(bool isFirstPlayer) public PlayerState(bool isFirstPlayer)
{ {
_isFirstPlayer = isFirstPlayer; _isFirstPlayer = isFirstPlayer;
@ -64,17 +69,10 @@ public class PlayerState : BasePlayerState
_isMultiplay = false; _isMultiplay = false;
} }
public PlayerState(bool isFirstPlayer, MultiplayManager multiplayManager, JoinRoomData data)
: this(isFirstPlayer)
{
_multiplayManager = multiplayManager;
_roomId = data.roomId;
_isMultiplay = true;
}
public PlayerState(bool isFirstPlayer, MultiplayManager multiplayManager, string roomId) public PlayerState(bool isFirstPlayer, MultiplayManager multiplayManager, string roomId)
: this(isFirstPlayer) : this(isFirstPlayer)
{ {
_isFirstPlayer = isFirstPlayer;
_multiplayManager = multiplayManager; _multiplayManager = multiplayManager;
_roomId = roomId; _roomId = roomId;
_isMultiplay = true; _isMultiplay = true;
@ -108,11 +106,6 @@ public class PlayerState : BasePlayerState
public override void HandleMove(GameLogic gameLogic, int row, int col) public override void HandleMove(GameLogic gameLogic, int row, int col)
{ {
gameLogic.SetStoneSelectedState(row, col); gameLogic.SetStoneSelectedState(row, col);
if (_isMultiplay)
{
Debug.Log("row: " + row + "col: " + col);
_multiplayManager.SendPlayerMove(_roomId, new Vector2Int(row, col));
}
} }
public override void HandleNextTurn(GameLogic gameLogic) public override void HandleNextTurn(GameLogic gameLogic)
@ -340,13 +333,21 @@ public class GameLogic : MonoBehaviour
return; return;
} }
// TODO: 선공, 후공 처리 // 선공, 후공 처리
if (joinRoomData.isBlack) bool isFirstPlayer = joinRoomData.isBlack;
{
}
firstPlayerState = new MultiPlayerState(true, _multiplayManager); if (isFirstPlayer)
secondPlayerState = new PlayerState(false, _multiplayManager, joinRoomData); {
Debug.Log("해당 플레이어가 선공 입니다");
firstPlayerState = new PlayerState(true, _multiplayManager, joinRoomData.roomId);
secondPlayerState = new MultiPlayerState(false, _multiplayManager);
}
else
{
Debug.Log("해당 플레이어가 후공 입니다");
firstPlayerState = new MultiPlayerState(true, _multiplayManager);
secondPlayerState = new PlayerState(false, _multiplayManager, joinRoomData.roomId);
}
// 메인 스레드에서 실행 - UI 업데이트는 메인 스레드에서 실행 필요 // 메인 스레드에서 실행 - UI 업데이트는 메인 스레드에서 실행 필요
UnityMainThreadDispatcher.Instance().Enqueue(() => UnityMainThreadDispatcher.Instance().Enqueue(() =>
@ -378,13 +379,21 @@ public class GameLogic : MonoBehaviour
Debug.Log("Start Game 응답값이 null 입니다"); Debug.Log("Start Game 응답값이 null 입니다");
return; return;
} }
// 선공, 후공 처리
// TODO: 선공, 후공 처리 isFirstPlayer = startGameData.isBlack;
if (startGameData.isBlack)
if (isFirstPlayer)
{ {
Debug.Log("해당 플레이어가 선공 입니다");
firstPlayerState = new PlayerState(true, _multiplayManager, _roomId);
secondPlayerState = new MultiPlayerState(false, _multiplayManager);
}
else
{
Debug.Log("해당 플레이어가 후공 입니다");
firstPlayerState = new MultiPlayerState(true, _multiplayManager);
secondPlayerState = new PlayerState(false, _multiplayManager, _roomId);
} }
firstPlayerState = new PlayerState(true, _multiplayManager, _roomId);
secondPlayerState = new MultiPlayerState(false, _multiplayManager);
// 메인 스레드에서 실행 - UI 업데이트는 메인 스레드에서 실행 필요 // 메인 스레드에서 실행 - UI 업데이트는 메인 스레드에서 실행 필요
UnityMainThreadDispatcher.Instance().Enqueue(() => UnityMainThreadDispatcher.Instance().Enqueue(() =>