Files
ChunilENG/Assets/Scripts/UI/Panel_ProductionStatus.cs

149 lines
3.8 KiB
C#

using CHN;
using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using WI;
using static MQTT;
public class Panel_ProductionStatus : PanelBase, IPopupPanel
{
TextMeshProUGUI Text_DayAndTime;
TextMeshProUGUI worknm;
TextMeshProUGUI status;
TextMeshProUGUI goalqty;
TextMeshProUGUI workqty;
TextMeshProUGUI goodqty;
TextMeshProUGUI badqty;
ProductionStatusManager productionStatusManager;
[SerializeField]
float loopTime = 3;
float waitTime;
public int productionStatusInfoNum = 0;
public bool isSelectMachine;
private int selectMachineIndex;
public float selectKeepTime = 10;
float selectWaitTime;
private bool isUpdate = true;
public override void AfterAwake()
{
productionStatusManager = FindSingle<ProductionStatusManager>();
}
private void Update()
{
UpdateDayAndTime();
if (!isUpdate)
return;
List<CompleteInfo> completeInfos = productionStatusManager.productionStatusInfos;
if (completeInfos.Count == 0)
return;
if (isSelectMachine)
{
productionStatusInfoNum = selectMachineIndex;
CompleteInfo completeInfo = completeInfos[productionStatusInfoNum];
SetPanelText(completeInfo);
}
else
{
CompleteInfo completeInfo = completeInfos[productionStatusInfoNum];
waitTime += Time.deltaTime;
if (waitTime > loopTime)
{
SetPanelText(completeInfo);
productionStatusInfoNum += 1;
if (productionStatusInfoNum >= productionStatusManager.productionStatusInfos.Count)
{
productionStatusInfoNum = 0;
}
waitTime = 0;
}
}
}
public void SetProductionStatus(Machine selectMachine)
{
var completeInfos = productionStatusManager.productionStatusInfos;
for (int i = 0; i < completeInfos.Count; i++)
{
if (completeInfos[i].workcd == selectMachine.code)
{
selectMachineIndex = i;
isSelectMachine = true;
}
}
}
public void ResetProductionStatus()
{
isSelectMachine = false;
}
void SetPanelText(CompleteInfo completeInfo)
{
worknm.SetText(completeInfo.worknm);
status.SetText(completeInfo.statusnm);
SetStatusColor(completeInfo.statusnm);
goalqty.SetText(RoundToIntData(completeInfo.goalqty));
workqty.SetText(RoundToIntData(completeInfo.workqty));
goodqty.SetText(RoundToIntData(completeInfo.goodqty));
badqty.SetText(RoundToIntData(completeInfo.badqty));
}
string RoundToIntData(string data)
{
float.TryParse(data, out var floatData);
var intData = Mathf.RoundToInt(floatData);
return intData.ToString();
}
void SetStatusColor(string stat)
{
switch (stat)
{
case "°¡µ¿Áß":
status.color = new Color(0, 1f, 0.3568628f);
break;
case "ºñ°¡µ¿":
status.color = new Color(1f, 0, 0);
break;
case "°èȹÁ¤Áö":
status.color = new Color(1f, 1f, 1f);
break;
default:
status.color = new Color(1f, 0.3411765f, 0);
break;
}
}
void UpdateDayAndTime()
{
string currentTime = DateTime.Now.ToString("yyyy.MM.dd HH:mm");
Text_DayAndTime.SetText(currentTime);
}
public void Open()
{
SetActive(true);
isUpdate = true;
}
public void Close()
{
SetActive(false);
isUpdate = false;
}
}