public bool Add(string define, HighSpeedTimeLineBook timeLineBook, int susTicksPerBeat) { Valid = false; if (define == null || timeLineBook == null) { return(false); } if (define.Length == 0) { Valid = true; return(true); } Match timeLinesMatch = rgxTimeLine.Match(define); if (timeLinesMatch.Success) { CaptureCollection timeLinesCollection = timeLinesMatch.Groups[1].Captures; for (int i = 0; i < timeLinesCollection.Count; ++i) { Match timeLineMatch = rgxTimeLineBase.Match(timeLinesCollection[i].ToString()); if (timeLineMatch.Success) { if (timeLineMatch.Groups[1].ToString() == "inherit") { int defNumber = MyUtil.ToIntAs36(timeLineMatch.Groups[2].ToString()); if (timeLineBook.ContainsKey(defNumber)) { if (!Add(timeLineBook.Get(defNumber))) { return(false); } } else { /* 未定義ハイスピ指定の複製は困ります */ return(false); } continue; } int measure = MyUtil.ToInt(timeLineMatch.Groups[3].ToString()); int tick = MyUtil.ToInt(timeLineMatch.Groups[4].ToString()); double m4pleTicksPerBeat = 48.0; /* measure,tick管理クソみたいになってるけどユルシテ */ CaptureCollection propsCollection = timeLineMatch.Groups[5].Captures; float hsValue = 1; HighSpeed.VisibleState visibleState = HighSpeed.VisibleState.Visible; for (int j = 0; j < propsCollection.Count; ++j) { string value = propsCollection[j].ToString(); if (value == "i" || value == "invisible") { visibleState = HighSpeed.VisibleState.Invisible; } else if (value == "v" || value == "visible") { visibleState = HighSpeed.VisibleState.Invisible; } else { hsValue = (float)MyUtil.ToDouble(value); } } HighSpeed hs = new HighSpeed(new Position(measure, (int)(tick * m4pleTicksPerBeat / susTicksPerBeat)), new PointF(), hsValue, -1) { Visible = visibleState }; Add(hs); } } Valid = true; return(true); } return(false); }
public HighSpeedTimeLine(string define, HighSpeedTimeLineBook timeLineBook, int ticksPerBeat) { Add(define, timeLineBook, ticksPerBeat); }