using System.Collections; using BlueWater.Audios; using BlueWater.Uis; using BlueWater.Utility; using TMPro; using UnityEditor; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.InputSystem; using UnityEngine.Serialization; using UnityEngine.UI; namespace BlueWater.Titles { public class TycoonTitle : PopupUi { [SerializeField] private GameObject _panel; [SerializeField] private GameObject _titleMenuUiPanel; [SerializeField] private TitleOptions titleOptions; [FormerlySerializedAs("titleQuit")] [SerializeField] private TitleQuitUi titleQuitUi; [SerializeField] private Button _startGameButton; [SerializeField] private Button _tutorialButton; [SerializeField] private Button _resumeGameButton; [SerializeField] private Button _optionsButton; [SerializeField] private Button _lobbyButton; [SerializeField] private Button _quitGameButton; [SerializeField] private bool _isTitleScene = true; [SerializeField] private TMP_Text _versionText; [SerializeField] private string _dailyBgm = "DailyBgm1"; [SerializeField] private Image _ink; [SerializeField] private UiEventsController _uiEventsController; [SerializeField] private TycoonTutorial _tycoonTutorial; public Material inkMaterialInstance { get; private set; } private PlayerInputKeyManager _playerInputKeyManager; private InputAction _interactionEAction; private InputAction _openAction; private InputAction _closeAction; private GameObject _previousClickedObject; private bool _isQuitting; private bool _onButtonClicked; private Coroutine _inkCoroutine; private void Start() { _playerInputKeyManager = PlayerInputKeyManager.Instance; _interactionEAction = _playerInputKeyManager.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.InteractionE); _openAction = _playerInputKeyManager.GetAction(InputActionMaps.Tycoon, TycoonActions.Options); _closeAction = _playerInputKeyManager.GetAction(InputActionMaps.TycoonUi, TycoonUiActions.Cancel); EventManager.OnTutorial += ShowTutorialUiByName; if (_isTitleScene) { _startGameButton.onClick.AddListener(() => SceneController.Instance.LoadScene(SceneName.Tycoon)); //수정 AudioManager.Instance.PlayBgm(_dailyBgm); Open(); EventSystem.current.SetSelectedGameObject(_startGameButton.gameObject); } else { _lobbyButton.onClick.AddListener(() => SceneController.Instance.LoadScene(SceneName.TycoonTile)); _panel.SetActive(false); _openAction.performed += OnOpen; } titleOptions.CloseOptions = HideSettingUi; titleQuitUi.CloseQuit = HideQuitUi; _tycoonTutorial.CloseAction = HideTutorialUi; _versionText.text = GetVersion(); inkMaterialInstance = Instantiate(_ink.material); _ink.material = inkMaterialInstance; } private void OnDestroy() { EventManager.OnTutorial -= ShowTutorialUiByName; if (_isTitleScene) { _startGameButton?.onClick.RemoveListener(() => SceneController.Instance?.LoadScene(SceneName.Tycoon)); } else { _lobbyButton?.onClick.AddListener(() => SceneController.Instance?.LoadScene(SceneName.TycoonTile)); } if (_interactionEAction != null) { _interactionEAction.performed -= OnInteractionE; } if (_openAction != null) { _openAction.performed -= OnOpen; } if (_closeAction != null) { _closeAction.performed -= OnClose; } } public void OnOpen(InputAction.CallbackContext context) { Open(); } public override void Open() { PopupUiController.RegisterPopup(this); _panel.SetActive(true); if (_isTitleScene) { } else { VisualFeedbackManager.Instance.SetBaseTimeScale(0.0f); _playerInputKeyManager.SwitchCurrentActionMap(InputActionMaps.TycoonUi); EventSystem.current.SetSelectedGameObject(_resumeGameButton.gameObject); } IsOpened = true; } public void OnClose(InputAction.CallbackContext context) { Close(); } public override void Close() { _panel.SetActive(false); PopupUiController.UnregisterPopup(this); IsOpened = false; if (_isTitleScene) { } else { _playerInputKeyManager.SwitchCurrentActionMap(InputActionMaps.Tycoon); VisualFeedbackManager.Instance.ResetTimeScale(); } } public override void EnableInput() { if (_isTitleScene) { _uiEventsController.EnableAutoNavigate(_startGameButton.gameObject); } else { _uiEventsController.EnableAutoNavigate(_resumeGameButton.gameObject); _closeAction.performed += OnClose; } _interactionEAction.performed += OnInteractionE; } public override void DisableInput() { if (_isTitleScene) { } else { _closeAction.performed -= OnClose; } _interactionEAction.performed -= OnInteractionE; _uiEventsController.DisableAutoNavigate(); } private string GetVersion() { #if UNITY_EDITOR return PlayerSettings.bundleVersion; #else return Application.version; #endif } public void OnInteractionE(InputAction.CallbackContext context) { var current = EventSystem.current.currentSelectedGameObject; if (!current) return; var currenButton = current.GetComponent