public void OnGUI()
        {
            // Reserve layout space for the progress bar, equal to the space for a
            // textfield:
            Rect progress_rect = GUILayoutUtility.GetRect(18, 18, "TextField");

            EditorGUI.ProgressBar(progress_rect, progress_complete_, progress_message_);
            EditorGUILayout.Space();

            if (bake_stage_ != AutomateStage.kWaitForDoneButton)
            {
                if (GUILayout.Button("Cancel"))
                {
                    if (capture_status_ != null)
                    {
                        capture_status_.CancelTask();
                    }
                }
            }

            if (bake_stage_ == AutomateStage.kWaitForDoneButton)
            {
                if (GUILayout.Button("Done"))
                {
                    bake_stage_ = AutomateStage.kComplete;
                }
            }
        }
        public void Update()
        {
            if (capture_status_ != null && capture_status_.TaskContinuing() && !UpdateAndCheckUiTimerReady())
            {
                return;
            }

            // Refresh the Editor GUI to finish the task.
            UnityEditor.EditorUtility.SetDirty(capture_notification_component_[curr_capture_]);

            if (bake_stage_ == AutomateStage.kCapture)
            {
                --capture_timer_;
                if (capture_timer_ == 0)
                {
                    capture_timer_ = kTimerExpirationsPerCapture;

                    monitored_capture_[curr_capture_].RunCapture();

                    if (monitored_capture_[curr_capture_].IsCaptureComplete() &&
                        capture_status_.TaskContinuing())
                    {
                        monitored_capture_[curr_capture_].EndCapture();
                        monitored_capture_[curr_capture_] = null;
                        if (curr_capture_ == (num_captures_ - 1))
                        {
                            Debug.Log("Finished");
                            bake_stage_ = AutomateStage.kWaitForDoneButton;
                        }
                        else
                        {
                            capture_status_.SendProgress("Beginning capture " + (curr_capture_ + 1), (curr_capture_ + 1) / num_captures_);
                            Debug.Log("Moving on to capture " + (curr_capture_ + 1));
                            curr_capture_++;
                        }
                    }
                }

                if (capture_status_ != null && !capture_status_.TaskContinuing())
                {
                    bake_stage_ = AutomateStage.kComplete;
                    if (monitored_capture_ != null)
                    {
                        for (int i = 0; i < num_captures_; i++)
                        {
                            if (monitored_capture_[i] != null)
                            {
                                monitored_capture_[i].EndCapture();
                                monitored_capture_[i] = null;
                            }
                        }
                    }
                }
            }

            // Repaint with updated progress the GUI on each wall-clock time tick.
            Repaint();
        }
 public void SetupCaptureProcess(CaptureHeadbox[] capture_notification_component,
                                 CaptureBuilder[] capture)
 {
     capture_timer_ = kTimerExpirationsPerCapture;
     bake_stage_    = AutomateStage.kCapture;
     last_time_     = Time.realtimeSinceStartup;
     capture_notification_component_ = capture_notification_component;
     num_captures_      = capture_notification_component.Length;
     monitored_capture_ = capture;
     curr_capture_      = 0;
 }