Как я могу приостановить / продолжить таймер в EditorWindow? - PullRequest
0 голосов
/ 26 сентября 2018
void OnGUI()
    {
        pauseCounting = GUILayout.Toggle(pauseCounting, "Pause timer");
        Timer();
    }

Тогда:

private void Timer()
    {
        if (stopCounting == false)
        {
            EditorGUILayout.LabelField("Count Each:", countTime + " Secs");

            if (waitForUI)
                timeToCount = nextCountTime - EditorApplication.timeSinceStartup;

            EditorGUILayout.LabelField("Next Count:", timeToCount.ToString() + " Sec");
            if (waitForUI == false)
            {
                timeToCount = 30;
                waitForUI = true;
            }

            this.Repaint();

            if (EditorApplication.timeSinceStartup > nextCountTime)
            {
                nextCountTime = EditorApplication.timeSinceStartup + countTime;
            }

        }
        else
        {
            EditorGUILayout.LabelField("Counting:", countTime + " Secs");
            EditorGUILayout.LabelField("Next Count:", countToSave.ToString() + " Sec");
        }
    }

Проблема в том, что я использую сейчас EditorApplication.timeSinceStartup, и если я изменю флаг stopCounting на true, тогда обратно в false он будет рассчитываться с помощью EditorApplication.timeSinceStartupи не будет продолжать с того момента, когда он был остановлен.Я хочу, чтобы, если stopCounting был true, затем false, снова продолжите время с последней паузы.

1 Ответ

0 голосов
/ 26 сентября 2018

в своем классе, добавьте поле для записи общего времени тика:

double timerRecord;

в вашем onEnable, инициализируйте его:

timerRecord = EditorApplication.timeSinceStartup;

в вашем OnGUI (), добавьте несколькологика для проверки действия «перезагрузка»:

var shouldStop = GUILayout.Toggle(stopCounting, "Pause timer");
if(!shouldStop && stopCounting)
{
    // in this case, you restarted the timer.
    timerRecord = EditorApplication.timeSinceStartup;
}
stopCounting = shouldStop;
Timer();

и, наконец, в вашем Time (), замените все «EditorApplication.timeSinceStartup» на «timerRecord», а в конце обновите значение «timerRecord »с« EditorApplication.timeSinceStartup ».

timerRecord = EditorApplication.timeSinceStartup;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...