/// <summary> /// NavigationToNext /// </summary> /// <param name="karaokeField"></param> public static void NavigationToNext(this IAmKaraokeField karaokeField) { var nowObjectIndex = karaokeField.FindObjectIndexByCurrentTime(); var list = karaokeField.GetListHitObjects(); if (nowObjectIndex < list.Count - 2) { karaokeField.NavigateToTime(list[nowObjectIndex + 2].StartTime - PrepareTime); } }
/// <summary> /// NavigationToPrevious /// </summary> /// <param name="karaokeField"></param> public static void NavigationToPrevious(this IAmKaraokeField karaokeField) { var nowObjectIndex = karaokeField.FindObjectIndexByCurrentTime(); if (nowObjectIndex > 1) { var list = karaokeField.GetListHitObjects(); karaokeField.NavigateToTime(list[nowObjectIndex - 1].StartTime - PrepareTime); } }
/// <summary> /// FindObjectByCurrentTime /// </summary> /// <param name="karaokeField"></param> /// <returns></returns> public static HitObject FindObjectByCurrentTime(this IAmKaraokeField karaokeField) { var currentTime = karaokeField.GetCurrentTime(); var listObjects = karaokeField.GetListHitObjects(); for (var i = 0; i < listObjects.Count; i++) { if (listObjects[i].StartTime >= currentTime + PrepareTime) { if (i == 0) { return(null); } return(listObjects[i - 1]); } } return(null); }
/// <summary> /// FindObjectIndexByCurrentTime /// </summary> /// <param name="karaokeField"></param> /// <returns></returns> public static int FindObjectIndexByCurrentTime(this IAmKaraokeField karaokeField) { var hitObject = karaokeField.FindObjectByCurrentTime(); if (hitObject == null) { return(-1); } var listObjects = karaokeField.GetListHitObjects(); for (var i = 0; i < listObjects.Count; i++) { if (listObjects[i] == hitObject) { return(i); } } //404 return(-1); }
/// <summary> /// Last object's time /// </summary> /// <param name="karaokeField"></param> /// <returns></returns> public static double LastObjectTime(this IAmKaraokeField karaokeField) { var hitObjects = karaokeField.GetListHitObjects(); return(((hitObjects.Last() as IHasEndTime)?.EndTime ?? hitObjects.Last().StartTime) + 1); }