public static void UpdatePoints(float Time) { bool DEBUG_HIT = false; CSong song = _GameMode.GetSong(); if (song == null) { return; } _Beat = GetBeatFromTime(Time, song.BPM, song.Gap); _CurrentBeat = (int)Math.Floor(_Beat); _MidBeatD = -0.5f + GetBeatFromTime(Time, song.BPM, song.Gap + CConfig.MicDelay / 1000f); _CurrentBeatD = (int)Math.Floor(_MidBeatD); for (int p = 0; p < _NumPlayer; p++) { CSound.AnalyzeBuffer(p); } if (_OldBeatD == _CurrentBeatD) { return; } for (int p = 0; p < _NumPlayer; p++) { for (int beat = _OldBeatD + 1; beat <= _CurrentBeatD; beat++) { CLine[] lines = song.Notes.GetLines(_Player[p].LineNr).Line; int Line = -1; for (int j = 0; j < lines.Length; j++) { if (beat >= lines[j].StartBeat && beat <= lines[j].EndBeat) { Line = j; break; } } if (Line >= 0) { if (Line != _Player[p].CurrentLine) { _Player[p].CurrentNote = -1; } _Player[p].CurrentLine = Line; while (_Player[p].SingLine.Count <= Line) { _Player[p].SingLine.Add(new CLine()); } CNote[] notes = lines[Line].Notes; int Note = -1; for (int j = 0; j < notes.Length; j++) { if (beat >= notes[j].StartBeat && beat <= notes[j].EndBeat) { Note = j; break; } } if (Note >= 0) { _Player[p].CurrentNote = Note; if (Line == lines.Length - 1) { if (Note == lines[Line].NoteCount - 1) { if (notes[Note].EndBeat == beat) { _Player[p].SongFinished = true; } } } if (notes[Note].PointsForBeat > 0 && (CSound.RecordToneValid(p) || DEBUG_HIT)) { int Tone = notes[Note].Tone; int TonePlayer = CSound.RecordGetTone(p); while (TonePlayer - Tone > 6) { TonePlayer -= 12; } while (TonePlayer - Tone < -6) { TonePlayer += 12; } if (DEBUG_HIT) { TonePlayer = Tone; } _Player[p].NoteDiff = Math.Abs(Tone - TonePlayer); if (_Player[p].NoteDiff <= (2 - (int)_Player[p].Difficulty)) { // valid CSound.RecordSetTone(p, Tone); _Player[p].Points += (CSettings.MaxScore - CSettings.LinebonusScore) * (double)notes[Note].PointsForBeat / (double)song.Notes.GetLines(_Player[p].LineNr).Points; // update player notes (sung notes) if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (notes[Note].StartBeat == beat || nt.EndBeat + 1 != beat || nt.Tone != Tone) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } else { _Player[p].SingLine[Line].IncLastNoteLength(); } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, Tone, String.Empty, true, notes[Note].NoteType)); } _Player[p].SingLine[Line].LastNote.IsPerfect(notes[Note]); _Player[p].SingLine[Line].IsPerfect(lines[Line]); if (_Player[p].SingLine[Line].PerfectLine) { _Player[p].Points += CSettings.LinebonusScore * (double)lines[Line].Points / (double)song.Notes.GetPoints(_Player[p].LineNr); } } else { if (_Player[p].SingLine[Line].NoteCount > 0) { CNote nt = _Player[p].SingLine[Line].LastNote; if (nt.EndBeat + 1 != beat || nt.Hit) { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } else { if (nt.Tone == TonePlayer && nt.EndBeat + 1 == beat) { _Player[p].SingLine[Line].IncLastNoteLength(); } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } } } else { _Player[p].SingLine[Line].AddNote(new CNote(beat, 1, TonePlayer, String.Empty, false, notes[Note].NoteType)); } } } } } } } _OldBeatD = _CurrentBeatD; }