Files

185 lines
6.0 KiB
C#
Raw Permalink Normal View History

using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// <20>κ<EFBFBD> <20><><EFBFBD>α׷<CEB1>(Job <20><><EFBFBD><EFBFBD>)<29><> <20><><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD> <20><>ȸ, <20><><EFBFBD><EFBFBD>, <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> UI <20><>(View) Ŭ<><C5AC><EFBFBD><EFBFBD>
/// <20><><EFBFBD><EFBFBD> Ű<>е<20><><EFBFBD><EFBFBD> <20><><EFBFBD>ϸ<EFBFBD> <20>Է<EFBFBD>, <20><>ũ<EFBFBD><C5A9> <20><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> ǥ<><C7A5> <20><><EFBFBD><EFBFBD> UI <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>ϸ<EFBFBD>,
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߿<EFBFBD> <20>Է<EFBFBD>(<28><><EFBFBD><EFBFBD>, <20>ε<EFBFBD> <20><>)<29><> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> Presenter<65><72><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
/// </summary>
///
2025-11-19 18:38:48 +09:00
public class ProgramView : MonoBehaviour
{
// --- <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20>г<EFBFBD> ---
[Header("Panels")]
[SerializeField] private GameObject programSelectPanel; // <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20><>ü <20>ֻ<EFBFBD><D6BB><EFBFBD> <20>г<EFBFBD>
[SerializeField] private GameObject programNewPanel; // '<27><> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>' <20>Է<EFBFBD> ȭ<><C8AD>
[SerializeField] private GameObject programListPanel; // '<27>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD>' <20><><EFBFBD><EFBFBD> ȭ<><C8AD>
[Header("List View Components")]
[SerializeField] private Transform programButtonContent; // <20><>ũ<EFBFBD><C5A9> <20><><EFBFBD><EFBFBD> Content (<28><>ư<EFBFBD><C6B0><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ġ)
[SerializeField] private GameObject programButtonPrefab; // <20><><EFBFBD>Ͽ<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ư <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
[Header("Input UI")]
[SerializeField] private TextMeshProUGUI programIdText; // <20>Էµ<D4B7> <20><><EFBFBD>α׷<CEB1> ID<49><44> ǥ<>õ<EFBFBD> <20>ؽ<EFBFBD>Ʈ
[SerializeField] private Button[] numberPadButtons; // <20><><EFBFBD><EFBFBD> Ű<>е<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>ư (0~9)
[SerializeField] private Button backspaceButton; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ư
[Header("Action Buttons")]
[SerializeField] private Button createProgramButton; // <20><><EFBFBD><EFBFBD> Ȯ<><C8AE> <20><>ư
[SerializeField] private Button loadProgramButton; // <20><><EFBFBD><EFBFBD> <20>ҷ<EFBFBD><D2B7><EFBFBD><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ȯ <20><>ư
[SerializeField] private Button openProgramButton; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20><>ư
[SerializeField] private Button closeProgramListButton; // <20><><EFBFBD><EFBFBD> <20>ݱ<EFBFBD>(<28>ڷ<EFBFBD> <20><><EFBFBD><EFBFBD>) <20><>ư
// --- Presenter<65><72><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>̺<EFBFBD>Ʈ (User Events) ---
/// <summary><3E><> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20><>û (<28><><EFBFBD><EFBFBD>: <20>Էµ<D4B7> ID)</summary>
public event Action<string> OnCreateProgramClicked;
/// <summary><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>û</summary>
public event Action OnLoadProgramListRequested;
/// <summary><3E><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD> Ư<><C6AF> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD>: <20><><EFBFBD>õ<EFBFBD> ID)</summary>
public event Action<string> OnProgramSelectedToLoad;
/// <summary><3E><><EFBFBD>õ<EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û</summary>
public event Action OnOpenProgramClicked;
2025-10-24 14:36:33 +09:00
void Start()
{
loadProgramButton.onClick.AddListener(() => OnLoadProgramListRequested?.Invoke());
openProgramButton.onClick.AddListener(() => OnOpenProgramClicked?.Invoke());
for (int i = 0; i < numberPadButtons.Length; i++)
{
string number = numberPadButtons[i].GetComponentInChildren<TextMeshProUGUI>().text;
numberPadButtons[i].onClick.AddListener(() => AppendToInput(number));
}
backspaceButton.onClick.AddListener(HandleBackspace);
createProgramButton.onClick.AddListener(HandleCreateClick);
closeProgramListButton.onClick.AddListener(HideProgramList);
programSelectPanel.SetActive(true);
programNewPanel.SetActive(true);
programListPanel.SetActive(false);
SetprogramIdTextEmpty();
}
/// <summary>
/// <20>Է<EFBFBD> <20>ؽ<EFBFBD>Ʈ <20>ʵ带 <20>ʱ<EFBFBD>ȭ
/// </summary>
public void SetprogramIdTextEmpty()
{
programIdText.text = string.Empty;
}
/// <summary>
/// <20><><EFBFBD><EFBFBD> Ű<>е<EFBFBD> <20>Է<EFBFBD> ó<><C3B3>: <20><><EFBFBD>ڸ<EFBFBD> <20>ؽ<EFBFBD>Ʈ <20>ڿ<EFBFBD> <20><><EFBFBD><EFBFBD>
/// (<28>ִ<EFBFBD> 4<>ڸ<EFBFBD><DAB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>Է<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD> <20><><EFBFBD><EFBFBD>)
/// </summary>
private void AppendToInput(string number)
{
if (programIdText.text.Length < 4)
{
programIdText.text += number;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD> Ű<>е<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD>
/// </summary>
private void HandleBackspace()
{
if (programIdText.text.Length > 0)
{
programIdText.text = programIdText.text.Substring(0, programIdText.text.Length - 1);
}
}
/// <summary>
/// '<27><><EFBFBD><EFBFBD>' <20><>ư Ŭ<><C5AC> <20><> Presenter<65><72><EFBFBD><EFBFBD> <20>Էµ<D4B7> ID<49><44> <20>Բ<EFBFBD> <20>̺<EFBFBD>Ʈ<EFBFBD><C6AE> <20><><EFBFBD><EFBFBD>
/// </summary>
private void HandleCreateClick()
{
string inputId = programIdText.text;
OnCreateProgramClicked?.Invoke(inputId);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20>޽<EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>α׷<CEB1> ǥ<><C7A5>
/// </summary>
public void ShowMessage(string message)
{
Debug.LogWarning(message);
}
/// <summary>
/// <20><><EFBFBD>α׷<CEB1> <20>ε<EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD>
/// </summary>
2025-10-24 11:55:43 +09:00
public void DisplayProgram(string programId)
{
2025-10-24 11:55:43 +09:00
if (programId == null)
{
Debug.Log("No Program Loaded");
return;
}
2025-11-06 20:14:27 +09:00
Debug.Log($"<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1>: {programId}");
}
/// <summary>
/// Presenter<65>κ<EFBFBD><CEBA><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> ID <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ũ<EFBFBD><C5A9> <20><20><>ư <20><><EFBFBD>·<EFBFBD> ǥ<><C7A5>
/// </summary>
/// <param name="programIds">ǥ<><C7A5><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> <20≯<EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ</param>
public void ShowProgramList(List<string> programIds)
{
foreach (Transform child in programButtonContent)
{
Destroy(child.gameObject);
}
programIds.Sort();
foreach (string id in programIds)
{
GameObject buttonGO = Instantiate(programButtonPrefab, programButtonContent);
TextMeshProUGUI buttonText = buttonGO.GetComponentInChildren<TextMeshProUGUI>();
if (buttonText != null)
{
buttonText.text = id;
}
Button button = buttonGO.GetComponent<Button>();
if (button != null)
{
string currentId = id;
button.onClick.AddListener(() =>
{
OnProgramSelectedToLoad?.Invoke(currentId);
});
}
}
programListPanel.SetActive(true);
programNewPanel.SetActive(false);
}
/// <summary>
/// <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD> <20>ݰ<EFBFBD> <20>ٽ<EFBFBD> <20><><EFBFBD><EFBFBD> ȭ<><C8AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ƿ<EFBFBD>
/// </summary>
public void HideProgramList()
{
programListPanel.SetActive(false);
programNewPanel.SetActive(true);
SetprogramIdTextEmpty();
}
/// <summary>
/// <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD> <20>г<EFBFBD> <20><>ü<EFBFBD><C3BC> <20><><EFBFBD><EFBFBD> (<28><><EFBFBD><EFBFBD> ȭ<><C8AD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD>)
/// </summary>
public void HideProgramSelectPanel()
{
programSelectPanel.SetActive(false);
}
}