26.04.03 가상공장 화면 디자인 반영 • 좌측 도구 창, 상단 UI, 하단 UI • 생산 현황판, 알림 현황판 • 설비 라벨, 요약 팝업, 대시보드, 데이터 보드 • 설정창, 미니맵, AI 시뮬레이션 결과창, 나가기 팝업 가상 공장 화면 디자인 변경에 따른 기능 추가 • 미니맵 드래그 및 위치 조정 기능 추가 • UI 상호 작용(호버링, 선택, 위치 이동, 재설정) • UI 기능 추가(상태 표시, 색상)
178 lines
8.2 KiB
C#
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;
|
|
}
|
|
}
|
|
} |