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

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;
}
}
}