Files
AZTECH_WB/Assets/Scripts/UI/MachineDashboard/MachineDetailDashboard.cs
정영민 18bc516f1d [정영민] 아즈텍 UI 디자인 변경 및 기능 수정 1차
26.04.03
가상공장 화면 디자인 반영
  • 좌측 도구 창, 상단 UI, 하단 UI
  • 생산 현황판, 알림 현황판
  • 설비 라벨, 요약 팝업, 대시보드, 데이터 보드
  • 설정창, 미니맵, AI 시뮬레이션 결과창, 나가기 팝업
가상 공장 화면 디자인 변경에 따른 기능 추가
  • 미니맵 드래그 및 위치 조정 기능 추가
  • UI 상호 작용(호버링, 선택, 위치 이동, 재설정)
  • UI 기능 추가(상태 표시, 색상)
2026-04-03 11:50:05 +09:00

178 lines
8.2 KiB
C#

using AZTECHWB.Command;
using AZTECHWB.Extensions;
using AZTECHWB.Management;
using Cysharp.Threading.Tasks;
using System;
using System.Globalization;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
namespace AZTECHWB.UI
{
public class MachineDetailDashboard : UIPanel
{
#region TextMeshProUGUI
private TextMeshProUGUI MachineName;
private TextMeshProUGUI wordno;
private TextMeshProUGUI workseq;
private TextMeshProUGUI eorate;
private TextMeshProUGUI statusnm;
private TextMeshProUGUI workcd;
private TextMeshProUGUI itemcd;
private TextMeshProUGUI itemdesc;
private TextMeshProUGUI pjtcd;
private TextMeshProUGUI matcd;
private TextMeshProUGUI cavity;
private TextMeshProUGUI cycletime;
private TextMeshProUGUI moldcd;
private TextMeshProUGUI moldseq;
private TextMeshProUGUI workdt;
private TextMeshProUGUI planqty;
private TextMeshProUGUI workqty;
private TextMeshProUGUI goodqty;
private TextMeshProUGUI badqty;
private TextMeshProUGUI badrate;
private TextMeshProUGUI progressrate;
private TextMeshProUGUI goodqtyrate;
#endregion
#region Slider
private Slider Slider_eorate;
private Slider Slider_planqty;
private Slider Slider_workqty;
private Slider Slider_goodqty;
private Slider Slider_badqty;
private Slider Slider_badrate;
private Slider Slider_progressrate;
private Slider Slider_goodqtyrate;
#endregion
private Button Button_Close;
private Button Button_DataDashboard;
public override async UniTask Init()
{
MachineName = GetElement<TextMeshProUGUI>(nameof(MachineName));
wordno = GetElement<TextMeshProUGUI>(nameof(wordno));
workseq = GetElement<TextMeshProUGUI>(nameof(workseq));
eorate = GetElement<TextMeshProUGUI>(nameof(eorate));
statusnm = GetElement<TextMeshProUGUI>(nameof(statusnm));
workcd = GetElement<TextMeshProUGUI>(nameof(workcd));
itemcd = GetElement<TextMeshProUGUI>(nameof(itemcd));
itemdesc = GetElement<TextMeshProUGUI>(nameof(itemdesc));
pjtcd = GetElement<TextMeshProUGUI>(nameof(pjtcd));
matcd = GetElement<TextMeshProUGUI>(nameof(matcd));
cavity = GetElement<TextMeshProUGUI>(nameof(cavity));
cycletime = GetElement<TextMeshProUGUI>(nameof(cycletime));
moldcd = GetElement<TextMeshProUGUI>(nameof(moldcd));
moldseq = GetElement<TextMeshProUGUI>(nameof(moldseq));
workdt = GetElement<TextMeshProUGUI>(nameof(workdt));
planqty = GetElement<TextMeshProUGUI>(nameof(planqty));
workqty = GetElement<TextMeshProUGUI>(nameof(workqty));
goodqty = GetElement<TextMeshProUGUI>(nameof(goodqty));
badqty = GetElement<TextMeshProUGUI>(nameof(badqty));
badrate = GetElement<TextMeshProUGUI>(nameof(badrate));
progressrate = GetElement<TextMeshProUGUI>(nameof(progressrate));
goodqtyrate = GetElement<TextMeshProUGUI>(nameof(goodqtyrate));
Slider_eorate = GetElement<Slider>(nameof(Slider_eorate));
Slider_planqty = GetElement<Slider>(nameof(Slider_planqty));
Slider_workqty = GetElement<Slider>(nameof(Slider_workqty));
Slider_goodqty = GetElement<Slider>(nameof(Slider_goodqty));
Slider_badqty = GetElement<Slider>(nameof(Slider_badqty));
Slider_badrate = GetElement<Slider>(nameof(Slider_badrate));
Slider_progressrate = GetElement<Slider>(nameof(Slider_progressrate));
Slider_goodqtyrate = GetElement<Slider>(nameof(Slider_goodqtyrate));
Button_Close = GetElement<Button>(nameof(Button_Close));
Button_DataDashboard = GetElement<Button>(nameof(Button_DataDashboard));
Button_Close.onClick.AddListener(Close);
Button_DataDashboard.onClick.AddListener(OnClickDataDashboardButton);
await UniTask.CompletedTask;
}
private void OnClickDataDashboardButton()
{
new OpenMachineDataDashboardPanelCommand().Execute();
}
public void SetDetailDashBoardInfo(Machine machine, CompleteInfo data)
{
SetTextData(data, machine);
SetSliderData(data);
}
private void SetTextData(CompleteInfo data, Machine machine)
{
MachineName.SetText(DataExtensions.SetStringTextData(data.worknm, machine.machineName));
MachineName.rectTransform.anchoredPosition = new Vector2(-MachineName.preferredWidth, MachineName.rectTransform.anchoredPosition.y);
eorate.SetText(DataExtensions.PercentCalculate(data.eorate).ToString() + "%");
wordno.SetText(DataExtensions.SetFloatTextData(data.wordno));
workseq.SetText(DataExtensions.SetFloatTextData(data.workseq));
statusnm.SetText(DataExtensions.SetFloatTextData(data.statusnm));
workcd.SetText(DataExtensions.SetFloatTextData(data.workcd));
itemcd.SetText(DataExtensions.SetFloatTextData(data.itemcd));
itemdesc.SetText(DataExtensions.SetFloatTextData(data.itemdesc));
pjtcd.SetText(DataExtensions.SetFloatTextData(data.pjtcd));
matcd.SetText(DataExtensions.SetFloatTextData(data.matcd));
cavity.SetText(DataExtensions.SetFloatTextData(data.cavity));
cycletime.SetText(DataExtensions.SetFloatTextData(data.cycletime));
moldcd.SetText(DataExtensions.SetFloatTextData(data.moldcd));
moldseq.SetText(DataExtensions.SetFloatTextData(data.moldseq));
planqty.SetText(DataExtensions.SetFloatTextData(data.planqty));
workqty.SetText(DataExtensions.SetFloatTextData(data.workqty));
goodqty.SetText(DataExtensions.SetFloatTextData(data.goodqty));
badqty.SetText(DataExtensions.SetFloatTextData(data.badqty));
badrate.SetText($"{DataExtensions.PercentCalculate(data.badrate)}%");
progressrate.SetText($"{DataExtensions.PercentCalculate(data.progressrate)}%");
goodqtyrate.SetText($"{DataExtensions.PercentCalculate(data.goodqtyrate)}%");
workdt.SetText(DataExtensions.CorrectionMonthDay(data.workdt, "yyyy.MM.dd"));
}
private void SetSliderData(CompleteInfo data)
{
SetSliderValue(Slider_eorate, 100f, DataExtensions.PercentCalculate(data.eorate));
SetSliderValue(Slider_planqty, DataExtensions.PercentCalculate(data.planqty), DataExtensions.PercentCalculate(data.planqty));
SetSliderValue(Slider_workqty, DataExtensions.PercentCalculate(data.planqty), DataExtensions.PercentCalculate(data.workqty));
SetSliderValue(Slider_goodqty, DataExtensions.PercentCalculate(data.planqty), DataExtensions.PercentCalculate(data.goodqty));
SetSliderValue(Slider_badqty, DataExtensions.PercentCalculate(data.planqty), DataExtensions.PercentCalculate(data.badqty));
SetSliderValue(Slider_badrate, 100f, DataExtensions.PercentCalculate(data.badrate));
SetSliderValue(Slider_progressrate, 100f, DataExtensions.PercentCalculate(data.progressrate));
SetSliderValue(Slider_goodqtyrate, 100f, DataExtensions.PercentCalculate(data.goodqtyrate));
}
private void SetSliderValue(Slider slider, float max, float value)
{
slider.minValue = 0f;
slider.maxValue = max;
slider.value = value;
if(slider != Slider_eorate)
{
SetSliderColor(slider);
}
}
private void SetSliderColor(Slider slider)
{
var percent = slider.value / slider.maxValue * 100f;
ColorUtility.TryParseHtmlString(percent switch
{
<= 10f => "#94A3B8", // 회색
<= 70f => "#54B8FF", // 하늘색
<= 90f => "#3B82F6", // 파란색
_ => "#0055E1" // 남색
}, out var color);
var fill = slider.fillRect.GetComponent<Image>();
fill.color = color;
}
}
}