using System; using TMPro; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; /// /// ¾îÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀΠȯ°æ ¼³Á¤ ÆÐ³ÎÀ» °ü¸®ÇÏ´Â ºä Ŭ·¡½º /// ÇÁ·Î±×·¥ ºÒ·¯¿À±â/»ý¼º, TCP Á¤º¸ Ç¥½Ã Åä±Û, µµ¿ò¸», ¾Û Á¾·á µîÀÇ ±â´ÉÀ» Á¦°ø /// VR ÄÁÆ®·Ñ·¯ÀÇ ¸Þ´º ¹öưÀ¸·Î È£ÃâµÊ /// public class EnvView : MonoBehaviour { [SerializeField] private GameObject envPanel; // ȯ°æ ¼³Á¤ ¸ÞÀÎ ÆÐ³Î (Àüü ¸Þ´ºÀÇ ºÎ¸ð) [SerializeField] private GameObject pauseMenuPanel; // ¸Þ´º ¹öưµéÀÌ ¸ð¿©ÀÖ´Â ÆÐ³Î (µµ¿ò¸» µîÀ» ¶ç¿ï ¶§ ¼û°ÜÁü) [SerializeField] private Button envBackBtn; // µÚ·Î °¡±â ¹öư [SerializeField] private Button[] toggleBtn; // TCP Á¤º¸ Ç¥½Ã ¿©ºÎ¸¦ º¯°æÇÏ´Â ¹öư ¹è¿­ [SerializeField] private Button loadProgramBtn; // 'ÇÁ·Î±×·¥ ºÒ·¯¿À±â' ¸Þ´º·Î ÁøÀÔÇÏ´Â ¹öư [SerializeField] private Button newProgramBtn; // '»õ ÇÁ·Î±×·¥ ¸¸µé±â' ¸Þ´º·Î ÁøÀÔÇÏ´Â ¹öư [SerializeField] private Button helpBtn; // µµ¿ò¸» ÆÐ³ÎÀ» ¿©´Â ¹öư [SerializeField] private Button exitBtn; // ¾îÇø®ÄÉÀÌ¼Ç Á¾·á ¹öư [SerializeField] private GameObject icon_show; // TCP Á¤º¸°¡ º¸ÀÌ´Â »óÅÂÀÏ ¶§ Ç¥½ÃÇÒ ¾ÆÀÌÄÜ (´« ¶á ¾ÆÀÌÄÜ) [SerializeField] private GameObject icon_hide; // TCP Á¤º¸°¡ ¼û°ÜÁø »óÅÂÀÏ ¶§ Ç¥½ÃÇÒ ¾ÆÀÌÄÜ (´« °¨Àº ¾ÆÀÌÄÜ) [SerializeField] private TextMeshProUGUI tcpToggleTMP; // ÇöÀç TCP Ç¥½Ã »óŸ¦ ¾Ë·ÁÁÖ´Â ÅØ½ºÆ® (ON/OFF) [SerializeField] private GameObject helpPanel; // µµ¿ò¸» ³»¿ëÀ» ´ãÀº ÆÐ³Î [SerializeField] private Button helpBackBtn; // µµ¿ò¸» ÆÐ³Î ´Ý±â ¹öư [SerializeField] private GameObject ProgramEnterPanel; // ÇÁ·Î±×·¥ ¼±ÅÃ/»ý¼º °ü·Ã UIµéÀ» Æ÷ÇÔÇÏ´Â »óÀ§ ÆÐ³Î [SerializeField] private GameObject NewProgramPanel; // '»õ ÇÁ·Î±×·¥ »ý¼º' È­¸é ÆÐ³Î [SerializeField] private GameObject OriginalProgramPanel; // '±âÁ¸ ÇÁ·Î±×·¥ ºÒ·¯¿À±â' È­¸é ÆÐ³Î (¸®½ºÆ®) /// /// ¸Þ´º ÆÐ³ÎÀ» ¿©´Ý´Â ÄÁÆ®·Ñ·¯ ÀÔ·Â ¾×¼Ç (¿¹: ¿ÞÂÊ ÄÁÆ®·Ñ·¯ ¸Þ´º ¹öư) /// public InputActionReference showEnvPanel; private bool isPressingMenu = false; // ¸Þ´º°¡ ÇöÀç ¿­·ÁÀÖ´ÂÁö È®ÀÎÇÏ´Â Ç÷¡±× // --- À̺¥Æ® Á¤ÀÇ --- public event Action OnToggleClicked; // TCP Åä±Û ¹öư Ŭ¸¯ ½Ã ¹ß»ý (true: º¸À̱â, false: ¼û±â±â) public event Action OnLoadProgramListRequested; // ÇÁ·Î±×·¥ ¸ñ·Ï ·Îµå ¿äû ½Ã ¹ß»ý void Start() { envPanel.SetActive(false); if (showEnvPanel != null) { showEnvPanel.action.Enable(); showEnvPanel.action.performed += ShowEnvPanel; } envBackBtn.onClick.AddListener(() => HideAllPanels()); toggleBtn[0].onClick.AddListener(() => ToggleTcp()); toggleBtn[1].onClick.AddListener(() => ToggleTcp()); loadProgramBtn.onClick.AddListener(() => LoadProgramList()); newProgramBtn.onClick.AddListener(() => OpenNewProgramPanel()); helpBtn.onClick.AddListener(() => OpenHelpPanel()); helpBackBtn.onClick.AddListener(() => CloseHelpPanel()); exitBtn.onClick.AddListener(() => QuitGame()); } private void OnDestroy() { if (showEnvPanel != null) { showEnvPanel.action.performed -= ShowEnvPanel; } } /// /// ÄÁÆ®·Ñ·¯ ¸Þ´º ¹öư ÀÔ·Â ½Ã È£ÃâµÊ /// ÆÐ³ÎÀ» Åä±Û(Äѱâ/²ô±â)Çϰí, ÄÑÁú ¶§ ´Ù¸¥ ÇÏÀ§ ÆÐ³ÎµéÀ» ¼û±è /// private void ShowEnvPanel(InputAction.CallbackContext obj) { if (!isPressingMenu) { envPanel.SetActive(true); ProgramEnterPanel.SetActive(false); } else { envPanel.SetActive(false); } isPressingMenu = !isPressingMenu; } /// /// 'µÚ·Î °¡±â' µîÀ» ´­·¶À» ¶§ ¸ðµç ÆÐ³ÎÀ» ¼û±è /// private void HideAllPanels() { envPanel.SetActive(false); ProgramEnterPanel.SetActive(false); } /// /// µµ¿ò¸» ÆÐ³Î ¿­±â (¸ÞÀÎ ¸Þ´º ¹öưµéÀº ¼û±è) /// private void OpenHelpPanel() { helpPanel.SetActive(true); pauseMenuPanel.SetActive(false); } /// /// µµ¿ò¸» ÆÐ³ÎÀ» ´Ý°í ´Ù½Ã ¸ÞÀÎ ¸Þ´º ¹öưµéÀ» º¸¿©ÁÜ /// private void CloseHelpPanel() { helpPanel.SetActive(false); pauseMenuPanel.SetActive(true); } /// /// TCP Á¤º¸ Ç¥½Ã ¿©ºÎ(UI)¸¦ Åä±ÛÇϰí À̺¥Æ®¸¦ ¹ß»ý½ÃÅ´ /// private void ToggleTcp() { if(icon_show.activeSelf) { icon_show.SetActive(false); icon_hide.SetActive(true); tcpToggleTMP.text = "ÇöÀç TCP°ª OFF"; OnToggleClicked?.Invoke(false); } else if (icon_hide.activeSelf) { icon_hide.SetActive(false); icon_show.SetActive(true); tcpToggleTMP.text = "ÇöÀç TCP°ª ON"; OnToggleClicked?.Invoke(true); } } /// /// 'ÇÁ·Î±×·¥ ºÒ·¯¿À±â' È­¸éÀ¸·Î Àüȯ /// private void LoadProgramList() { envPanel.SetActive(false); ProgramEnterPanel.SetActive(true); NewProgramPanel.SetActive(false); OriginalProgramPanel.SetActive(true); OnLoadProgramListRequested?.Invoke(); } /// /// '»õ ÇÁ·Î±×·¥ ¸¸µé±â' È­¸éÀ¸·Î Àüȯ /// private void OpenNewProgramPanel() { envPanel.SetActive(false); ProgramEnterPanel.SetActive(true); NewProgramPanel.SetActive(true); OriginalProgramPanel.SetActive(false); } /// /// ¾îÇø®ÄÉÀ̼ÇÀ» Á¾·á /// ¿¡µðÅÍ È¯°æ°ú ºôµå ȯ°æÀ» ±¸ºÐÇÏ¿© ó¸® /// private void QuitGame() { #if UNITY_EDITOR UnityEditor.EditorApplication.isPlaying = false; #else Application.Quit(); // ¾îÇø®ÄÉÀÌ¼Ç Á¾·á #endif } }