/// <summary> /// Performs update replay playback. /// </summary> private void UpdateJudgements(ReplayFrame frame) { var views = HitObjectHolder.HitObjectViews; foreach (var pair in frame.DraggerHoldFlags) { var dragger = views[pair.Key] as DraggerView; if (dragger != null) { dragger.StartCircle.SetHold(pair.Value, frame.Time); } } foreach (var judgement in frame.Judgements) { // Find the target hit object from path. var path = judgement.HitObjectIndexPath; BaseHitObjectView hitObjectView = views[path[0]]; for (int i = 1; i < path.Count; i++) { int node = path[i]; hitObjectView = hitObjectView.BaseNestedObjects[node]; } AddJudgement( hitObjectView.SetResult(judgement.HitResult, judgement.HitOffset) ); } }
/// <summary> /// Records the judgement result for the specified hit object. /// </summary> public void RecordJudgement(BaseHitObjectView hitObjectView, JudgementResult judgement, bool isPassive, KeyCode keyCode = KeyCode.None) { if (nextFrame != null && judgement != null && hitObjectView != null && judgement.HitResult != HitResultType.None) { nextFrame.AddJudgement((j) => { j.SetFromJudgementResult(judgement); j.IsPassive = isPassive; j.InputKey = keyCode; while (hitObjectView != null) { j.HitObjectIndexPath.Insert(0, hitObjectView.ObjectIndex); hitObjectView = hitObjectView.BaseParentView; } }); } }