2025-10-14 16:38:35 +09:00
|
|
|
|
using System;
|
|
|
|
|
|
using System.Collections.Generic;
|
2025-11-11 18:36:52 +09:00
|
|
|
|
using TMPro;
|
2025-10-14 16:38:35 +09:00
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
using UnityEngine.UI;
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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
|
2025-10-14 16:38:35 +09:00
|
|
|
|
{
|
|
|
|
|
|
// --- <20><><EFBFBD>α<CEB1> <20><><EFBFBD><EFBFBD> <20>г<EFBFBD> ---
|
2025-12-03 21:19:07 +09:00
|
|
|
|
[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>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
public event Action<string> OnCreateProgramClicked;
|
2025-12-03 21:19:07 +09:00
|
|
|
|
|
|
|
|
|
|
/// <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>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
public event Action<string> OnProgramSelectedToLoad;
|
2025-12-03 21:19:07 +09:00
|
|
|
|
|
|
|
|
|
|
/// <summary><3E><><EFBFBD>õ<EFBFBD> <20><><EFBFBD>α<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><>û</summary>
|
2025-10-23 18:43:38 +09:00
|
|
|
|
public event Action OnOpenProgramClicked;
|
2025-10-14 16:38:35 +09:00
|
|
|
|
|
2025-10-24 14:36:33 +09:00
|
|
|
|
|
2025-10-14 16:38:35 +09:00
|
|
|
|
void Start()
|
|
|
|
|
|
{
|
|
|
|
|
|
loadProgramButton.onClick.AddListener(() => OnLoadProgramListRequested?.Invoke());
|
2025-10-23 18:43:38 +09:00
|
|
|
|
openProgramButton.onClick.AddListener(() => OnOpenProgramClicked?.Invoke());
|
2025-10-14 16:38:35 +09:00
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
|
|
2025-10-15 10:39:44 +09:00
|
|
|
|
programSelectPanel.SetActive(true);
|
2025-10-23 18:43:38 +09:00
|
|
|
|
programNewPanel.SetActive(true);
|
2025-10-14 16:38:35 +09:00
|
|
|
|
programListPanel.SetActive(false);
|
2025-12-01 19:18:22 +09:00
|
|
|
|
SetprogramIdTextEmpty();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20>Է<EFBFBD> <20>ؽ<EFBFBD>Ʈ <20>ʵ带 <20>ʱ<EFBFBD>ȭ
|
|
|
|
|
|
/// </summary>
|
2025-12-01 19:18:22 +09:00
|
|
|
|
public void SetprogramIdTextEmpty()
|
|
|
|
|
|
{
|
2025-10-14 16:38:35 +09:00
|
|
|
|
programIdText.text = string.Empty;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
private void AppendToInput(string number)
|
|
|
|
|
|
{
|
2025-11-14 16:18:03 +09:00
|
|
|
|
if (programIdText.text.Length < 4)
|
|
|
|
|
|
{
|
|
|
|
|
|
programIdText.text += number;
|
|
|
|
|
|
}
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD> Ű<>е<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ó<><C3B3>: <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ڸ<EFBFBD> <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
/// </summary>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
private void HandleBackspace()
|
|
|
|
|
|
{
|
|
|
|
|
|
if (programIdText.text.Length > 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
programIdText.text = programIdText.text.Substring(0, programIdText.text.Length - 1);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
private void HandleCreateClick()
|
|
|
|
|
|
{
|
|
|
|
|
|
string inputId = programIdText.text;
|
|
|
|
|
|
OnCreateProgramClicked?.Invoke(inputId);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// <20><><EFBFBD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><EFBFBD><DEBD><EFBFBD><EFBFBD><EFBFBD> <20>α<CEB1> ǥ<><C7A5>
|
|
|
|
|
|
/// </summary>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
public void ShowMessage(string message)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogWarning(message);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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-14 16:38:35 +09:00
|
|
|
|
{
|
2025-10-24 11:55:43 +09:00
|
|
|
|
if (programId == null)
|
2025-10-15 10:39:44 +09:00
|
|
|
|
{
|
|
|
|
|
|
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}");
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
public void ShowProgramList(List<string> programIds)
|
|
|
|
|
|
{
|
|
|
|
|
|
foreach (Transform child in programButtonContent)
|
|
|
|
|
|
{
|
|
|
|
|
|
Destroy(child.gameObject);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-28 14:49:24 +09:00
|
|
|
|
programIds.Sort();
|
2025-10-14 16:38:35 +09:00
|
|
|
|
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);
|
2025-10-23 18:43:38 +09:00
|
|
|
|
programNewPanel.SetActive(false);
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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>
|
2025-10-14 16:38:35 +09:00
|
|
|
|
public void HideProgramList()
|
|
|
|
|
|
{
|
|
|
|
|
|
programListPanel.SetActive(false);
|
2025-10-23 18:43:38 +09:00
|
|
|
|
programNewPanel.SetActive(true);
|
2025-12-01 19:18:22 +09:00
|
|
|
|
SetprogramIdTextEmpty();
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|
2025-10-15 10:39:44 +09:00
|
|
|
|
|
2025-12-03 21:19:07 +09:00
|
|
|
|
/// <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>
|
2025-10-15 10:39:44 +09:00
|
|
|
|
public void HideProgramSelectPanel()
|
|
|
|
|
|
{
|
|
|
|
|
|
programSelectPanel.SetActive(false);
|
|
|
|
|
|
}
|
2025-10-14 16:38:35 +09:00
|
|
|
|
}
|