VisualElement GetTableMissionItemVE(TableMissionItem data) { VisualElement ve = new VisualElement(); ve.AddToClassList("progressItem"); Label label = new Label("-"); label.AddToClassList("label"); ProgressBar progressBar = new ProgressBar() { title = "0%" }; progressBar.AddToClassList("progress"); var p = progressBar.Q(className: "unity-progress-bar__progress"); VisualElement barVe = new VisualElement(); barVe.AddToClassList("progressBar"); p.Add(barVe); Button btn = new Button(() => RemoveMission(data)) { text = "-" }; btn.AddToClassList("btn"); data.label = label; data.bar = progressBar; data.container = ve; ve.Add(label); ve.Add(progressBar); ve.Add(btn); return(ve); void RemoveMission(TableMissionItem d) { missionList.Remove(d); FreshMissionList(); } }
void UpdateTableMissionItem(TableMissionItem item) { item.bar.value = item.progress * 100F; item.bar.title = item.progress.ToString("##0.0%"); if (item.GroupCount <= 1) { item.label.text = item.title; } else { item.label.text = $"{item.title} ({item.currentGroupIndex + 1}/{item.GroupCount})"; } item.bar.style.opacity = new StyleFloat(IsDone() == false ? 1F : 0.5F); bool IsDone() { return(item.currentGroupIndex == item.GroupCount - 1 && item.progress >= 1F); } }
IEnumerator UpdateIEnumerator() { isStop = false; SetIndex(0); isExecuting = true; missionList = missionList.Where(item => item.progress < 1F).ToList(); FreshMissionList(); yield return(null); Debug.Log("============== Table =============="); // while (currentMissionIndex < missionList.Count) { double t = EditorApplication.timeSinceStartup; TableMissionItem currentMissionItem = missionList[currentMissionIndex]; PinFile(currentMissionItem.path); //建Table DesignDataAgent designDataAgent = null; List <Table> tables; using (StreamReader sr = new StreamReader(currentMissionItem.path)) { tables = Table.CreateTables(sr, Table.ParseType.tsv); } for (int i = 0; i < tables.Count; i++) { bool result = true; currentMissionItem.currentGroupIndex = i; currentMissionItem.GroupCount = tables.Count; currentMissionItem.progress = 0F; Table table = tables[i]; if (tables.Count > 1 && i < tables.Count) { Debug.Log($"============ Group ({i + 1}/{tables.Count}) ============"); } designDataAgent = new DesignDataAgent(table); if (table.tableVersion == DesignDataAgent.lastestVersion) { //最新版本 } else if (table.tableVersion >= DesignDataAgent.minSupportVersion) { EditorUtility.DisplayDialog("表格版本過舊", $"表格 {table.GetDefineValue("title")} 版本過舊,\n將嘗試進行相容性執行。\n\n請盡速將此表格升級版本。", "OK"); } else { EditorUtility.DisplayDialog("表格版本無法執行", $"表格 {table.GetDefineValue("title")} 版本過舊,\n且無法進行相容性執行。\n\n請盡速將此表格升級版本。", "OK"); isExecuting = false; //SystemSounds.Exclamation.Play(); Debug.Log("=============== End ==============="); Debug.LogError("表格版本過舊無法執行"); yield break; } currentExecuteIEnumerator = designDataAgent.Execute(); btnBreakProgress.style.display = new StyleEnum <DisplayStyle>(DisplayStyle.Flex); btnExecute.style.display = new StyleEnum <DisplayStyle>(DisplayStyle.None); double tStart = EditorApplication.timeSinceStartup; while (result == true) { if (isStop == true) { yield break; } currentMissionItem.progress = designDataAgent.executeProgress; UpdateTableMissionItem(currentMissionItem); #if (TABLE_PARSE_DEBUG) result = currentExecuteIEnumerator.MoveNext(); #else try { result = currentExecuteIEnumerator.MoveNext(); } catch (System.Exception e) { //失敗時直接結束 result = false; throw e; } #endif //如果操作間隔 > 1frame最長時間,則跳下一個 if (EditorApplication.timeSinceStartup - tStart > frameWaitingTimeMax) { tStart = EditorApplication.timeSinceStartup; yield return(null); } } } SetIndex(currentMissionIndex + 1); Debug.Log($"Spent {EditorApplication.timeSinceStartup - t:#.0}s"); } isExecuting = false; // if (IsAllMissionExecuteFinished() == true) { Debug.Log("=============== End ==============="); //SystemSounds.Beep.Play(); } else { Debug.LogError("Error"); //SystemSounds.Exclamation.Play(); } UnbindUpdate(); SetActive(btnBreakProgress, false); SetActive(btnExecute, true); }