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> 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); } List firstFloorInfoList = firstFloorInfo.Values.ToList(); List secondFloorInfoList = secondFloorInfo.Values.ToList(); productionStatusInfos.Clear(); productionStatusInfos.AddRange(firstFloorInfoList); productionStatusInfos.AddRange(secondFloorInfoList); onFirstFloorInfo?.Invoke(firstFloorInfoList); onSecondFloorInfo?.Invoke(secondFloorInfoList); onTotalFloorInfo?.Invoke(firstFloorInfoList, secondFloorInfoList); } 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; } } } } } }