using System; using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using System.Collections.Generic; using UnityEngine.UI; using DG.Tweening; public class GameManager : Singleton { private Enums.GameType _gameType; private GameLogic _gameLogic; private StoneController _stoneController; private GameObject _omokBoardImage; private GameUIController _gameUIController; [SerializeField] private GameObject panelManagerPrefab; [SerializeField] private GameObject audioManagerPrefab; [NonSerialized] public PanelManager panelManager; [NonSerialized] public AudioManager audioManager; protected override void Awake() { base.Awake(); InitPanels(); } private void InitPanels() { if (panelManager == null) { panelManager = Instantiate(panelManagerPrefab).GetComponent(); } if (audioManager == null) { audioManager = Instantiate(audioManagerPrefab).GetComponent(); } } public void OnClickConfirmButton() { if (_gameLogic.selectedRow != -1 && _gameLogic.selectedCol != -1) { _gameLogic.OnConfirm(); } else { if (_stoneController != null && _omokBoardImage != null) { _stoneController.GetComponent().DOShakePosition(0.5f, 0.5f); _omokBoardImage.GetComponent().DOShakePosition(0.5f, 0.5f); } } } // 멀티 플레이를 위한 코드 public void ChangeToGameScene(Enums.GameType gameType) { _gameType = gameType; SceneManager.LoadScene("Game"); } public void ChangeToMainScene() { _gameType = Enums.GameType.None; // TODO: 추후 혹시 모를 존재하는 socket 통신 종료 필요 - _gameLogic?.Dispose에서 LeaveRoom 호출하긴 하는데 서버에서 이미 해당 방을 삭제했을 경우 동작 확인 필요 // _gameLogic?.Dispose(); SceneManager.LoadScene("Main"); } protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (scene.name == "Game") { _stoneController = GameObject.FindObjectOfType(); _stoneController.InitStones(); var fioTimer = FindObjectOfType(); _omokBoardImage = GameObject.FindObjectOfType().gameObject; _gameUIController = GameObject.FindObjectOfType(); _gameLogic = new GameLogic(_stoneController, _gameType, fioTimer); } InitPanels(); } //임시 재시작 재대결 public void RetryGame() { _gameLogic.ResetBoard(); _stoneController.InitStones(); _gameLogic.SetState(_gameLogic.firstPlayerState); } //유저 이름 Game UI에 초기화 public void InitPlayersName(string playerNameA, string playerNameB) { if (_gameUIController == null) return; _gameUIController.InitPlayersName(playerNameA, playerNameB); } //유저 프로필 이미지 Game UI에 초기화 public void InitProfileImages(int profileImageIndexA, int profileImageIndexB) { if (_gameUIController == null) return; _gameUIController.InitProfileImages(profileImageIndexA, profileImageIndexB); } public void SetTurnIndicator(bool isFirstPlayer) { if (_gameUIController == null) return; _gameUIController.SetTurnIndicator(isFirstPlayer); } }