public AddStagePage(TimeSet timeSet)
 {
     Title = "新增普通阶段";
     BackgroundColor = Color.FromHex("#eee");
     TimeSet = timeSet;
     ViewModel = new Stage();
     BindingContext = ViewModel;
     InitView();
 }
 public AddFinalStagePage(TimeSet timeSet)
 {
     Title = "新增冲刺阶段";
     BackgroundColor = Color.FromHex("#eee");
     TimeSet = timeSet;
     ViewModel = new Stage()
     {
         VoiceInterval = 1
     };
     BindingContext = ViewModel;
     InitView();
 }
 public EditStagePage(TimeSet timeSet, Stage stage)
 {
     Title = "修改普通阶段";
     BackgroundColor = Color.FromHex("#eee");
     TimeSet = timeSet;
     ViewModel = stage;
     BindingContext = ViewModel;
     var ts = TimeSpan.FromSeconds(ViewModel.StagePoint);
     Hours = ts.Hours;
     Minutes = ts.Minutes;
     Seconds = ts.Seconds;
     InitView();
 }
 public StageChangedEventArgs(Stage currentStage)
 {
     CurrentStage = currentStage;
 }
 void StartCountDown()
 {
     _current = stages.LastOrDefault(w => w.StagePoint >= currentSecond);
     if (StageChanged != null) StageChanged(TimeSet, new StageChangedEventArgs(_current));
     if (_current != null)
     {
         _stageInterval = _current.VoiceInterval;
         var index = stages.IndexOf(_current);
         if (index != -1 && index + 1 < stages.Count)
         {
             _next = stages.ElementAt(index + 1);
         }
     }
     else
     {
         _next = stages[0];
     }
     _stageTimer.Enabled = true;
     _stageTimer.Start();
     _heartBeatTimer.Enabled = true;
     _heartBeatTimer.Start();
 }
        void StageCountDown(DateTime time)
        {
            lock (locker)
            {
                var second = currentSecond;
                if (controlStop || controlPause)
                {
                    _stageTimer.Stop();
                    return;
                }
                if (_current != null)
                {
                    var interval = _current.VoiceInterval;
                    if (second == _current.StagePoint)
                    {
                        if (Speak != null)
                        {
                            var text = second.ToString();
                            var engin = TimeSet.VoiceEngine;
                            Speak.Invoke(_current, new SpeakEventArgs(text, engin, second, interval));
                        }
                        _stageCountDown = 0;
                    }
                    else
                    {
                        _stageCountDown++;
                        if (_stageCountDown == _stageInterval)
                        {
                            if (Speak != null)
                            {
                                var text = second.ToString();
                                var engin = TimeSet.VoiceEngine;
                                Speak.Invoke(_current, new SpeakEventArgs(text, engin, second, interval));
                            }
                            _stageCountDown = 0;
                        }
                    }

                    //else
                    //{
                    //    stageCountDown++;
                    //}

                }
                if (CurrentSecondChanged != null)
                    CurrentSecondChanged(this, new SecondChangedEvenArgs(second));
                currentSecond--;
                if (currentSecond < 0)
                {
                    controlStop = true;
                    _stageTimer.Stop();
                    currentSecond = TimeSet.Duration;
                    return;
                }
                if (_next != null)
                {
                    if (currentSecond == _next.StagePoint)
                    {

                        _current = _next;
                        if (StageChanged != null)
                        {
                            StageChanged(TimeSet, new StageChangedEventArgs(_current));
                        }
                        _stageInterval = _current.VoiceInterval;
                        _stageCountDown = 0;
                        var index = stages.IndexOf(_current);
                        if (index != -1 && index + 1 < stages.Count)
                        {
                            _next = stages.ElementAt(index + 1);
                        }
                        else
                        {
                            _next = null;
                        }
                    }
                }
                //_Position--;

            }
        }
 public void Dispose()
 {
     _heartBeatTimer.Dispose();
     _readyCountDownTimer.Dispose();
     _stageTimer.Dispose();
     _heartBeatTimer = null;
     _readyCountDownTimer = null;
     _stageTimer = null;
     _current = null;
     _next = null;
 }
 public void RemoveStage(Stage stage)
 {
     //Stages().Remove(stage);
     ObservableStages.Remove(stage);
 }
 //public List<Stage> Stages()
 //{
 //    if (!stageLoad)
 //    {
 //        //_Stage = StagesDataString.Deserialize<List<Stage>>();
 //        _ObservableStages = StagesDataString.Deserialize<ObservableCollection<Stage>>();
 //        stageLoad = true;
 //    }
 //    if (_ObservableStages == null)
 //    {
 //        _ObservableStages = new ObservableCollection<Stage>();
 //    }
 //    return _ObservableStages;
 //}
 public void AddStage(Stage stage)
 {
     //Stages().Add(stage);
     if (stageLoad)
         _ObservableStages.Add(stage);
     else
     {
         ObservableStages.Add(stage);
     }
     _ObservableStages.Sort(Comparer<Stage>.Create((x, y) => y.StagePoint - x.StagePoint));
 }