Files
ChunilENG/Assets/Scripts/ProductionStatusManager.cs

80 lines
2.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using WI;
using static MQTT;
namespace CHN
{
public class ProductionStatusManager : MonoBehaviour, ISingle
{
public Building building;
public List<CompleteInfo> productionStatusInfos = new();
public Dictionary<string,CompleteInfo> firstFloorInfo = new Dictionary<string, CompleteInfo>();
public Dictionary<string, CompleteInfo> secondFloorInfo = new Dictionary<string, CompleteInfo>();
public Action<List<CompleteInfo>> onFirstFloorInfo;
public Action<List<CompleteInfo>> onSecondFloorInfo;
public Action<List<CompleteInfo>, List<CompleteInfo>> onTotalFloorInfo;
public Action<List<CompleteInfo>> onFinalInspectionData;
public Action<List<WorkShopInfo>> onWorkShopInfo;
public override void AfterAwake()
{
building = FindSingle<Building>();
}
public void SetWorkProgressStatus(List<WorkShopInfo> workShopInfos)
{
onWorkShopInfo?.Invoke(workShopInfos);
}
public void SetFloorProductionStatus(List<CompleteInfo> completeInfos)
{
productionStatusInfos = completeInfos;
foreach (var completeInfo in completeInfos)
{
SetFloorInfo(building.floors[0], completeInfo, firstFloorInfo);
SetFloorInfo(building.floors[1], completeInfo, secondFloorInfo);
}
var firstFloorInfos = firstFloorInfo.Values.ToList();
var secondFloorInfos = secondFloorInfo.Values.ToList();
var finalInspectionInfos = completeInfos.Where(i => i.wccd == "W30").ToList();
productionStatusInfos.Clear();
productionStatusInfos.AddRange(firstFloorInfos);
productionStatusInfos.AddRange(secondFloorInfos);
onFirstFloorInfo?.Invoke(firstFloorInfos);
onSecondFloorInfo?.Invoke(secondFloorInfos);
onTotalFloorInfo?.Invoke(firstFloorInfos, secondFloorInfos);
onFinalInspectionData?.Invoke(finalInspectionInfos);
}
public void SetFloorInfo(Floor floor, CompleteInfo completeInfo, Dictionary<string, CompleteInfo> floorInfo)
{
foreach (var machine in floor.machines)
{
if (machine.code == completeInfo.workcd)
{
if (!floorInfo.ContainsKey(completeInfo.workcd))
{
floorInfo.Add(completeInfo.workcd, completeInfo);
}
else
{
floorInfo[completeInfo.workcd] = completeInfo;
}
}
}
}
}
}