Skip to content

Commit 35dea88

Browse files
Insert CalculateScore from Copilot suggestions. Add few docs to explain the logic within VirtualReplayPlayer.cs
1 parent 2d6dd90 commit 35dea88

File tree

1 file changed

+9
-1
lines changed

1 file changed

+9
-1
lines changed

Quaver.API/Replays/Virtual/VirtualReplayPlayer.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,16 +227,22 @@ private void HandleKeyPressesInFrame()
227227
.Concat(previousFramePressed.Except(currentFramePressed))
228228
.ToList();
229229

230+
// Handle mines that were hit between frames.
231+
// The previous frame's pressed keys are held up until now, so [previousFrameTime..Time)
232+
// is the interval to check for mine hits.
230233
foreach (var lane in previousFramePressed)
231234
{
232235
foreach (var mine in ActiveMines)
233236
{
237+
// Check for any mines that were hit between the previous and the current frame
234238
var endTime = mine.IsLongNote ? mine.EndTime : mine.StartTime;
235239
if (mine.Lane == lane + 1
236240
&& endTime + ScoreProcessor.JudgementWindow[Judgement.Marv] > previousFrameTime
237241
&& Time >= mine.StartTime - ScoreProcessor.JudgementWindow[Judgement.Marv])
238242
{
239243
// Calculate the hit difference.
244+
// If this lane had been pressed before the mine appeared, give maximum early hit window
245+
// If pressed somewhere within the mine's hit window, accurate hit error can be given
240246
var hitDifference =
241247
mine.StartTime - ScoreProcessor.JudgementWindow[Judgement.Marv] > previousFrameTime
242248
? (int)ScoreProcessor.JudgementWindow[Judgement.Marv]
@@ -246,6 +252,7 @@ private void HandleKeyPressesInFrame()
246252
var stat = new HitStat(HitStatType.Miss, KeyPressType.Press, mine, Time, Judgement.Miss, hitDifference,
247253
ScoreProcessor.Accuracy, ScoreProcessor.Health);
248254

255+
ScoreProcessor.CalculateScore(stat);
249256
ScoreProcessor.Stats.Add(stat);
250257

251258
// Object needs to be removed from ActiveObjects.
@@ -430,16 +437,17 @@ private void HandleMissedHitObjects()
430437
}
431438
}
432439
// Handle missed mines.
440+
// 'Missed' as in the mines were not triggered, meaning a marvelous judgement should be given.
433441
foreach (var hitObject in ActiveMines)
434442
{
435443
var endTime = hitObject.IsLongNote ? hitObject.EndTime : hitObject.StartTime;
436444
if (Time > endTime + ScoreProcessor.JudgementWindow[Judgement.Marv])
437445
{
438446
// Create a new HitStat to add to the ScoreProcessor.
447+
// Award a Marvelous for successfully avoiding the mine.
439448
var stat = new HitStat(HitStatType.Hit, KeyPressType.None, hitObject, hitObject.StartTime, Judgement.Marv, 0,
440449
ScoreProcessor.Accuracy, ScoreProcessor.Health);
441450

442-
// Add a miss to the score.
443451
ScoreProcessor.CalculateScore(stat);
444452

445453
ScoreProcessor.Stats.Add(stat);

0 commit comments

Comments
 (0)