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 productionStatusInfos = new(); public Dictionary firstFloorInfo = new Dictionary(); public Dictionary secondFloorInfo = new Dictionary(); public Action> onFirstFloorInfo; public Action> onSecondFloorInfo; public Action, List> onTotalFloorInfo; public Action> onFinalInspectionData; public Action> onWorkShopInfo; public override void AfterAwake() { building = FindSingle(); } public void SetWorkProgressStatus(List workShopInfos) { onWorkShopInfo?.Invoke(workShopInfos); } public void SetFloorProductionStatus(List 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 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; } } } } } }