DO-64 [Feat] 항복 버튼 구현
This commit is contained in:
parent
8fa494e541
commit
f3af9c86e6
@ -17,11 +17,17 @@ public class GameUIController : MonoBehaviour
|
||||
[SerializeField] private Image profileImageB;
|
||||
[SerializeField] private Sprite[] profileImageSprites; //0. 기본 드래곤 1. 기본 호랑이 2.아이보리 드래곤 3. 아이보리 호랑이
|
||||
[SerializeField] private Sprite[] indicatorSprites; //0. active 1. inactive
|
||||
|
||||
|
||||
private Sprite _originalSpriteA;
|
||||
private Sprite _originalSpriteB;
|
||||
|
||||
private MultiplayManager _multiplayManager;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_multiplayManager = GameManager.Instance.GetMultiplayManager();
|
||||
}
|
||||
|
||||
public void OnClickConfirmButton()
|
||||
{
|
||||
GameManager.Instance.OnClickConfirmButton();
|
||||
@ -37,8 +43,8 @@ public class GameUIController : MonoBehaviour
|
||||
GameManager.Instance.panelManager.OpenConfirmPanel("항복 하시겠습니까?", () =>
|
||||
{
|
||||
//TODO: 서버에 항복 전달 및 기타 등등
|
||||
|
||||
GameManager.Instance.ChangeToMainScene();
|
||||
_multiplayManager.RequestSurrender();
|
||||
// GameManager.Instance.ChangeToMainScene();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -16,6 +16,8 @@
|
||||
StartGame, // 생성한 방에 다른 유저가 참여해서 게임 시작
|
||||
SwitchAI, // 15초 후 매칭 실패 시 AI 플레이로 전환 알림
|
||||
ExitRoom, // 자신이 방을 빠져 나왔을 때
|
||||
EndGame // 상대방이 접속을 끊거나 방을 나갔을 때
|
||||
EndGame, // 상대방이 접속을 끊거나 방을 나갔을 때
|
||||
DoSurrender, // 상대방이 항복했을 때
|
||||
SurrenderConfirmed // 항복 요청이 성공적으로 전송되었을 때
|
||||
};
|
||||
}
|
@ -235,7 +235,7 @@ public class GameLogic : MonoBehaviour
|
||||
private int _lastRow;
|
||||
private int _lastCol;
|
||||
|
||||
private MultiplayManager _multiplayManager;
|
||||
public MultiplayManager _multiplayManager;
|
||||
private string _roomId;
|
||||
|
||||
#region Renju Members
|
||||
@ -419,6 +419,22 @@ public class GameLogic : MonoBehaviour
|
||||
Debug.Log("## End Game");
|
||||
// TODO: End Room 처리
|
||||
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");
|
||||
|
||||
|
@ -19,13 +19,22 @@ public class GameManager : Singleton<GameManager>
|
||||
|
||||
[NonSerialized] public PanelManager panelManager;
|
||||
[NonSerialized] public AudioManager audioManager;
|
||||
|
||||
private MultiplayManager _multiplayManager;
|
||||
|
||||
protected override void Awake()
|
||||
{
|
||||
base.Awake();
|
||||
InitPanels();
|
||||
}
|
||||
|
||||
|
||||
public MultiplayManager GetMultiplayManager()
|
||||
{
|
||||
_multiplayManager = _gameLogic._multiplayManager;
|
||||
if (_multiplayManager == null) Debug.Log("MultiplayManager가 null입니다");
|
||||
return _multiplayManager;
|
||||
}
|
||||
|
||||
private void InitPanels()
|
||||
{
|
||||
if (panelManager == null)
|
||||
|
@ -67,6 +67,8 @@ public class MultiplayManager : IDisposable
|
||||
private event Action<Constants.MultiplayManagerState, object> _onMultiplayStateChanged;
|
||||
public Action<MoveData> OnOpponentMove;
|
||||
|
||||
private string _roomId;
|
||||
|
||||
public MultiplayManager(Action<Constants.MultiplayManagerState, object> onMultiplayStateChanged)
|
||||
{
|
||||
_onMultiplayStateChanged = onMultiplayStateChanged;
|
||||
@ -86,6 +88,8 @@ public class MultiplayManager : IDisposable
|
||||
_socket.On("exitRoom", ExitRoom);
|
||||
_socket.On("endGame", EndGame);
|
||||
_socket.On("doOpponent", DoOpponent);
|
||||
_socket.On("doSurrender", DoSurrender);
|
||||
_socket.On("surrenderConfirmed", SurrenderConfirmed);
|
||||
|
||||
_socket.Connect();
|
||||
}
|
||||
@ -109,6 +113,8 @@ public class MultiplayManager : IDisposable
|
||||
private void CreateRoom(SocketIOResponse response)
|
||||
{
|
||||
var data = response.GetValue<CreateRoomData>();
|
||||
_roomId = data.roomId;
|
||||
Debug.Log("roomId CreateRoom할 때 저장? " + _roomId);
|
||||
_onMultiplayStateChanged?.Invoke(Constants.MultiplayManagerState.CreateRoom, data.roomId);
|
||||
}
|
||||
|
||||
@ -116,8 +122,8 @@ public class MultiplayManager : IDisposable
|
||||
{
|
||||
var data = response.GetValue<JoinRoomData>();
|
||||
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);
|
||||
}
|
||||
|
||||
@ -180,7 +186,38 @@ public class MultiplayManager : IDisposable
|
||||
|
||||
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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user