using System; using UnityEngine; using UnityEngine.SceneManagement; using System.Collections; using System.Collections.Generic; [RequireComponent(typeof(Canvas))] public class GameManager : Singleton { [SerializeField] private GameObject mainPanel; [SerializeField] private GameObject signinPanel; [SerializeField] private GameObject signupPanel; [SerializeField] private GameObject settingsPanel; [SerializeField] private GameObject confirmPanel; [SerializeField] private GameObject rankingPanel; [SerializeField] private GameObject shopPanel; [SerializeField] private GameObject giboPanel; [SerializeField] private GameObject loadingPanel; private UserManager _userManager; // UserManager 인스턴스 관리 private CoinsPanelController _coinsPanel; private Enums.GameType _gameType; private GameLogic _gameLogic; private StoneController _stoneController; private Canvas _canvas; public Sprite[] profileSprites; //패널에서 사용할 테스트 배열 private void Awake() { // UserManager가 없으면 생성 if (UserManager.Instance == null) { GameObject userManagerObj = new GameObject("UserManager"); _userManager = userManagerObj.AddComponent(); } //게임 씬에서 확인하기 위한 임시 코드 _gameType = Enums.GameType.SinglePlay; } private void Start() { if (_canvas == null) { _canvas = GameObject.Find("Canvas").GetComponent(); } // 로딩 화면 추가(자동 로그인 응답 전까지) OpenLoadingPanel(false, true, true); loadingPanel.SetActive(true); // 자동 로그인 // TryAutoSignin(); //게임 씬에서 확인하기 위한 임시 코드 // _canvas = canvas.GetComponent(); // _stoneController = GameObject.FindObjectOfType(); // _stoneController.InitStones(); // var fioTimer = FindObjectOfType(); // _gameLogic = new GameLogic(_stoneController, _gameType, fioTimer); } private void TryAutoSignin() { NetworkManager.Instance.GetInfo((userInfo) => { Debug.Log("자동 로그인 성공"); StartCoroutine(WaitForLoading(userInfo)); // loadingPanel.SetActive(false); // UserManager.Instance.SetUserInfo(userInfo); // // UpdateMainPanelUI(OpenMainPanel); // // ScoreData.SetScore(userInfo.score); // OpenConfirmPanel(userInfo.nickname + "님" + "\n" + "자동 로그인 되었습니다", () => { }); }, () => { Debug.Log("자동 로그인 실패"); loadingPanel.SetActive(false); // 로그인 화면 OpenSigninPanel(); }); } private IEnumerator WaitForLoading(UserInfoResult userInfo) { yield return new WaitForSeconds(2f); loadingPanel.SetActive(false); UserManager.Instance.SetUserInfo(userInfo); UpdateMainPanelUI(OpenMainPanel); // ScoreData.SetScore(userInfo.score); OpenConfirmPanel(userInfo.nickname + "님" + "\n" + "자동 로그인 되었습니다", () => { }); } /// /// 유저 별명, 급수를 서버에서 가져온 정보로 업데이트하여 메인화면에 표시 /// public void UpdateMainPanelUI(Action success = null) { MainPanelController mainPanelController = mainPanel.GetComponent(); if (mainPanelController == null) return; mainPanelController.UpdateUserInfo(); success?.Invoke(); } public void OpenMainPanel() { if (_canvas != null) { var mainPanelObject = Instantiate(mainPanel, _canvas.transform); // 메인 화면 아래의 코인 패널에 서버에서 가져 온 코인 값 업데이트 _coinsPanel = mainPanelObject.GetComponentInChildren(); if (_coinsPanel != null) { _coinsPanel.InitCoinsCount(UserManager.Instance.Coins); } } } public void OpenLoadingPanel(bool rotateImage = false, bool animatedText = false, bool flipImage = false) { if (_canvas != null) { var loadingPanelObject = Instantiate(loadingPanel, _canvas.transform); // 로딩 화면이 생성된 후, 원하는 애니메이션 활성화 LoadingPanelController loadingPanelController = loadingPanelObject.GetComponent(); if (loadingPanelController != null) { loadingPanelController.SetAnimation(rotateImage, animatedText, flipImage); } } } public void OpenSigninPanel() { if (_canvas != null) { var signinPanelObject = Instantiate(signinPanel, _canvas.transform); } } public void OpenSignupPanel() { if (_canvas != null) { var signupPanelObject = Instantiate(signupPanel, _canvas.transform); } } public void OnClickConfirmButton() { if (_gameLogic.selectedRow != -1 && _gameLogic.selectedCol != -1) { _gameLogic.OnConfirm(); } else { Debug.Log("착수 위치를 선택 해주세요"); //TODO: 착수할 위치를 선택하라는 동작 } } private void ChangeToGameScene(Enums.GameType gameType) { _gameType = gameType; SceneManager.LoadScene("Game"); } protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) { if (scene.name == "Game") { if (_gameType == Enums.GameType.Replay) { //TODO: 리플레이를 위한 초기화 } _stoneController = GameObject.FindObjectOfType(); _stoneController.InitStones(); var fioTimer = FindObjectOfType(); _gameLogic = new GameLogic(_stoneController, _gameType, fioTimer); } _canvas = GameObject.Find("Canvas").GetComponent(); } //임시 재시작 재대결 public void RetryGame() { _gameLogic.ResetBoard(); _stoneController.InitStones(); _gameLogic.SetState(_gameLogic.firstPlayerState); } public void OpenConfirmPanel(string message, ConfirmPanelController.OnConfirmButtonClick onConfirmButtonClick) { if (_canvas != null) { var confirmPanelObject = Instantiate(confirmPanel, _canvas.transform); confirmPanelObject.GetComponent() .Show(message, onConfirmButtonClick); } } public void OpenSettingsPanel() { if (_canvas != null) { var settingsPanelObject = Instantiate(settingsPanel, _canvas.transform); settingsPanelObject.GetComponent().Show(); } } public void OpenRankingPanel(List rankingItems) { if (_canvas != null) { var settingsPanelObject = Instantiate(rankingPanel, _canvas.transform); settingsPanelObject.GetComponent().Show(rankingItems); } } public void OpenShopPanel(List shopItems) { if (_canvas != null) { var settingsPanelObject = Instantiate(shopPanel, _canvas.transform); settingsPanelObject.GetComponent().Show(shopItems); } } public void OpenGiboPanel(List giboItems) { if (_canvas != null) { var settingsPanelObject = Instantiate(giboPanel, _canvas.transform); settingsPanelObject.GetComponent().Show(giboItems); } } }