26.04.03 가상공장 화면 디자인 반영 • 좌측 도구 창, 상단 UI, 하단 UI • 생산 현황판, 알림 현황판 • 설비 라벨, 요약 팝업, 대시보드, 데이터 보드 • 설정창, 미니맵, AI 시뮬레이션 결과창, 나가기 팝업 가상 공장 화면 디자인 변경에 따른 기능 추가 • 미니맵 드래그 및 위치 조정 기능 추가 • UI 상호 작용(호버링, 선택, 위치 이동, 재설정) • UI 기능 추가(상태 표시, 색상)
165 lines
6.7 KiB
C#
165 lines
6.7 KiB
C#
using AZTECHWB.Extensions;
|
|
using AZTECHWB.Management;
|
|
using Best.MQTT.Packets.Utils;
|
|
using System;
|
|
using System.Globalization;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AZTECHWB
|
|
{
|
|
public class ProgressInfoItem : MonoBehaviour
|
|
{
|
|
private Image background;
|
|
private TextMeshProUGUI worknm;
|
|
private TextMeshProUGUI status;
|
|
private TextMeshProUGUI itemcd;
|
|
private TextMeshProUGUI itemdesc;
|
|
private TextMeshProUGUI wordno;
|
|
private TextMeshProUGUI goalqty;
|
|
private TextMeshProUGUI workqty;
|
|
private TextMeshProUGUI goodqty;
|
|
private TextMeshProUGUI badqty;
|
|
private TextMeshProUGUI efficiency;
|
|
private TextMeshProUGUI goaltime;
|
|
private Image Image_Status;
|
|
|
|
private Image workqtyStatus;
|
|
private Image goodqtyStatus;
|
|
private Image badqtyStatus;
|
|
|
|
public float fontSize;
|
|
public float blankSize;
|
|
|
|
public void Init()
|
|
{
|
|
background = transform.GetComponent<Image>();
|
|
|
|
transform.TryGetComponentInChildren(nameof(worknm), out worknm);
|
|
transform.TryGetComponentInChildren(nameof(status), out status);
|
|
transform.TryGetComponentInChildren(nameof(itemcd), out itemcd);
|
|
transform.TryGetComponentInChildren(nameof(itemdesc), out itemdesc);
|
|
transform.TryGetComponentInChildren(nameof(wordno), out wordno);
|
|
transform.TryGetComponentInChildren(nameof(goalqty), out goalqty);
|
|
transform.TryGetComponentInChildren(nameof(workqty), out workqty);
|
|
transform.TryGetComponentInChildren(nameof(goodqty), out goodqty);
|
|
transform.TryGetComponentInChildren(nameof(badqty), out badqty);
|
|
transform.TryGetComponentInChildren(nameof(efficiency), out efficiency);
|
|
transform.TryGetComponentInChildren(nameof(goaltime), out goaltime);
|
|
|
|
transform.TryGetComponentInChildren(nameof(Image_Status), out Image_Status);
|
|
transform.TryGetComponentInChildren(nameof(workqtyStatus), out workqtyStatus);
|
|
transform.TryGetComponentInChildren(nameof(goodqtyStatus), out goodqtyStatus);
|
|
transform.TryGetComponentInChildren(nameof(badqtyStatus), out badqtyStatus);
|
|
}
|
|
public void SetStatusData(CompleteInfo completeInfo)
|
|
{
|
|
var currentTime = DateTime.Now.ToString("HHmm");
|
|
|
|
worknm.SetText(DataExtensions.SetStringTextData(completeInfo.worknm));
|
|
status.SetText(DataExtensions.SetStringTextData(completeInfo.statusnm));
|
|
SetStatusColor(completeInfo.statusnm);
|
|
itemcd.SetText(DataExtensions.SetStringTextData(completeInfo.itemcd));
|
|
itemdesc.SetText(DataExtensions.SetStringTextData(completeInfo.itemdesc));
|
|
wordno.SetText(DataExtensions.SetStringTextData(completeInfo.wordno));
|
|
goaltime.SetText(CalculateDate(currentTime, completeInfo.sttm));
|
|
|
|
var goalqtyData = DataExtensions.RoundToIntData(completeInfo.goalqty);
|
|
var workqtyData = DataExtensions.RoundToIntData(completeInfo.workqty);
|
|
var goodqtyData = DataExtensions.RoundToIntData(completeInfo.goodqty);
|
|
var badqtyData = DataExtensions.RoundToIntData(completeInfo.badqty);
|
|
|
|
goalqty.SetText($"{goalqtyData}");
|
|
workqty.SetText($"{workqtyData}");
|
|
goodqty.SetText($"{goodqtyData}");
|
|
badqty.SetText($"{badqtyData}");
|
|
|
|
efficiency.SetText($"{DataExtensions.RoundToFloatData(completeInfo.efficiency)}");
|
|
|
|
SetQTYStatusColor(workqtyStatus, workqtyData, goalqtyData);
|
|
SetQTYStatusColor(goodqtyStatus, goodqtyData, goalqtyData);
|
|
SetQTYStatusColor(badqtyStatus, badqtyData, goalqtyData);
|
|
|
|
SetStatusImageResize();
|
|
}
|
|
private string CalculateDate(string currentTimeData, string startTimeData)
|
|
{
|
|
if (currentTimeData == null || startTimeData == null)
|
|
{
|
|
return "--:--";
|
|
}
|
|
|
|
string formattedCurrentTimeData = currentTimeData.Insert(2, ":");
|
|
string formattedStartTimeData = startTimeData.Insert(2, ":");
|
|
|
|
DateTime.TryParseExact(formattedCurrentTimeData, "HH:mm", null, DateTimeStyles.None, out var currentTime);
|
|
DateTime.TryParseExact(formattedStartTimeData, "HH:mm", null, DateTimeStyles.None, out var startTime);
|
|
|
|
var dateTime = currentTime.Subtract(startTime);
|
|
return dateTime.ToString(@"hh\:mm");
|
|
}
|
|
|
|
void SetStatusColor(string stat)
|
|
{
|
|
var newColor = new Color();
|
|
var textColor = new Color();
|
|
switch (stat)
|
|
{
|
|
case "가동중":
|
|
ColorUtility.TryParseHtmlString("#E1FAF0", out newColor);
|
|
ColorUtility.TryParseHtmlString("#027648", out textColor);
|
|
break;
|
|
case "비가동":
|
|
ColorUtility.TryParseHtmlString("#EFF2FA", out newColor);
|
|
ColorUtility.TryParseHtmlString("#494A50", out textColor);
|
|
break;
|
|
default:
|
|
ColorUtility.TryParseHtmlString("#FFF0F2", out newColor);
|
|
ColorUtility.TryParseHtmlString("#FF5D5D", out textColor);
|
|
break;
|
|
}
|
|
Image_Status.transform.TryGetComponentInChildren("Background", out Image Background);
|
|
Background.color = newColor;
|
|
|
|
status.color = textColor;
|
|
}
|
|
private void SetQTYStatusColor(Image status, int currentValue, int planValue)
|
|
{
|
|
var color = Color.gray;
|
|
if (status != badqtyStatus)
|
|
{
|
|
var percent = currentValue / planValue * 100f;
|
|
|
|
ColorUtility.TryParseHtmlString(percent switch
|
|
{
|
|
< 60f => "#94A3B8", // 회색
|
|
_ => "#68C779" // 남색
|
|
}, out color);
|
|
}
|
|
else
|
|
{
|
|
ColorUtility.TryParseHtmlString(currentValue switch
|
|
{
|
|
<= 0 => "#68C779", // 회색
|
|
< 9 => "#FFD154",
|
|
_ => "#FF5D5D" // 남색
|
|
}, out color);
|
|
}
|
|
status.color = color;
|
|
}
|
|
private void SetStatusImageResize()
|
|
{
|
|
var newWidth = status.text.Length * fontSize + blankSize;
|
|
var height = Image_Status.rectTransform.sizeDelta.y;
|
|
|
|
Image_Status.rectTransform.sizeDelta = new Vector2(newWidth, height);
|
|
}
|
|
public void SetBackgroundColor(Color color)
|
|
{
|
|
background.color = color;
|
|
}
|
|
}
|
|
}
|
|
|