public static double GetSecAtBeat(double beat) { // Determine which BPM change we're on (if any) var evt = BpmEvents.Where(x => beat >= x.StartBeat).LastOrDefault(); if (evt == null) { evt = BpmEvents[0]; } //double curTime = 0; //if (evt.StartBeat > 0) //{ // // Add up all the time prior // for (int i = 0; i < BpmEvents.Count; i++) // { // if (BpmEvents[i].StartBeat == evt.StartBeat) // i = BpmEvents.Count; // else // curTime = BpmEvents[i + 1].StartSeconds; // } //} return(evt.StartSeconds + ((beat - evt.StartBeat) / evt.BPM * 60)); }
public static double GetDistAtBeat(double beat) { // Determine which BPM change we're on (if any) var evt = BpmEvents.Where(x => beat >= x.StartBeat).LastOrDefault(); if (evt == null) { evt = BpmEvents[0]; } double curDist = 0; if (evt.StartBeat > 0) { // Add up all the distance prior for (int i = 0; i < BpmEvents.Count; i++) { if (BpmEvents[i].StartBeat == evt.StartBeat) { i = BpmEvents.Count; } else { curDist += (NoteSpeed * GameState.ScrollSpeed * 60 / BpmEvents[i].BPM) * (BpmEvents[i + 1].StartBeat - BpmEvents[i].StartBeat); } } } return(curDist + (NoteSpeed * GameState.ScrollSpeed * 60 / evt.BPM) * (beat - evt.StartBeat)); }