From f5df56687b5bbfe98104cb7c4cefcface9c3425f Mon Sep 17 00:00:00 2001 From: PopSlime Date: Tue, 13 Dec 2022 10:51:05 +0800 Subject: [PATCH] Add TimeTimingModel. --- Assets/Cryville/Crtr/Chart.cs | 7 ++++++- Assets/Cryville/Crtr/Extensions/TimingModel.cs | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Assets/Cryville/Crtr/Chart.cs b/Assets/Cryville/Crtr/Chart.cs index 61f2602..df6214a 100644 --- a/Assets/Cryville/Crtr/Chart.cs +++ b/Assets/Cryville/Crtr/Chart.cs @@ -16,7 +16,12 @@ namespace Cryville.Crtr { n = _n; d = _d; } - + public BeatTime(int _n, int _d) { + b = _n / _d; + n = _n % _d; + d = _d; + } + [JsonIgnore] public int b; diff --git a/Assets/Cryville/Crtr/Extensions/TimingModel.cs b/Assets/Cryville/Crtr/Extensions/TimingModel.cs index de7332a..bd738c3 100644 --- a/Assets/Cryville/Crtr/Extensions/TimingModel.cs +++ b/Assets/Cryville/Crtr/Extensions/TimingModel.cs @@ -39,4 +39,16 @@ namespace Cryville.Crtr.Extensions { return new BeatTime(i, n, d); } } + public class TimeTimingModel : TimingModel { + public TimeTimingModel(double offset = 0) : base(offset) { } + public void ForwardTo(double t) { + if (t == Time) return; + if (BPM == 0) throw new InvalidOperationException("BPM not determined"); + BeatTime += (t - Time) * BPM / 60; + int n, d; + FractionUtils.ToFraction(BeatTime, 1f / 48 / BPM * 60, out n, out d); + FractionalBeatTime = new BeatTime(n, d); + Time = t; + } + } }