/// <summary> /// 게임 내에서 착수가 발생했을 때 /// </summary> /// <param name="snapshot"></param> void OnNewMove(GameState.IBoardSnapshot snapshot) { var ui = OverlayUI.instance; ui.GetDialog <WaitingDialog>().SafeClose(); // 착수 대기 다이얼로그가 열려있다면 닫기 ui.boardUI.ShowNewMove(snapshot.lastMove); // 게임판 UI에 새 착수 보내기 }
/// <summary> /// 판 전체를 특정 보드 스냅샷으로 덮어쓰기 /// </summary> /// <param name="boardSnapshot"></param> public void ShowBoard(GameState.IBoardSnapshot boardSnapshot) { for (var y = 0; y < m_boardHeight; y++) { for (var x = 0; x < m_boardWidth; x++) { var move = boardSnapshot.GetMove(x, y); var stone = GetStoneAtPos(x, y); if (move != null) { var colorPreset = move.who == GameState.PlayerTurn.One ? BoardStone.ColorPreset.Player1 : BoardStone.ColorPreset.Player2; stone.Show(colorPreset, false); } else { stone.Hide(); } } } var lastMove = boardSnapshot.lastMove; if (lastMove != null) { ShowStatus(lastMove); // 상태 표시하기 SetHighlight(GetStoneAtPos(lastMove.x, lastMove.y)); // 하이라이트 표시 } else { HideStatus(); } }
/// <summary> /// 입력 가능한 라인에 버튼을 보여주고 입력을 받으면 콜백을 호출해준다. /// </summary> /// <param name="currentBoard"></param> public void ShowInputs(GameState.IBoardSnapshot currentBoard, System.Action <int> callback) { for (var x = 0; x < GameState.c_boardWidth; x++) { // 맨 윗쪽줄에 아무것도 없으면 착수 가능한 걸로 본다 m_buttons[x].interactable = currentBoard == null || currentBoard.GetMove(x, GameState.c_boardHeight - 1) == null; } m_inputCallback = callback; m_buttonGroup.interactable = true; // 전체 그룹 입력 활성화 }