Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
 public void SetupBeat()
 {
     CurrentBeat = UpcomingBeats.First();
     UpcomingBeats.Remove(CurrentBeat);
     _timing      = Timing.Early;
     _currentVelo = ScoreVelo.Bad;
     LightPad((int)_currentVelo);
 }
Beispiel #3
0
        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;
                }
            }
        }
Beispiel #4
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);
     }
 }