Exemplo n.º 1
0
        public void AdjustMomentum(BeatlineNoteJudgement judgement, int player)
        {
            if (judgement == BeatlineNoteJudgement.Miss)
            {
                MultiplyMomentum(0.8, player);
            }
            else if (judgement == BeatlineNoteJudgement.Fail)
            {
                MultiplyMomentum(0.7, player);
            }
            else
            {
                //Using Players[player] for Sync mode too doesn't matter, since all players will have
                //the same difficulty.
                var amount = (long)
                             (MomentumJudgementMultiplier(judgement) *
                              MomentumIncreaseByDifficulty(Players[player].PlayerOptions.PlayDifficulty));

                //Make all players share the same momentum in SYNC modes.
                if (_gameType == GameType.SYNC_PRO || _gameType == GameType.SYNC_PLUS)
                {
                    SetMomentumSync(Players[0].Momentum + amount);
                }
                else
                {
                    Players[player].Momentum += amount;
                }
            }
        }
Exemplo n.º 2
0
        private void ApplyJudgement(BeatlineNoteJudgement judgement, int player, int multiplier)
        {
            _noteJudgementSet.AwardJudgement(judgement, player, multiplier, _noteBarSet.NumberCompleted(player) + _noteBarSet.NumberReverse(player));
            _levelbarSet.AdjustMomentum(judgement, player);

            //Keep scoring sane by adding a delay to the awarding of Groove Momentum.
            //Otherwise, the last player to hit each phrase has an advantage.
            if (!Core.Cookies["CurrentGameType"].Equals(GameType.COOPERATIVE))
            {
                return;
            }

            var    thread = new Thread(AdjustGrooveMomentum);
            double mx     = _noteBarSet.NumberCompleted(player) + _noteBarSet.NumberReverse(player);

            //Ideal streaks provide bonus groove momentum (up to 2x the normal amount)
            if (judgement == BeatlineNoteJudgement.Ideal)
            {
                var mx2 = Convert.ToDouble((9 + Math.Max(1, Core.Players[player].Streak)));
                mx2 = Math.Min(2.0, mx2 / 10);
                mx *= mx2;
            }
            thread.Start(new GMAdjustment {
                Judgement = judgement, Multiplier = mx
            });
        }
Exemplo n.º 3
0
        public void RegisterHit(int player, BeatlineNoteJudgement judgement)
        {
            if ((player < 0) || (player > 3))
            {
                return;
            }
            _lastJudgements[player] = judgement;

            switch (GameType)
            {
            case GameType.SYNC_PRO:
            case GameType.SYNC_PLUS:
                if (!AllHitsReceived())
                {
                    return;
                }
                //For Sync Pro, multiply the judgement given (for scoring purposes). For Sync Plus, the number of arrows means that
                //the judgement should *not* be multiplied.
                var mx = GameType == GameType.SYNC_PRO ? PlayerCount() : 1;
                SendResponse(new AggregatorResponse
                {
                    Judgement = GetWorstJudgement(), Multiplier = mx, Player = (AggregatorPlayerID)0
                });
                ResetReceivedHits();
                break;

            default:
                SendResponse(new AggregatorResponse {
                    Judgement = judgement, Multiplier = 1, Player = (AggregatorPlayerID)player
                });
                break;
            }
        }
Exemplo n.º 4
0
        private double MomentumJudgementMultiplier(BeatlineNoteJudgement judgement)
        {
            switch (judgement)
            {
            case BeatlineNoteJudgement.Ideal:
                return(1.0);

            case BeatlineNoteJudgement.Cool:
                return(2.0 / 3);

            case BeatlineNoteJudgement.OK:
                return(1.0 / 3);
            }
            return(0.0);
        }
Exemplo n.º 5
0
        private void RecordJudgement(int player, BeatlineNoteJudgement judgement)
        {
            Players[player].Judgements[(int)judgement]++;

            if (!SyncGameType)
            {
                return;
            }

            for (int x = 1; x < 4; x++)
            {
                if (Players[x].Playing)
                {
                    Players[x].Judgements[(int)judgement] = Players[0].Judgements[(int)judgement];
                    Players[x].Streak = Players[0].Streak;
                }
            }
        }
Exemplo n.º 6
0
        public BeatlineNoteJudgement DetermineJudgement(double phraseNumber, bool completed)
        {
            _pulseFrontOpacity = 255;
            var    nearest = NearestBeatlineNote(phraseNumber);
            double offset  = (nearest == null) ? 9999 : CalculateHitOffset(nearest, phraseNumber);

            offset = Math.Abs(offset);

            if (offset > HIT_IGNORE_CUTOFF)
            {
                //Note that the COUNT judgement is essentially an 'ignored' judgement.
                return(BeatlineNoteJudgement.Count);
            }
            BeatlineNoteJudgement result = GetJudgementResult(offset, completed);

            //Mark the beatlinenote as hit (it will be displayed differently and hold position)
            if (nearest != null)
            {
                MarkNoteAsHit(nearest, phraseNumber);
            }

            return(result);
        }
Exemplo n.º 7
0
        public void AwardJudgement(BeatlineNoteJudgement judgement, int player, int givenMultiplier, int numCompleted)
        {
            double lifeAdjust  = 0;
            long   scoreAdjust = 0;

            switch (judgement)
            {
            case BeatlineNoteJudgement.Ideal:
                Players[player].Streak++;

                double multiplier = Convert.ToDouble((9 + Math.Max(1, Players[player].Streak)));
                multiplier /= 10;
                multiplier  = Math.Min(2.0, multiplier);
                scoreAdjust = (long)Math.Round(1000 * (numCompleted) * multiplier);
                lifeAdjust  = (1 * numCompleted);
                break;

            case BeatlineNoteJudgement.Cool:
                scoreAdjust            = 750 * numCompleted;
                lifeAdjust             = (0.5 * numCompleted);
                Players[player].Streak = 0;
                break;

            case BeatlineNoteJudgement.OK:
                scoreAdjust            = 500 * numCompleted;
                Players[player].Streak = 0;
                break;

            case BeatlineNoteJudgement.Bad:
                scoreAdjust            = 250 * numCompleted;
                Players[player].Streak = 0;
                lifeAdjust             = -1 * numCompleted;
                break;

            case BeatlineNoteJudgement.Miss:
                Players[player].Streak = 0;
                lifeAdjust             = Players[player].MissedBeat();
                break;

            case BeatlineNoteJudgement.Fail:
                Players[player].Streak = 0;
                lifeAdjust             = Players[player].FailedBeat();
                break;

            case BeatlineNoteJudgement.Count:
                //Ignore judgement
                break;
            }

            RecordJudgement(player, judgement);


            if (Players[player].CPU)
            {
                scoreAdjust *= NumHumanPlayers();
            }

            scoreAdjust *= givenMultiplier;
            if (_gameType == GameType.COOPERATIVE)
            {
                scoreAdjust = (long)Math.Ceiling(scoreAdjust * (Player.GrooveMomentum));
            }
            if (_gameType == GameType.SYNC_PLUS && lifeAdjust > 0)
            {
                lifeAdjust /= (from e in Players where e.Playing select e).Count();
            }
            if (_scoreSet != null)
            {
                _scoreSet.AdjustScore(scoreAdjust, player);
            }
            if (_lifeBarSet != null)
            {
                _lifeBarSet.AdjustLife(lifeAdjust, player);
            }


            var newDj = new DisplayedJudgement
            {
                DisplayUntil = _phraseNumber + 0.5,
                Size         = _metrics["Judgement.Size", 0],
                Player       = player,
                Tier         = (int)judgement,
            };

            newDj.Position = (_metrics["Judgement", player]);

            if (SyncGameType)
            {
                newDj.Position   = _metrics["SyncJudgement", player];
                newDj.Size       = _metrics["SyncJudgement.Size", 0].Clone();
                newDj.Height    *= (from e in Players where e.Playing select e).Count();
                newDj.TextureSet = (from e in Players where e.Playing select e).Count();
            }
            _displayedJudgements[player] = newDj;
        }
Exemplo n.º 8
0
 public virtual void ApplyJudgement(BeatlineNoteJudgement judgement, int player, double multiplier)
 {
 }