/// <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)
                    );
            }
        }
예제 #2
0
 /// <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;
             }
         });
     }
 }