private void EnsureSmashStreak() { if (isDead || smashStreakLength < smashStreakMinLength || smashStreakScore <= 0) { ResetSmashStreak(); return; } int extraScore = (int)(smashStreakScore * smashStreakLength * smashStreakScoreLengthFactor); ScoreableView scoreSource = null; extraScore = FilterScore(extraScore, scoreSource); if (extraScore > 0) { smashStreakBuffer.Length = smashStreakLength; smashStreakBuffer.ExtraScore = extraScore; eventBus.Fire((int)Events.PlayerSmashStreak, new Evt(this, smashStreakBuffer)); Score += extraScore; } ResetSmashStreak(); }
public CriticalValue FilterScore( CriticalValue score, ScoreableView source = null) { if (IsScoreFreezed || isDead) { return(new CriticalValue()); } if (!score.IsCritical && UnityEngine.Random.value <= CriticalScoreChance && source != null && source.GetComponent <SmashableView>() != null) { score.IsCritical = true; score.Value = Mathf.RoundToInt(score.Value * (1f + criticalScoreFactor)); } for (int i = 0; i < scoreFilters.Count; ++i) { score = scoreFilters[i](score, source); } return(score); }