DO-64 [Feat] 항복 버튼 구현
This commit is contained in:
parent
8fa494e541
commit
f3af9c86e6
@ -18,10 +18,16 @@ public class GameUIController : MonoBehaviour
|
|||||||
[SerializeField] private Sprite[] profileImageSprites; //0. 기본 드래곤 1. 기본 호랑이 2.아이보리 드래곤 3. 아이보리 호랑이
|
[SerializeField] private Sprite[] profileImageSprites; //0. 기본 드래곤 1. 기본 호랑이 2.아이보리 드래곤 3. 아이보리 호랑이
|
||||||
[SerializeField] private Sprite[] indicatorSprites; //0. active 1. inactive
|
[SerializeField] private Sprite[] indicatorSprites; //0. active 1. inactive
|
||||||
|
|
||||||
|
|
||||||
private Sprite _originalSpriteA;
|
private Sprite _originalSpriteA;
|
||||||
private Sprite _originalSpriteB;
|
private Sprite _originalSpriteB;
|
||||||
|
|
||||||
|
private MultiplayManager _multiplayManager;
|
||||||
|
|
||||||
|
private void Start()
|
||||||
|
{
|
||||||
|
_multiplayManager = GameManager.Instance.GetMultiplayManager();
|
||||||
|
}
|
||||||
|
|
||||||
public void OnClickConfirmButton()
|
public void OnClickConfirmButton()
|
||||||
{
|
{
|
||||||
GameManager.Instance.OnClickConfirmButton();
|
GameManager.Instance.OnClickConfirmButton();
|
||||||
@ -37,8 +43,8 @@ public class GameUIController : MonoBehaviour
|
|||||||
GameManager.Instance.panelManager.OpenConfirmPanel("항복 하시겠습니까?", () =>
|
GameManager.Instance.panelManager.OpenConfirmPanel("항복 하시겠습니까?", () =>
|
||||||
{
|
{
|
||||||
//TODO: 서버에 항복 전달 및 기타 등등
|
//TODO: 서버에 항복 전달 및 기타 등등
|
||||||
|
_multiplayManager.RequestSurrender();
|
||||||
GameManager.Instance.ChangeToMainScene();
|
// GameManager.Instance.ChangeToMainScene();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
StartGame, // 생성한 방에 다른 유저가 참여해서 게임 시작
|
StartGame, // 생성한 방에 다른 유저가 참여해서 게임 시작
|
||||||
SwitchAI, // 15초 후 매칭 실패 시 AI 플레이로 전환 알림
|
SwitchAI, // 15초 후 매칭 실패 시 AI 플레이로 전환 알림
|
||||||
ExitRoom, // 자신이 방을 빠져 나왔을 때
|
ExitRoom, // 자신이 방을 빠져 나왔을 때
|
||||||
EndGame // 상대방이 접속을 끊거나 방을 나갔을 때
|
EndGame, // 상대방이 접속을 끊거나 방을 나갔을 때
|
||||||
|
DoSurrender, // 상대방이 항복했을 때
|
||||||
|
SurrenderConfirmed // 항복 요청이 성공적으로 전송되었을 때
|
||||||
};
|
};
|
||||||
}
|
}
|
@ -235,7 +235,7 @@ public class GameLogic : MonoBehaviour
|
|||||||
private int _lastRow;
|
private int _lastRow;
|
||||||
private int _lastCol;
|
private int _lastCol;
|
||||||
|
|
||||||
private MultiplayManager _multiplayManager;
|
public MultiplayManager _multiplayManager;
|
||||||
private string _roomId;
|
private string _roomId;
|
||||||
|
|
||||||
#region Renju Members
|
#region Renju Members
|
||||||
@ -419,6 +419,22 @@ public class GameLogic : MonoBehaviour
|
|||||||
Debug.Log("## End Game");
|
Debug.Log("## End Game");
|
||||||
// TODO: End Room 처리
|
// TODO: End Room 처리
|
||||||
break;
|
break;
|
||||||
|
case Constants.MultiplayManagerState.DoSurrender:
|
||||||
|
Debug.Log("상대방의 항복 요청 들어옴");
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Win);
|
||||||
|
EndGame(Enums.GameResult.Win);
|
||||||
|
});
|
||||||
|
break;
|
||||||
|
case Constants.MultiplayManagerState.SurrenderConfirmed:
|
||||||
|
Debug.Log("항복 요청 전송 완료");
|
||||||
|
UnityMainThreadDispatcher.Instance().Enqueue(() =>
|
||||||
|
{
|
||||||
|
GameManager.Instance.panelManager.OpenEffectPanel(Enums.GameResult.Lose);
|
||||||
|
EndGame(Enums.GameResult.Lose);
|
||||||
|
});
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB");
|
ReplayManager.Instance.InitReplayData(UserManager.Instance.Nickname,"nicknameB");
|
||||||
|
|
||||||
|
@ -20,12 +20,21 @@ public class GameManager : Singleton<GameManager>
|
|||||||
[NonSerialized] public PanelManager panelManager;
|
[NonSerialized] public PanelManager panelManager;
|
||||||
[NonSerialized] public AudioManager audioManager;
|
[NonSerialized] public AudioManager audioManager;
|
||||||
|
|
||||||
|
private MultiplayManager _multiplayManager;
|
||||||
|
|
||||||
protected override void Awake()
|
protected override void Awake()
|
||||||
{
|
{
|
||||||
base.Awake();
|
base.Awake();
|
||||||
InitPanels();
|
InitPanels();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MultiplayManager GetMultiplayManager()
|
||||||
|
{
|
||||||
|
_multiplayManager = _gameLogic._multiplayManager;
|
||||||
|
if (_multiplayManager == null) Debug.Log("MultiplayManager가 null입니다");
|
||||||
|
return _multiplayManager;
|
||||||
|
}
|
||||||
|
|
||||||
private void InitPanels()
|
private void InitPanels()
|
||||||
{
|
{
|
||||||
if (panelManager == null)
|
if (panelManager == null)
|
||||||
|
@ -67,6 +67,8 @@ public class MultiplayManager : IDisposable
|
|||||||
private event Action<Constants.MultiplayManagerState, object> _onMultiplayStateChanged;
|
private event Action<Constants.MultiplayManagerState, object> _onMultiplayStateChanged;
|
||||||
public Action<MoveData> OnOpponentMove;
|
public Action<MoveData> OnOpponentMove;
|
||||||
|
|
||||||
|
private string _roomId;
|
||||||
|
|
||||||
public MultiplayManager(Action<Constants.MultiplayManagerState, object> onMultiplayStateChanged)
|
public MultiplayManager(Action<Constants.MultiplayManagerState, object> onMultiplayStateChanged)
|
||||||
{
|
{
|
||||||
_onMultiplayStateChanged = onMultiplayStateChanged;
|
_onMultiplayStateChanged = onMultiplayStateChanged;
|
||||||
@ -86,6 +88,8 @@ public class MultiplayManager : IDisposable
|
|||||||
_socket.On("exitRoom", ExitRoom);
|
_socket.On("exitRoom", ExitRoom);
|
||||||
_socket.On("endGame", EndGame);
|
_socket.On("endGame", EndGame);
|
||||||
_socket.On("doOpponent", DoOpponent);
|
_socket.On("doOpponent", DoOpponent);
|
||||||
|
_socket.On("doSurrender", DoSurrender);
|
||||||
|
_socket.On("surrenderConfirmed", SurrenderConfirmed);
|
||||||
|
|
||||||
_socket.Connect();
|
_socket.Connect();
|
||||||
}
|
}
|
||||||
@ -109,6 +113,8 @@ public class MultiplayManager : IDisposable
|
|||||||
private void CreateRoom(SocketIOResponse response)
|
private void CreateRoom(SocketIOResponse response)
|
||||||
{
|
{
|
||||||
var data = response.GetValue<CreateRoomData>();
|
var data = response.GetValue<CreateRoomData>();
|
||||||
|
_roomId = data.roomId;
|
||||||
|
Debug.Log("roomId CreateRoom할 때 저장? " + _roomId);
|
||||||
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.CreateRoom, data.roomId);
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.CreateRoom, data.roomId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,8 +122,8 @@ public class MultiplayManager : IDisposable
|
|||||||
{
|
{
|
||||||
var data = response.GetValue<JoinRoomData>();
|
var data = response.GetValue<JoinRoomData>();
|
||||||
Debug.Log($"룸에 참여: 룸 ID - {data.roomId}, 상대방 등급 - {data.opponentRating}, 상대방 이름 - {data.opponentNickname}, 흑/백 여부 - {data.isBlack}, 상대방 이미지 인덱스 - {data.opponentImageIndex}");
|
Debug.Log($"룸에 참여: 룸 ID - {data.roomId}, 상대방 등급 - {data.opponentRating}, 상대방 이름 - {data.opponentNickname}, 흑/백 여부 - {data.isBlack}, 상대방 이미지 인덱스 - {data.opponentImageIndex}");
|
||||||
|
_roomId = data.roomId;
|
||||||
// 필요한 데이터 사용
|
Debug.Log("roomId JoinRoom할 때 저장? " + _roomId);
|
||||||
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.JoinRoom, data);
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.JoinRoom, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -180,7 +186,38 @@ public class MultiplayManager : IDisposable
|
|||||||
|
|
||||||
public void LeaveRoom(string roomId)
|
public void LeaveRoom(string roomId)
|
||||||
{
|
{
|
||||||
_socket.Emit("leaveRoom", new { roomId });
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
|
{
|
||||||
|
Debug.LogError("LeaveRoom 호출 실패: _roomId가 설정되지 않음");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_socket.Emit("leaveRoom", new { roomId = _roomId });
|
||||||
|
_roomId = null; // 방 나가면 roomId 초기화
|
||||||
|
}
|
||||||
|
|
||||||
|
public void RequestSurrender()
|
||||||
|
{
|
||||||
|
if (string.IsNullOrEmpty(_roomId))
|
||||||
|
{
|
||||||
|
Debug.LogError("LeaveRoom 호출 실패: _roomId가 설정되지 않음");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_socket.Emit("requestSurrender",new { roomId = _roomId });
|
||||||
|
}
|
||||||
|
|
||||||
|
private void DoSurrender(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<MessageData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.DoSurrender, data.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SurrenderConfirmed(SocketIOResponse response)
|
||||||
|
{
|
||||||
|
var data = response.GetValue<MessageData>();
|
||||||
|
|
||||||
|
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.SurrenderConfirmed, data.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user