예제 #1
0
        private void RefreshProgressBar(Progress.Item[] progressItems)
        {
            var taskCount = Progress.GetRunningProgressCount();

            if (taskCount == 0)
            {
                m_LastProgressId  = -1;
                m_LastElapsedTime = 0f;
                m_CurrentProgressNotResponding  = false;
                m_ProgressStatus.text           = String.Empty;
                m_ProgressPercentageStatus.text = String.Empty;
            }
            else
            {
                var currentItem = progressItems[0];
                if (!String.IsNullOrEmpty(currentItem.description))
                {
                    m_ProgressStatus.tooltip = currentItem.name + "\r\n" + currentItem.description;
                }
                m_ProgressPercentageStatus.text = Progress.globalProgress.ToString("P", percentageFormat);

                var remainingTimeText = "";
                if (Progress.EnumerateItems().Any(item => item.timeDisplayMode == Progress.TimeDisplayMode.ShowRemainingTime) && Progress.EnumerateItems().All(item => !item.indefinite) && Progress.globalRemainingTime.TotalSeconds > 0)
                {
                    remainingTimeText = $" [{Progress.globalRemainingTime:g}]";
                }

                if (taskCount > 1)
                {
                    m_ProgressStatus.text = $"Multiple tasks ({taskCount}){remainingTimeText}";
                }
                else
                {
                    m_ProgressStatus.text = $"{currentItem.name}{remainingTimeText}";
                }


                m_LastProgressId = currentItem.id;
                m_CurrentProgressNotResponding = true;
                for (int i = 0; i < progressItems.Length; ++i)
                {
                    if (!progressItems[i].responding)
                    {
                        m_LastProgressId = progressItems[i].id;
                        continue;
                    }
                    m_CurrentProgressNotResponding = false;
                    break;
                }

                m_LastElapsedTime = Mathf.Max(m_LastElapsedTime, currentItem.elapsedTime);
                if (m_CurrentProgressNotResponding)
                {
                    m_LastElapsedTime = float.MaxValue;
                }
            }
            RepaintProgress(progressItems);
        }