클래스명 변경 및 설비 클릭 상태일 때 다른 설비 클릭되지 않도록 변경

This commit is contained in:
SOOBEEN HAN
2026-03-16 16:19:38 +09:00
parent e919db5bf7
commit bb6c159adf
16 changed files with 34 additions and 27 deletions

View File

@@ -6,11 +6,11 @@ namespace UVC.EnglewoodLAB.Data
/// <summary> /// <summary>
/// 설비 상세 패널 전체 데이터. /// 설비 상세 패널 전체 데이터.
/// </summary> /// </summary>
public class EWLKEquipDetailData public class EWLKManuEquipDetailData
{ {
public EWLKEquipBasicInfoData BasicInfo { get; } = new(); public EWLKManuEquipBasicInfoData BasicInfo { get; } = new();
public EWLKQualityInfoData QualityInfo { get; } = new(); public EWLKQualityInfoData QualityInfo { get; } = new();
public EWLKEquipOperationData OperationInfo { get; } = new(); public EWLKManuEquipOperationData OperationInfo { get; } = new();
public EWLKMainMixerData MainMixer { get; } = new(); public EWLKMainMixerData MainMixer { get; } = new();
} }
@@ -19,7 +19,7 @@ namespace UVC.EnglewoodLAB.Data
/// <summary> /// <summary>
/// 설비 기본 정보 패널 데이터. /// 설비 기본 정보 패널 데이터.
/// </summary> /// </summary>
public class EWLKEquipBasicInfoData public class EWLKManuEquipBasicInfoData
{ {
/// <summary>설비명</summary> /// <summary>설비명</summary>
public string EquipmentName { get; set; } = "-"; public string EquipmentName { get; set; } = "-";
@@ -83,7 +83,7 @@ namespace UVC.EnglewoodLAB.Data
/// <summary> /// <summary>
/// 설비 운영 정보 패널 데이터. /// 설비 운영 정보 패널 데이터.
/// </summary> /// </summary>
public class EWLKEquipOperationData public class EWLKManuEquipOperationData
{ {
/// <summary>공정 정보</summary> /// <summary>공정 정보</summary>
public OperationInfoItem ProcessInfo { get; } = new(); public OperationInfoItem ProcessInfo { get; } = new();

View File

@@ -18,7 +18,7 @@ namespace UVC.EnglewoodLAB.Data
/// <summary> /// <summary>
/// 설비 정보 팝업에 표시할 데이터. /// 설비 정보 팝업에 표시할 데이터.
/// </summary> /// </summary>
public class EWLKEquipInfoData public class EWLKManuEquipInfoData
{ {
/// <summary>설비 상태</summary> /// <summary>설비 상태</summary>
public EquipmentStatus Status { get; set; } = EquipmentStatus.Running; public EquipmentStatus Status { get; set; } = EquipmentStatus.Running;

View File

@@ -11,7 +11,7 @@ namespace UVC.EnglewoodLAB
/// 이 컴포넌트를 설비 오브젝트(예: Cube)에 부착하고, /// 이 컴포넌트를 설비 오브젝트(예: Cube)에 부착하고,
/// Inspector에서 UIDocument(DynamicUI)를 연결합니다. /// Inspector에서 UIDocument(DynamicUI)를 연결합니다.
/// </summary> /// </summary>
public class EWLKEquipInfoTracker : MonoBehaviour public class EWLKManuEquipInfoTracker : MonoBehaviour
{ {
[Header("UI")] [Header("UI")]
[Tooltip("팝업을 표시할 UIDocument (DynamicUI 권장)")] [Tooltip("팝업을 표시할 UIDocument (DynamicUI 권장)")]
@@ -29,8 +29,8 @@ namespace UVC.EnglewoodLAB
[SerializeField] private float worldYOffset = 1.0f; [SerializeField] private float worldYOffset = 1.0f;
// ── 내부 상태 ───────────────────────────────── // ── 내부 상태 ─────────────────────────────────
private EWLKEquipInfoPopup? _popup; private EWLKManuEquipInfoPopup? _popup;
private EWLKEquipInfoData _data = new(); private EWLKManuEquipInfoData _data = new();
private Camera? _mainCamera; private Camera? _mainCamera;
private VisualElement? _root; private VisualElement? _root;
private bool _attached; private bool _attached;
@@ -43,7 +43,7 @@ namespace UVC.EnglewoodLAB
if (uiDocument == null) if (uiDocument == null)
{ {
Debug.LogWarning($"[EWLKEquipInfoTracker] {name}: UIDocument가 할당되지 않았습니다."); Debug.LogWarning($"[EWLKManuEquipInfoTracker] {name}: UIDocument가 할당되지 않았습니다.");
return; return;
} }
@@ -108,7 +108,7 @@ namespace UVC.EnglewoodLAB
_root = uiDocument?.rootVisualElement; _root = uiDocument?.rootVisualElement;
if (_root == null) return; if (_root == null) return;
_popup = new EWLKEquipInfoPopup(); _popup = new EWLKManuEquipInfoPopup();
ApplyData(); ApplyData();
_root.Add(_popup); _root.Add(_popup);
_attached = true; _attached = true;
@@ -136,7 +136,7 @@ namespace UVC.EnglewoodLAB
/// <summary> /// <summary>
/// 외부에서 설비 데이터를 업데이트합니다. /// 외부에서 설비 데이터를 업데이트합니다.
/// </summary> /// </summary>
public void UpdateData(EWLKEquipInfoData data) public void UpdateData(EWLKManuEquipInfoData data)
{ {
_data = data; _data = data;
_popup?.SetData(data); _popup?.SetData(data);

View File

@@ -12,7 +12,7 @@ namespace UVC.EnglewoodLAB
/// 선택 시 파란 아웃라인을 표시하고, 선택 해제 시 모두 제거합니다. /// 선택 시 파란 아웃라인을 표시하고, 선택 해제 시 모두 제거합니다.
/// </summary> /// </summary>
[RequireComponent(typeof(Collider))] [RequireComponent(typeof(Collider))]
public class EWLKEquipSelectHandler : MonoBehaviour public class EWLKManuEquipSelectHandler : MonoBehaviour
{ {
[Header("UI")] [Header("UI")]
[Tooltip("패널을 표시할 UIDocument (DynamicUI 권장)")] [Tooltip("패널을 표시할 UIDocument (DynamicUI 권장)")]
@@ -25,9 +25,13 @@ namespace UVC.EnglewoodLAB
[Tooltip("아웃라인 색상")] [Tooltip("아웃라인 색상")]
[SerializeField] private Color outlineColor = new(0.2f, 0.5f, 1f, 0.4f); [SerializeField] private Color outlineColor = new(0.2f, 0.5f, 1f, 0.4f);
// ── 상세 패널 활성 상태 (다른 핸들러에서 클릭 차단용) ──
/// <summary>상세 패널이 열려 있는지 여부</summary>
public static bool IsPanelActive { get; private set; }
// ── 내부 상태 ───────────────────────────────── // ── 내부 상태 ─────────────────────────────────
private EWLKEquipDetailPanel? _panel; private EWLKManuEquipDetailPanel? _panel;
private EWLKEquipDetailData _data = new(); private EWLKManuEquipDetailData _data = new();
private GameObject? _outlineObject; private GameObject? _outlineObject;
private bool _selected; private bool _selected;
private VisualElement? _root; private VisualElement? _root;
@@ -37,7 +41,7 @@ namespace UVC.EnglewoodLAB
/// <summary> /// <summary>
/// 외부에서 표시할 데이터를 설정합니다. /// 외부에서 표시할 데이터를 설정합니다.
/// </summary> /// </summary>
public void SetData(EWLKEquipDetailData data) public void SetData(EWLKManuEquipDetailData data)
{ {
_data = data; _data = data;
_panel?.SetData(data); _panel?.SetData(data);
@@ -57,6 +61,7 @@ namespace UVC.EnglewoodLAB
private void OnMouseDown() private void OnMouseDown()
{ {
if (_selected) return; if (_selected) return;
if (EWLKPackEquipInfoTracker.IsPanelActive) return;
Select(); Select();
} }
@@ -67,6 +72,7 @@ namespace UVC.EnglewoodLAB
{ {
if (_selected) return; if (_selected) return;
_selected = true; _selected = true;
IsPanelActive = true;
ShowOutline(); ShowOutline();
ShowPanel(); ShowPanel();
@@ -77,6 +83,7 @@ namespace UVC.EnglewoodLAB
{ {
if (!_selected) return; if (!_selected) return;
_selected = false; _selected = false;
IsPanelActive = false;
HideOutline(); HideOutline();
HidePanel(); HidePanel();
@@ -140,14 +147,14 @@ namespace UVC.EnglewoodLAB
{ {
if (uiDocument == null) if (uiDocument == null)
{ {
Debug.LogWarning($"[EWLKEquipSelectHandler] {name}: UIDocument가 할당되지 않았습니다."); Debug.LogWarning($"[EWLKManuEquipSelectHandler] {name}: UIDocument가 할당되지 않았습니다.");
return; return;
} }
_root = uiDocument.rootVisualElement; _root = uiDocument.rootVisualElement;
if (_root == null) return; if (_root == null) return;
_panel = new EWLKEquipDetailPanel(); _panel = new EWLKManuEquipDetailPanel();
_panel.SetData(_data); _panel.SetData(_data);
_panel.OnDeselectClicked += Deselect; _panel.OnDeselectClicked += Deselect;
_root.Add(_panel); _root.Add(_panel);

View File

@@ -12,9 +12,9 @@ namespace UVC.EnglewoodLAB.UIToolkit
/// DynamicUI rootVisualElement에 추가하여 사용합니다. /// DynamicUI rootVisualElement에 추가하여 사용합니다.
/// </summary> /// </summary>
[UxmlElement] [UxmlElement]
public partial class EWLKEquipDetailPanel : VisualElement, IDisposable public partial class EWLKManuEquipDetailPanel : VisualElement, IDisposable
{ {
private const string UssPath = "EWLK/UIToolkit/Main/EWLKEquipDetailPanelUss"; private const string UssPath = "EWLK/UIToolkit/Main/EWLKManuEquipDetailPanelUss";
/// <summary>선택 해제 버튼 클릭 시 호출</summary> /// <summary>선택 해제 버튼 클릭 시 호출</summary>
public event Action? OnDeselectClicked; public event Action? OnDeselectClicked;
@@ -64,7 +64,7 @@ namespace UVC.EnglewoodLAB.UIToolkit
// ──────────────────────────────────────────────── // ────────────────────────────────────────────────
public EWLKEquipDetailPanel() public EWLKManuEquipDetailPanel()
{ {
var uss = Resources.Load<StyleSheet>(UssPath); var uss = Resources.Load<StyleSheet>(UssPath);
if (uss != null) styleSheets.Add(uss); if (uss != null) styleSheets.Add(uss);
@@ -168,7 +168,7 @@ namespace UVC.EnglewoodLAB.UIToolkit
Add(deselectBtn); Add(deselectBtn);
// 기본 데이터로 초기화 // 기본 데이터로 초기화
SetData(new EWLKEquipDetailData()); SetData(new EWLKManuEquipDetailData());
} }
// ── 공개 API ──────────────────────────────────────── // ── 공개 API ────────────────────────────────────────
@@ -176,7 +176,7 @@ namespace UVC.EnglewoodLAB.UIToolkit
/// <summary> /// <summary>
/// 데이터를 바인딩합니다. /// 데이터를 바인딩합니다.
/// </summary> /// </summary>
public void SetData(EWLKEquipDetailData data) public void SetData(EWLKManuEquipDetailData data)
{ {
// 설비 기본 정보 // 설비 기본 정보
_equipNameVal.text = data.BasicInfo.EquipmentName; _equipNameVal.text = data.BasicInfo.EquipmentName;

View File

@@ -10,9 +10,9 @@ namespace UVC.EnglewoodLAB.UIToolkit
/// 상태 원(초록/노랑/회색) + 설비명으로 구성됩니다. /// 상태 원(초록/노랑/회색) + 설비명으로 구성됩니다.
/// </summary> /// </summary>
[UxmlElement] [UxmlElement]
public partial class EWLKEquipInfoPopup : VisualElement public partial class EWLKManuEquipInfoPopup : VisualElement
{ {
private const string UssPath = "EWLK/UIToolkit/Main/EWLKEquipInfoPopupUss"; private const string UssPath = "EWLK/UIToolkit/Main/EWLKManuEquipInfoPopupUss";
private static readonly string ClassRoot = "ewlk-equip-popup"; private static readonly string ClassRoot = "ewlk-equip-popup";
private static readonly string ClassIndicator = "ewlk-equip-popup__indicator"; private static readonly string ClassIndicator = "ewlk-equip-popup__indicator";
@@ -24,7 +24,7 @@ namespace UVC.EnglewoodLAB.UIToolkit
private readonly VisualElement _indicator; private readonly VisualElement _indicator;
private readonly Label _nameLabel; private readonly Label _nameLabel;
public EWLKEquipInfoPopup() public EWLKManuEquipInfoPopup()
{ {
var uss = Resources.Load<StyleSheet>(UssPath); var uss = Resources.Load<StyleSheet>(UssPath);
if (uss != null) styleSheets.Add(uss); if (uss != null) styleSheets.Add(uss);
@@ -48,7 +48,7 @@ namespace UVC.EnglewoodLAB.UIToolkit
/// <summary> /// <summary>
/// 데이터를 바인딩합니다. /// 데이터를 바인딩합니다.
/// </summary> /// </summary>
public void SetData(EWLKEquipInfoData data) public void SetData(EWLKManuEquipInfoData data)
{ {
_nameLabel.text = data.EquipmentName; _nameLabel.text = data.EquipmentName;