public static List <TimingPoint> TimingMarkListToTimingPointList(ObservableCollection <TimingMark> mark, out int preview, out List <Bookmark> bookmarks)
        {
            var result = new List <TimingPoint>();

            bookmarks = new List <Bookmark>();
            preview   = -1;

            TimingMark prevMark = null;

            foreach (var cur in mark)
            {
                if (cur.Preview)
                {
                    preview = cur.Offset;
                }
                if (cur.BookMarkChange)
                {
                    bookmarks.Add(new Bookmark(cur.Offset, cur.Bookmark));
                }

                if (cur.MeasureChange || cur.SpeedChange || cur.HitSoundChange)
                {
                    if (prevMark == null || Math.Abs(cur.Bpm - prevMark.Bpm) > 0.01)
                    {
                        result.Add(new TimingPoint
                        {
                            Offset      = cur.Offset,
                            MsPerBeat   = BpmConverter.BpmToMilliseconds(cur.Bpm, 1),
                            Meter       = cur.Measure,
                            SampleSet   = (int)cur.HitSound + 1,
                            SampleIndex = 0,
                            Volume      = cur.Volume,
                            Inherited   = true,
                            Kiai        = cur.Kiai
                        });
                    }
                    if (cur.SpeedRate != 100 || !cur.SpeedChange)
                    {
                        result.Add(new TimingPoint
                        {
                            Offset      = cur.Offset,
                            MsPerBeat   = (double)-10000 / cur.SpeedRate,
                            Meter       = cur.Measure,
                            SampleSet   = (int)cur.HitSound + 1,
                            SampleIndex = 0,
                            Volume      = cur.Volume,
                            Inherited   = false,
                            Kiai        = cur.Kiai
                        });
                    }
                }

                prevMark = cur;
            }

            return(result);
        }
Exemple #2
0
        public void HandleEvent(CurrentTimingChangedEvent e)
        {
            var marks = ((MainWindowViewModel)DataContext).TimingMarks;

            LineCanvas.Children.Clear();
            foreach (var item in marks)
            {
                AddLine(item.Offset);
            }

            if (marks.Count == 0)
            {
                NewBaseCheckBox.IsHitTestVisible = true;
            }
            if (marks.Count == 1)
            {
                NewBaseCheckBox.IsChecked        = true;
                NewBaseCheckBox.IsHitTestVisible = false;
            }
            else
            {
                //  Find previous TimingMark
                TimingMark prevMark = null;
                foreach (var timing in marks)
                {
                    if (e.Offset > timing.Offset)
                    {
                        prevMark = timing;
                    }
                }

                if (prevMark == null)
                {
                    prevMark = marks.First();
                }

                if (Math.Abs(prevMark.Bpm - e.Bpm) < 0.001)
                {
                    NewBaseCheckBox.IsHitTestVisible = true;
                }
                else
                {
                    NewBaseCheckBox.IsChecked        = true;
                    NewBaseCheckBox.IsHitTestVisible = false;
                }
            }
        }
Exemple #3
0
        public void HandleEvent(CurPositionEvent e)
        {
            HeaderTimeline.CurrentValue = e.CurPosition;

            var        dataContext = (MainWindowViewModel)DataContext;
            TimingMark prevMark    = null;

            foreach (var mark in dataContext.TimingMarks)
            {
                if (mark.Offset > e.CurPosition)
                {
                    dataContext.CurrentTiming = prevMark ?? dataContext.TimingMarks[0];
                    break;
                }

                prevMark = mark;
            }
        }