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
}
}