IEnumerator TimeRoutine()
        {
            while (Hour < MaxHour)
            {
                if (timeScale == 0f)
                {
                    yield return(new WaitForTimeUnpaused());
                }

                var timeStep = 1f / (TimeSpeed * timeScale);
                yield return(new WaitForTimeElapsed(timeStep));

                Minute += 1;
                MinuteTicked?.Invoke(this, new TimeEventArgs(Minute, Hour, Year));

                var hourChanged = Minute >= 60;
                Hour += hourChanged ? 1 : 0;

                Minute %= 60;

                if (hourChanged)
                {
                    if (Hour >= MorningHour && Hour <= EveningHour)
                    {
                        WorkingHourTicked?.Invoke(this,
                                                  new TimeEventArgs(Minute, Hour, Year));
                    }
                }

                TimeChanged?.Invoke(this, new TimeEventArgs(Minute, Hour, Year));

                if (Hour == MorningHour && Minute == 0)
                {
                    Morning?.Invoke(this, EventArgs.Empty);
                }
                if (Hour == EveningHour && Minute == 0)
                {
                    Evening?.Invoke(this, EventArgs.Empty);
                }
            }

            Year  += 1;
            Hour   = MinHour;
            Minute = 0;

            TimeChanged?.Invoke(this, new TimeEventArgs(Minute, Hour, Year));
            YearTicked?.Invoke(this, new TimeEventArgs(Minute, Hour, Year));

            StopTime();
        }
 void Start()
 {
     Initialized?.Invoke(this, new InitializedEventArgs());
     StartTime();
     YearTicked?.Invoke(this, new TimeEventArgs(Minute, Hour, Year));
 }