public void AddToHits(ScoreVelo scoreVelo) { lock (CountLock) { switch (scoreVelo) { case ScoreVelo.Miss: Misses++; break; case ScoreVelo.Bad: Bads++; break; case ScoreVelo.OK: OKs++; break; case ScoreVelo.Good: Goods++; break; case ScoreVelo.Great: Greats++; break; case ScoreVelo.Perfect: Perfects++; break; } } }
public void SetupBeat() { CurrentBeat = UpcomingBeats.First(); UpcomingBeats.Remove(CurrentBeat); _timing = Timing.Early; _currentVelo = ScoreVelo.Bad; LightPad((int)_currentVelo); }
public void HitRegHandler(ScoreVelo score) { Sound copySound = null; var randX = Rand.Int(-50, 50); String sprite = String.Empty; int width = 0, height = 0; switch (score) { case ScoreVelo.Perfect: sprite = @"..\..\Sprites\Perfect.png"; width = 458; height = 89; copySound = PerfectSound; break; case ScoreVelo.Great: sprite = @"..\..\Sprites\Great.png"; width = 345; height = 89; copySound = GreatSound; break; case ScoreVelo.Good: sprite = @"..\..\Sprites\Good.png"; width = 284; height = 89; copySound = GoodSound; break; case ScoreVelo.OK: sprite = @"..\..\Sprites\OK.png"; width = 154; height = 89; copySound = OKSound; break; case ScoreVelo.Bad: sprite = @"..\..\Sprites\Bad.png"; width = 214; height = 89; copySound = BadSound; break; case ScoreVelo.Miss: sprite = @"..\..\Sprites\Miss.png"; width = 247; height = 89; copySound = MissSound; break; } //TODO: need to change this to use a cache created at song start to help the framerate out Add(new Particle(Game.Instance.HalfWidth + randX, Game.Instance.HalfHeight, sprite, width, height) { Alpha = 1, FinalAlpha = 0, FinalY = 0, LifeSpan = 120 }); if (copySound != null) { //cache sounds so the garbage collector doesn't eat them soundCache[i] = new Sound(copySound); soundCache[i].Play(); i++; if (i > SOUND_LIMIT - 1) { i = 0; } } }
public void UpdateBeat() { if (CurrentBeat != null) { var time = _controller.Elapsed; if (_timing == Timing.Early && CurrentBeat.HitTime < time) { _timing = Timing.Late; } if (_timing == Timing.Early) { //each stage needs to display for 25ms, or 250 (the separation) //perfect should be 125ms each side of the actual time, so: //Great = hittime +- 375 if (time < CurrentBeat.HitTime - (_controller.HalfSep + _controller.Separation * 4)) { _currentVelo = ScoreVelo.Bad; } else if (time < CurrentBeat.HitTime - (_controller.HalfSep + _controller.Separation * 3)) { _currentVelo = ScoreVelo.OK; } else if (time < CurrentBeat.HitTime - (_controller.HalfSep + _controller.Separation * 2)) { _currentVelo = ScoreVelo.Good; } else if (time < CurrentBeat.HitTime - (_controller.HalfSep + _controller.Separation)) { _currentVelo = ScoreVelo.Great; } else if (time < CurrentBeat.HitTime - _controller.HalfSep) { _currentVelo = ScoreVelo.Perfect; } } else { if (time > CurrentBeat.HitTime + _controller.Separation * 5) { _currentVelo = ScoreVelo.Miss; ClearPad(); PastBeats.Add(CurrentBeat); _controller.UpdateCombo(ComboChange.Break); _controller.AddToHits(_currentVelo); _controller.OnHitReg?.Invoke(_currentVelo); CurrentBeat = null; } else if (time > CurrentBeat.HitTime + (_controller.HalfSep + _controller.Separation * 4)) { _currentVelo = ScoreVelo.Bad; } else if (time > CurrentBeat.HitTime + (_controller.HalfSep + _controller.Separation * 3)) { _currentVelo = ScoreVelo.OK; } else if (time > CurrentBeat.HitTime + (_controller.HalfSep + _controller.Separation * 2)) { _currentVelo = ScoreVelo.Good; } else if (time > CurrentBeat.HitTime + (_controller.HalfSep + _controller.Separation)) { _currentVelo = ScoreVelo.Great; } } LightPad((int)_currentVelo); } }