using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using WI; [Serializable] public class BarChartData { public string _time; public string itemcd; public float cycleTime; public float targetCycleTime; public float coolingTime; public float holdingPressureTime; public float weighingTime; public float etc; } public class WorkTimeManager : MonoBehaviour, ISingle { public List originDatas = new List(); public List mainChartDatas = new List(); public int targetCount; public Action> onSendChartData; public void SetWorkTimeData(WorkTimeData workTimeData) { SetBarChartData(workTimeData); } private void SetBarChartData(WorkTimeData workTimeData) { originDatas.Clear(); mainChartDatas.Clear(); foreach (var row in workTimeData.data.rows) { var data = new BarChartData(); data._time = row._time; data.itemcd = row.ITEMCD; data.cycleTime = ConvertStringToFloat(row.C045); data.targetCycleTime = ConvertStringToFloat(row.CYCLETIME); data.coolingTime = ConvertStringToFloat(row.C046); data.holdingPressureTime = ConvertStringToFloat(row.C027); data.weighingTime = ConvertStringToFloat(row.C037); data.etc = data.cycleTime - (data.coolingTime + data.holdingPressureTime + data.weighingTime); originDatas.Add(data); } mainChartDatas.AddRange(DownSampleToFixedCount(originDatas, targetCount)); onSendChartData?.Invoke(mainChartDatas); } private float ConvertStringToFloat(string stringData) { float.TryParse(stringData, out var result); return result; } private List DownSampleToFixedCount(List originDatas, int targetCount) { var sampleData = new List(); double interval = (double)originDatas.Count / targetCount; if (originDatas.Count <= targetCount || targetCount <= 0) { return originDatas; } for (int i = 0; i < targetCount; i++) { int index = (int)Math.Round(i * interval); if (index >= originDatas.Count) { index = originDatas.Count - 1; } sampleData.Add(originDatas[index]); } return sampleData; } }